/** * Moves snakes in direction and handle snake growing **/ private void move(Space.Orientation dir) { Coord currentHead = Snake.First.Value; Map[currentHead.y, currentHead.x] = new Cell(CellType.SNAKE); Snake.AddFirst(currentHead + Space.Vec[(int)dir]); Map[Snake.First.Value.y, Snake.First.Value.x] = new Cell(CellType.HEAD); if (toGrow == 0) { Map[Snake.Last.Value.y, Snake.Last.Value.x] = new Cell(CellType.EMPTY); Snake.RemoveLast(); } else { toGrow--; currentScore += 1; } }
/** * Inits random snake position and fruit **/ public void initGame() { currentScore = 0; Random rand = new Random(); // Creates empty map for (int i = 0; i < Space.W; i++) { for (int j = 0; j < Space.H; j++) { Map[j, i] = new Cell(CellType.EMPTY); } } // Generates snake (head + 2 body) //Snake.AddFirst(new Coord(5 + rand.Next(Space.H - 10), 5 + rand.Next(Space.W - 10))); Snake.AddFirst(new Coord(10, 10)); //currentOrientation = (Space.Orientation)rand.Next(4); currentOrientation = Space.Orientation.NORTH; //Snake.AddLast(Snake.Last.Value + Space.Vec[(int)currentOrientation+2%4]); //Snake.AddLast(Snake.Last.Value + Space.Vec[(int)currentOrientation+2%4]); Snake.AddLast(Snake.Last.Value + Space.Vec[(int)Space.Orientation.SOUTH]); Snake.AddLast(Snake.Last.Value + Space.Vec[(int)Space.Orientation.SOUTH]); Console.WriteLine("Vec = " + Space.Vec[(int)currentOrientation].y + " ; " + Space.Vec[(int)currentOrientation].x); Console.WriteLine("Snake head = " + Snake.First.Value.y + " ; " + Snake.First.Value.y); foreach (Coord c in Snake) { Console.WriteLine(c.y + " ; " + c.x); Map[c.y, c.x] = new Cell(CellType.SNAKE); } Map[Snake.First.Value.x, Snake.First.Value.y] = new Cell(CellType.HEAD); // Adds a fruit on the map bool fruitOk = false; do { int y = rand.Next(Space.H); int x = rand.Next(Space.W); if (Map[y, x].type != CellType.SNAKE && Map[y, x].type != CellType.HEAD) { Map[y, x] = new Cell(CellType.FRUIT); fruitOk = true; } } while (!fruitOk); }