我正在使用C#控制台应用程序制作蛇游戏。我正在使用2D数组来存储蛇的坐标。我想将新坐标存储为第一个元素,并将其他元素向上移动一个位置。当我改变元素时,我想绘制新的蛇。
谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Snake
{
class Program
{
static void VerplaatsSlang(int VerplaatsX, int VerplaatsY, ref int BeginX, ref int BeginY, int LengteSlang, int [,] PlaatsSlang)
{
int NieuwX = BeginX + VerplaatsX;
int NieuwY = BeginY + VerplaatsY;
//Verplaatsing van hoofd
Console.SetCursorPosition(BeginX, BeginY);
Console.WriteLine("░");
Console.SetCursorPosition(NieuwX, NieuwY);
Console.WriteLine("☺");
// Waarden slang doorschuiven
for (int i = 1; i <= LengteSlang; i++)
{
PlaatsSlang[i, 0] = PlaatsSlang[(i - 1), 0];
PlaatsSlang[i, 1] = PlaatsSlang[(i - 1), 1];
}
PlaatsSlang[0, 0] = NieuwX;
PlaatsSlang[0, 1] = NieuwY;
for (int i = 0; i <= LengteSlang; i++)
{
if (i ==1)
{
Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
Console.WriteLine("☺");
}
else if (i < LengteSlang)
{
Console.SetCursorPosition(PlaatsSlang[LengteSlang, 0], PlaatsSlang[LengteSlang, 1]);
Console.WriteLine("░");
}
else if (i == LengteSlang)
{
Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
Console.WriteLine(" ");
}
}
BeginX = NieuwX;
BeginY = NieuwY;
}
static void Main(string[] args)
{
//Instellen van veld.
/***************************************************************************/
Console.WindowWidth = 100; //breedte
Console.WindowHeight = 25; //hoogte
Console.SetBufferSize(100, 25); //beperking zodat er geen scroll is.
Console.WriteLine("\n" +
"\n ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄" + // alt+ 220 ▄
"\n █ Score █ █ █" + // alt+ 219 █
"\n █ █ █ █" +
"\n █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
"\n █ █" +
" ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"); // alt+ 223▀
//Begin Slang Plaatsen.
/***************************************************************************/
int BeginX = 58;
int BeginY = 10;
int[,] PlaatsSlang = { { 58, 10 }, { 59, 10 }, { 60, 10 }, { 61, 10 } };
int Lengte = (PlaatsSlang.Length / 2) - 1; // 2d array heeft dubbele lengte en moet -1 gedaan worden anders error bij for-loop
for (int i = 0; i <= Lengte; i++)
{
if (i == 0)
{
Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
Console.WriteLine("☺");
}
if (i > 0)
{
Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
Console.WriteLine("░");
}
}
//Plaats eten.
/***************************************************************************/
bool Plaats = false;
Random Rangen = new Random();
int[] PlaatsSnoep = new int[2];
PlaatsSnoep[0] = Rangen.Next(25, 94); //x-coördinaat
PlaatsSnoep[1] = Rangen.Next(3, 23); //y-coördinaat
while (Plaats == false) //Om te vermijden dat snoepje op plaats van slang komt
{
for (int i = 0; i <= Lengte; i++)
{
if (PlaatsSnoep[0] == PlaatsSlang[i, 0] && PlaatsSnoep[1] == PlaatsSlang[i, 1])
{
Plaats = false;
}
else
{
Console.SetCursorPosition(PlaatsSnoep[0], PlaatsSnoep[1]);
Console.WriteLine("■");
Plaats = true;
}
}
}
//Iets eten.
/***************************************************************************/
int LengteSlang = 3;
int Punten = 0;
if (BeginX == PlaatsSnoep[0] && BeginY == PlaatsSnoep[1])
{
Console.SetCursorPosition(11, 4);
Console.WriteLine(Punten);
LengteSlang++;
}
ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Escape)
{
switch (keyInfo.Key)
{
case ConsoleKey.UpArrow:
if (BeginY > 3)
{
VerplaatsSlang(0,-1, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
}
break;
case ConsoleKey.RightArrow:
if (BeginX < 93)
{
VerplaatsSlang(+1, 0, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
}
break;
case ConsoleKey.DownArrow:
if (BeginY < 22)
{
VerplaatsSlang(0, +1, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
}
break;
case ConsoleKey.LeftArrow:
if (BeginX > 25)
{
VerplaatsSlang(-1, 0, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
}
break;
}
//Console.Read();
}
}
}
}
答案 0 :(得分:0)
尝试使用堆栈:
Stack<Coordinate> strings = new Stack<Coordinate>();
strings.Push(new Coordinate(x, y));
和自定义坐标类:
public class Coordinate
{
public Coordinate(int x, int y)
{
xCoordinate = x;
yCoordinate = y;
}
public int xCoordinate { get; set; }
public int yCoordinate { get; set; }
}