Based on this earlier post, we had a working console game. Admittedly it doesn’t do much, apart from allow you to move a star around the screen. In order to turn this into a snake game, the first thing to do is to no longer clear the screen:
private static void DrawScreen()
{
//Console.Clear();
Console.SetCursorPosition(\_left, \_top);
Console.Write('\*');
}
That gives us a snake - but you might notice that when you move left, it doesn’t ‘trail’. There is a possible workaround (albeit, not massively efficient - although remember that this is a game with the purpose of teaching programming).
First, create a struct to hold the position:
private struct Position
{
public int left;
public int top;
}
This obviously could be a class. Next, create a list of these:
private static List<Position> points = new List<Position>();
Here’s what the `AcceptInput` function looks like with the changes:
private static bool AcceptInput()
{
if (!Console.KeyAvailable)
return false;
ConsoleKeyInfo key = Console.ReadKey();
Position currentPos;
if (points.Count != 0)
currentPos = points.Last();
else
currentPos = GetStartPosition();
switch (key.Key)
{
case ConsoleKey.LeftArrow:
currentPos.left--;
break;
case ConsoleKey.RightArrow:
currentPos.left++;
break;
case ConsoleKey.UpArrow:
currentPos.top--;
break;
case ConsoleKey.DownArrow:
currentPos.top++;
break;
}
points.Add(currentPos);
return true;
}
private static Position GetStartPosition()
{
return new Position()
{
left = 0,
top = 0
};
}
But what about the tail
In traditional snake, the last element is removed each iteration, unless you `eat` something. Doing it the above way lends itself to this more easily. I’ll tackle that for the next post.