private void buttonDown_Click(object sender, EventArgs e) { Utility.Movements direction = Utility.Movements.down; freddie.Slither(direction); textBox1.Text = freddie.GetLocations(); }
public Snake() { UserGivenDirection = Utility.Movements.right; segments = new List<SnakeSegment>(); segments.Add(new SnakeSegment(0, 2, true, false)); // snake head segments.Add(new SnakeSegment(0, 1, false, false)); segments.Add(new SnakeSegment(0, 0, false, false)); }
public Snake() { UserGivenDirection = Utility.Movements.right; segments = new List <SnakeSegment>(); segments.Add(new SnakeSegment(0, 2, true, false)); // snake head segments.Add(new SnakeSegment(0, 1, false, false)); segments.Add(new SnakeSegment(0, 0, false, false)); }
public void Slither(Utility.Movements direction = Utility.Movements.same) // TODO: ! Should I return false if snake dies? { int snakeLength = segments.Count; for (int i = snakeLength - 1; i >= 0; i--) // Move each segment starting at END OF TAIL { if (!segments[i].IsNew) // move it if not new { //segments[i].AnnounceLocation(); if (segments[i].IsHead) // TODO: grow snake when it eats, return false if it dies / true if all is normal { // if snake eats then generate new piece of fruit if (direction == Utility.Movements.same) direction = this.UserGivenDirection; // use previous direction this.UserGivenDirection = direction; // store new direction // TODO: Do move switch (direction) { case Utility.Movements.up: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i].X; segments[i].Y -= 1; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.down: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i].X; segments[i].Y += 1; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.left: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X -= 1; segments[i].Y = segments[i].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.right: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X += 1; segments[i].Y = segments[i].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; default: break; } } else // not head { // move to same spot as leading segment Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i - 1].X; segments[i].Y = segments[i - 1].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); } } else // was new so it didn't move - mark it not new for next time { segments[i].IsNew = false; } } }
public void Slither(Utility.Movements direction = Utility.Movements.same) // TODO: ! Should I return false if snake dies? { int snakeLength = segments.Count; for (int i = snakeLength - 1; i >= 0; i--) // Move each segment starting at END OF TAIL { if (!segments[i].IsNew) // move it if not new { //segments[i].AnnounceLocation(); if (segments[i].IsHead) // TODO: grow snake when it eats, return false if it dies / true if all is normal { // if snake eats then generate new piece of fruit if (direction == Utility.Movements.same) { direction = this.UserGivenDirection; // use previous direction } this.UserGivenDirection = direction; // store new direction // TODO: Do move switch (direction) { case Utility.Movements.up: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i].X; segments[i].Y -= 1; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.down: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i].X; segments[i].Y += 1; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.left: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X -= 1; segments[i].Y = segments[i].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; case Utility.Movements.right: // TODO: boundary check Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X += 1; segments[i].Y = segments[i].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); break; default: break; } } else // not head { // move to same spot as leading segment Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.empty); segments[i].X = segments[i - 1].X; segments[i].Y = segments[i - 1].Y; Board.SetPositionStatus(segments[i].X, segments[i].Y, Board.PositionStates.snake); } } else // was new so it didn't move - mark it not new for next time { segments[i].IsNew = false; } } }