public void Tick() { // gets called every 50 milliseconds // handle movement here, possibly if (Keys.Control == (Control.ModifierKeys & Keys.Control) && controls.IsDirectionKeyPressed) { controls.Sneak = true; } else { controls.Sneak = false; } if (Keys.Shift == (Control.ModifierKeys & Keys.Shift) && controls.IsDirectionKeyPressed) { controls.Run = true; } else { controls.Run = false; } ammopack.ReviveAmmo++; if (dude.IsAlive) { for (var i = bullets.Count - 1; i >= 0; i--) { var b = bullets[i]; if (!b.IsDead) { b.Move(); foreach (var baddude in badGuys) { if (baddude.IsAlive) { if (b.GetRect(_zoom).IntersectsWith(baddude.GetRect(_zoom))) { // kill the bullet b.IsDead = true; // enemy was hit. reduce his health baddude.health -= _rand.Next(10, 25); baddude.WasHit = true; if (baddude.health <= 0) { // crap - he's dead baddude.IsAlive = false; alivebadguys--; Score++; } } } } for (var k = backgroundTiles.Count - 1; k >= 0; k--) { var tile = backgroundTiles[k]; if (tile is Wall || tile is Border || tile is Tree) { if (b.GetRect(_zoom).IntersectsWith(tile.GetRect(_zoom))) { b.IsDead = true; } } } if (b.IsDead || b.Distance > 300) { b.IsDead = true; bullets.Remove(b); } } } } if (controls.KillAllEnemies) { for (var i = badGuys.Count - 1; i >= 0; i--) { var b = badGuys[i]; if (b.IsAlive) { b.IsAlive = false; alivebadguys--; } } } if (ammopack.IsAlive) { if (dude.IsAlive && ammopack.GetRect(_zoom).IntersectsWith(dude.GetRect(_zoom))) { ammopack.IsAlive = false; dude.Ammo += 50; ammopack.ReviveAmmo = 0; } } else { if (ammopack.ReviveAmmo < 500) { ammopack.ReviveAmmo++; } else { ammopack.X = 305; ammopack.Y = 340; ammopack.IsAlive = true; } } for (var i = golds.Count - 1; i >= 0; i--) { if (golds[i].GetRect(_zoom).IntersectsWith(dude.GetRect(_zoom))) { dude.Treasure += golds[i].Coins; golds.RemoveAt(i); Score += 5; } } for (var i = badGuys.Count - 1; i >= 0; i--) { var b = badGuys[i]; if (b.IsAlive) { if (b.GetRect(_zoom).IntersectsWith(dude.GetRect(_zoom))) { dude.IsAlive = false; } b.Move(_form.ClientSize.Width, _form.ClientSize.Height); } } var inWater = false; var inLava = false; for (var j = badGuys.Count - 1; j >= 0; j--) { badGuys[j].IsInWater = false; } for (var i = backgroundTiles.Count - 1; i >= 0; i--) { var tile = backgroundTiles[i]; var isBadGuyBlocker = (tile is Wall || tile is Lava || tile is Border || tile is Tree || tile is DeepWater); if (tile is Water) { var waterTile = tile as Water; var dudeGotWet = waterTile.GetRect(_zoom).IntersectsWith(dude.GetRect(_zoom)); if (dudeGotWet) { inWater = true; } for (var j = badGuys.Count - 1; j >= 0; j--) { var enemy = badGuys[j]; var enemyWet = waterTile.GetRect(_zoom).IntersectsWith(enemy.GetRect(_zoom)); if (enemyWet) { enemy.IsInWater = true; } } } else if (tile is Lava) { var lavaTile = tile as Lava; var dudeGotHotFeet = lavaTile.GetRect(_zoom).IntersectsWith(dude.GetRect(_zoom)); if (dudeGotHotFeet) { inLava = true; } } if (isBadGuyBlocker) { var blockerRect = tile.GetRect(_zoom); for (var j = badGuys.Count - 1; j >= 0; j--) { var enemy = badGuys[j]; var isInBlockingTile = blockerRect.IntersectsWith(enemy.GetRect(_zoom)); if (isInBlockingTile) { enemy.ReverseAndMoveOut(_zoom, _form.ClientSize.Width, _form.ClientSize.Height, blockerRect); } } } } dude.IsInWater = inWater; if (inLava) { dude.IsAlive = false; } dude.IsRunning = controls.Run; dude.IsSneaking = controls.Sneak; if (controls.IsDirectionKeyPressed) { int treeCheckX = dude.X, treeCheckY = dude.Y; if (controls.Up) { treeCheckY = dude.Y - dude.Speed; } if (controls.Down) { treeCheckY = dude.Y + dude.Speed; } if (controls.Left) { treeCheckX = dude.X - dude.Speed; } if (controls.Right) { treeCheckX = dude.X + dude.Speed; } var hitSomething = false; var treeCheckRect = new Rectangle(treeCheckX, treeCheckY, Convert.ToInt32(dude.Size * _zoom), Convert.ToInt32(dude.Size * _zoom)); for (var i = backgroundTiles.Count - 1; i >= 0; i--) { var tile = backgroundTiles[i]; if (tile is Wall || tile is Tree || tile is Border || tile is DeepWater) { var wallkinwall = tile.GetRect(_zoom).IntersectsWith(treeCheckRect); if (wallkinwall) { hitSomething = true; } } } if (!hitSomething) { dude.X = treeCheckX; dude.Y = treeCheckY; } dude.LastKnownDirection = controls.CurrentDirection; } if (controls.Death) { dude.IsAlive = false; } if (controls.Exit) { _form.Close(); Application.Exit(); } _form.Invalidate(); }