私は現在、ヘビのゲームに取り組んでおり、尻尾が頭に追従するようにするのに苦労しています。私は現在それを機能させようとしており、約12の異なるアイデアを試しましたが、そのすべてが完全に失速するか(たとえば、ヘビが1か所で凍っているように見えます)、または垂直方向の動きがまったく発生しません。ある動きが別の動きに続くのではなく、一度に尻尾のポイント。また、避けられないように思われる Console.Clear() メソッドにも問題があります。何度もやりすぎて、ヘビの最初のポイント以外のすべてが削除されるか、そうしないと古い位置が消去されません。コードは次のとおりです (コードが機能することを確認する必要があるため、実際のゲームから分割されたテスト コードです)。
class Program
{
const int size = 10;
struct Sprite
{
public char[] ch;
public int[,] posXY;
public int directionX;
public int directionY;
}
static void Main(string[] args)
{
int startX = 10;
int startY;
Sprite player = new Sprite();
player.ch = new char[7];
player.posXY = new int[7,2];
for (int i = 0; i < player.ch.Length; i++)
{
player.ch[i] = '*';
}
for (int i = 0; i < 7; i++)
{
startY = 10;
player.posXY[i, 0] = startX;
player.posXY[i, 1] = startY;
startX--;
}
ConsoleKeyInfo cki = new ConsoleKeyInfo();
while (true)
{
update(cki, ref player);
draw(player);
Thread.Sleep(200);
}//end while
}//end main
static void update(ConsoleKeyInfo cki, ref Sprite player)
{
if (Console.KeyAvailable)
{
cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.LeftArrow || cki.Key == ConsoleKey.A)
{
player.directionX = -1;
player.directionY = 0;
}
if (cki.Key == ConsoleKey.RightArrow || cki.Key == ConsoleKey.D)
{
player.directionX = 1;
player.directionY = 0;
}
if (cki.Key == ConsoleKey.UpArrow || cki.Key == ConsoleKey.W)
{
player.directionX = 0;
player.directionY = -1;
}
if (cki.Key == ConsoleKey.DownArrow || cki.Key == ConsoleKey.S)
{
player.directionX = 0;
player.directionY = 1;
}
}//endif
for (int i = 0; i < 7; i++)
{
player.posXY[i, 0] = player.posXY[i, 0] + player.directionX;
player.posXY[i, 1] = player.posXY[i, 1] + player.directionY;
}
}//end update
static void draw(Sprite player)
{
Console.Clear();
for (int i = 0; i < 7; i++)
{
Console.SetCursorPosition(player.posXY[i, 0], player.posXY[i, 1]);
Console.Write(player.ch[i]);
}
}//end draw
}
PS私はスネークに構造体を使用する必要があります。クラスを使用することはオプションではありません。