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; }
public void setNewWallSetting(WallSetting ws) { this.wallsetting = ws; setNewField(Width, Height); }
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()
public void setNewField(Settings settings) { this.wallsetting = settings.wallsetting; setNewField(settings.fieldWidth, settings.fieldHeight); }