示例#1
0
        public Field(int width, int height, Snake snake, WallSetting settings)
        {
            setField(width, height);

            wallsetting = settings;
            SetWalls(wallsetting);

            this.snake = snake;
            setSnake(snake);

            GenerateFood();

            snake.checkNextMove += CheckNextMove;
            snake.snakeMoved += OnSnakeMoved;
            snake.foodEaten += FoodEaten;
        }
示例#2
0
 public void setNewWallSetting(WallSetting ws)
 {
     this.wallsetting = ws;
     setNewField(Width, Height);
 }
示例#3
0
        private void SetWalls(WallSetting settings)
        {
            int iteration_times = 100;

            switch (settings)
            {
                case WallSetting.None:
                    return;

                case WallSetting.Low:
                    iteration_times = 50;
                    break;

                case WallSetting.Medium:
                    iteration_times = 100;
                    break;

                case WallSetting.High:
                    iteration_times = 200;
                    break;
            }

            int x1 = 1;
            int x2 = Width - 1;
            int y1 = 1;
            int y2 = Height - 1;

            int maxLength = Width - 2;
            
            for(int iter = 0; iter < iteration_times; iter++)
            {
                int x = rand.Next(x1, x2);
                int y = rand.Next(y1, y2);
                int L = rand.Next(2, maxLength + 1);

                Direction d = (Direction) rand.Next(0, 4);

                Point[] cells = new Point[L];

                switch(d)
                {
                    case Direction.Up:
                        for(int i = 0; i < L; i++)
                        {
                            cells[i].x = x;
                            cells[i].y = y - i;
                        }
                        break;

                    case Direction.Down:
                        for(int i = 0; i < L; i++)
                        {
                            cells[i].x = x;
                            cells[i].y = y + i;
                        }
                        break;

                    case Direction.Left:
                        for (int i = 0; i < L; i++)
                        {
                            cells[i].x = x - i;
                            cells[i].y = y;
                        }
                        break;

                    case Direction.Right:
                        for (int i = 0; i < L; i++)
                        {
                            cells[i].x = x + i;
                            cells[i].y = y;
                        }
                        break;
                }

                bool possibleWall = true;

                foreach(Point pt in cells)
                {
                    if (    !inFieldRange(pt.x, pt.y) ||
                         existNearbyWalls(pt.x, pt.y) ||
                         atEdge(pt.x, pt.y)
                       )
                    {
                        possibleWall = false;
                        break;
                    }
                }

                if(possibleWall)
                {
                    foreach (Point pt in cells)
                        field[pt.x, pt.y] = FieldState.Wall;
                }

            } // end for( ... iter < iteration_times ... )

        } // void SetWalls()
示例#4
0
 public void setNewField(Settings settings)
 {
     this.wallsetting = settings.wallsetting;
     setNewField(settings.fieldWidth, settings.fieldHeight);
 }