如何在贪吃蛇游戏中改变方向

How to change direction in snake game

本文关键字:游戏 改变方向      更新时间:2023-10-16

我有这个代码,是贪吃蛇游戏的一部分当你按下一个键时,它必须向下,但是垂直方向,开始时我的蛇是水平的,当我按下一个键时,它会向下,但不是垂直的,它是水平向下的,这不是真的,我该如何解决这个问题?

#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
void gotoxy(int eex, int eey)
{
    COORD coord;
    coord.X = eex;
    coord.Y = eey;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int main()
{
    int x=0,y=10,lx=0,ly=0;
    for(int i=10;;i++)
    {
        gotoxy(i,y);
        cout<<"***";
        Sleep(100);
        lx=i;
        ly=y;
        gotoxy(lx,ly);
        cout<<"   ";
        if(kbhit())
        {
            for(int j=ly;;j++)
            {
                gotoxy(lx,j);
                cout<<"***";
                Sleep(100);
                ly=j;
                gotoxy(lx,ly);
                cout<<"   ";
            }
        }
    }
    return 0;
}

你的问题是"如何修复这段代码",而不是"给我正确的代码"。我不会给你正确的代码。我将回答原始问题。这个问题的答案是这样的:

问题是你做cout << "***".这将在水平方向上绘制三个星号。该命令永远不会执行任何其他操作。要垂直绘制物品,或者蛇可能产生的形状,您必须在自己的坐标上分别绘制每个星号。

而不是只有一个坐标(变量xy),你必须有蛇的每个部分的坐标。使用std::queue<COORD>来记住蛇的每个部分的坐标。要使蛇移动,请在队列中的最后一项上绘制空格 (" ") 并从队列后面删除最后一项 (pop_back ),并在队列前面添加新项 ( push_front ) 并在那里绘制星号 ("*")。

当你想让蛇变大时,不要从队列中删除项目,而只是添加新项目。