Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.
My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
{ SpriteBatch _spriteBatch; private Texture2D _texture; private Vector2 _position = new Vector2(32, 32); private const float Speed = 156; private Vector2 _direction = new Vector2(0, 1); private Vector2? _target; private readonly int[,] _map = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 }, { 1, 0, 1, 0, 0, 0, 0, 1, 0, 1 }, { 1, 0, 1, 1, 0, 0, 0, 1, 0, 1 }, { 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }, { 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 }, { 1, 1, 1, 1, 0, 1, 1, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; { {PreferredBackBufferWidth = 320, PreferredBackBufferHeight = 320}; Content.RootDirectory = "Content"; } { _spriteBatch = new SpriteBatch(GraphicsDevice); _texture = new Texture2D(GraphicsDevice, 1, 1); _texture.SetData(new[] { Color.White }); } { if (Keyboard.GetState().IsKeyDown(Keys.Down)) _direction = new Vector2(0, 1); if (Keyboard.GetState().IsKeyDown(Keys.Right)) _direction = new Vector2(1, 0); if (Keyboard.GetState().IsKeyDown(Keys.Up)) _direction = new Vector2(0, -1); if (Keyboard.GetState().IsKeyDown(Keys.Left)) _direction = new Vector2(-1, 0); // If there's no target and we can move in the chosen direction, set new target if (_target == null) if (CanMoveInDirection(_position, _direction)) _target = _position + _direction * 32; // If there's a target move towards that location, and clear target when destination is reached if (_target != null) if (MoveTowardsPoint(_target.Value, (float) gameTime.ElapsedGameTime.TotalSeconds)) _target = null; base.Update(gameTime); } { int nx = (int) (position.X / 32) + (int) direction.X; int ny = (int) (position.Y / 32) + (int) direction.Y; if (nx < 0 || ny < 0 || nx >= 10 || ny >= 10) return false; return _map[ny, nx] == 0; } { // If we're already at the goal return immediatly if (_position == goal) return true; // Find direction from current position to goal Vector2 direction = Vector2.Normalize(goal - _position); // Move in that direction _position += direction * Speed * elapsed; // If we moved PAST the goal, move it back to the goal if (Math.Abs(Vector2.Dot(direction, Vector2.Normalize(goal - _position)) + 1) < 0.1f) _position = goal; // Return whether we've reached the goal or not return _position == goal; } { GraphicsDevice.Clear(Color.LightGray); _spriteBatch.Begin(); for (int i = 0; i != 10; ++i) for (int j = 0; j != 10; ++j) if(_map[j,i] == 1) _spriteBatch.Draw(_texture, new Rectangle(i*32, j*32, 32, 32), null, Color.Black); _spriteBatch.Draw(_texture, new Rectangle((int) _position.X +8, (int) _position.Y + 8, 16, 16), Color.Yellow); _spriteBatch.End(); base.Draw(gameTime); } } } |