如何改变蛇游戏的方向

时间:2014-04-02 20:35:46

标签: c++ string

我有这个代码,是蛇游戏的一部分 当你按下一个键时,它必须向下,但是垂直,在开始时我的蛇会水平移动,当我按下一个键时它会向下移动,但不是垂直的,它会水平向下,这不是真的,怎么能我解决了这个问题?

#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;
}

1 个答案:

答案 0 :(得分:1)

您的问题是&#34;如何修复此代码&#34;,而不是&#34;给我正确的代码&#34;。我不会给你正确的代码。我会回答原来的问题。这个问题的答案是:

问题在于你cout << "***"。这将水平地绘制三个星号。该命令永远不会做任何其他事情。要垂直绘制项目,或者蛇可能形成任何形状,你必须在它自己的坐标上单独绘制每个星号。

您必须拥有蛇的每个部分的坐标,而不是只有一个坐标(变量xy)。使用std::queue<COORD>记住蛇的每个部分的坐标。让蛇移动队列中最后一个项目的空间(&#34;&#34;)并从队列后面删除最后一项(pop_back),并在前面添加新项目队列(push_front)并在那里绘制星号(&#34; *&#34;)。

如果你想让蛇更大,不要从队列中删除项目,只需添加新的。