Esempio n. 1
0
        private void buttonDown_Click(object sender, EventArgs e)
        {
            Utility.Movements direction = Utility.Movements.down;
            freddie.Slither(direction);

            textBox1.Text = freddie.GetLocations();
        }
Esempio n. 2
0
 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));
 }
Esempio n. 3
0
 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));
 }
Esempio n. 4
0
        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;
                }

            }
        }
Esempio n. 5
0
        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;
                }
            }
        }