using System.Collections.Generic;
using System.Threading.Tasks;
static void Main(string[] args)
Board board = new Board(20, 30);
while (!board.gameover) {
while (!board.gameover && !Console.KeyAvailable)
switch(Console.ReadKey(true).Key)
board.snake.changeDir(Snake.Direction.up);
case ConsoleKey.DownArrow:
board.snake.changeDir(Snake.Direction.down);
case ConsoleKey.LeftArrow:
board.snake.changeDir(Snake.Direction.left);
case ConsoleKey.RightArrow:
board.snake.changeDir(Snake.Direction.right);
public Snake(int x, int y)
body = new List<Point>();
body.Add(new Point() { X = x, Y = y });
for (int i = body.Count - 1; i >= 1; i--)
body[i].X = body[i - 1].X;
body[i].Y = body[i - 1].Y;
public void changeDir(Direction dir) {
body.Add(new Point() { X = 0, Y = 0 });
public Board(int N, int M)
private void initGame() {
for (int i = 0; i < n; i++)
board[i, 0] = board[i, m - 1] = Cell.wall;
for (int i = 0; i < m; i++)
board[0, i] = board[n - 1, i] = Cell.wall;
snake = new Snake(n / 2, m / 2);
food = new Point() { X = 5, Y = 5 };
private void showCell(Cell a) {
for (int i = 1; i < n - 1; i++)
for (int j = 1; j < m - 1; j++)
board[i, j] = Cell.empty;
if (board[snake.body[0].X, snake.body[0].Y] == Cell.wall)
Console.WriteLine("Game over!");
foreach (Point a in snake.body) {
board[a.X, a.Y] = Cell.snake;
if (snake.body[0].X == food.X && snake.body[0].Y == food.Y)
Random rnd = new Random();
food.X = rnd.Next(1, n - 2);
food.Y = rnd.Next(1, m - 2);
board[food.X, food.Y] = Cell.food;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
public int X{ get; set; }
public int Y{ get; set; }