Représenter le serpent
La création d'un jeu Snake est assez simple. La première chose dont vous avez besoin est un moyen de représenter le corps de votre serpent. Si vous considérez que votre serpent est composé de blocs ou de tuiles, votre corps peut simplement être une liste de ces coordonnées de blocs.
Dans votre cas, si vous avez l'intention de faire une application console, chacun d'entre eux sera un caractère sur la console, et la position correspondra à une ligne ou une ligne de la sortie de la console. Vous commencez donc par ceci:
// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();
À ce stade, votre liste est vide, donc votre serpent n'a pas de corps. Disons que vous voulez un serpent de longueur 5 et que la tête doit commencer en position (5,2) et pousser vers le bas. Ajoutez simplement ces positions à la liste au début du jeu, par exemple:
// Initialize the snake with 5 blocks starting downwards from (5,2)
for(int i=0; i<5; ++i)
{
body.Add(new Point(5, 2 + i));
}
Rendre le serpent
Pour le rendu, dessinez simplement un caractère à chaque position de la liste des corps. Par exemple, l'exemple ci-dessus pourrait être dessiné comme suit:
...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
|
x = 5
Vous pouvez devenir plus compliqué en choisissant différents caractères pour la tête du personnage (premier élément de la liste) et la queue (dernier élément de la liste) et même les orienter en fonction de la position des blocs adjacents. Mais pour commencer, il suffit de tout rendre comme un #
ou quelque chose.
Vous pouvez par exemple commencer avec un tableau de caractères 2D contenant l'arrière-plan comme ceci:
// Array with map characters
char[,] render = new char[width, height];
// Fill with background
for(x=0; x<width; ++x)
for(y=0; y<height; ++y)
render[x,y] = '.';
Et puis parcourez le corps du serpent en le dessinant dans le tableau:
// Render snake
foreach(Point point in body)
render[point.X, point.Y] = '#';
Enfin, parcourez à nouveau le tableau et écrivez chaque caractère dans la console, avec un saut de ligne à la fin de chaque ligne.
// Render to console
for(y=0; y<height; ++y)
{
for(x=0; x<width; ++x)
{
Console.Write(render[x,y]);
}
Console.WriteLine();
}
Déplacer le serpent
Enfin, le mouvement. La première chose dont vous avez besoin est de garder une trace du mouvement Direction
du serpent. Cela peut être une énumération simple:
// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }
Et l'acte de déplacer le serpent peut être fait simplement en supprimant le dernier bloc de la liste et en l'ajoutant sur le devant, dans la bonne direction . En d'autres termes, quelque chose comme:
// Remove tail from body
body.RemoveAt(body.Count - 1);
// Get head position
Point next = body[0];
// Calculate where the head should be next based on the snake's direction
if(direction == Direction.Left)
next = new Point(next.X-1, next.Y);
if(direction == Direction.Right)
next = new Point(next.X+1, next.Y);
if(direction == Direction.Up)
next = new Point(next.X, next.Y-1);
if(direction == Direction.Down)
next = new Point(next.X, next.Y+1);
// Insert new head into the snake's body
body.Insert(0, next);