简单的snakegame C ++尾巴没有跟随

时间:2018-02-10 14:49:38

标签: c++

在这场蛇的游戏中,当我得到超过2条尾巴时,我的尾巴不会跟着我的脑袋,我无法弄明白为什么。我没有告诉它它去了它显然是连接到尾部命令但不跟随我。我发布了整个代码,以便更清楚地了解问题。

#include <iostream>  
#include <string>
#include <conio.h>
#include <Windows.h>
using namespace std; 
bool gameOver;               
const int width = 20;        
const int height = 20;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirecton dir;


void setup() 
{
 gameOver = false;
 dir = STOP;
 x = width / 2;
 y = height / 2; 
 fruitX = rand() % width;  
 fruitY = rand() % height; 
 score = 0;
}
void Draw()
{
system("cls");
for (int i = 0; i < width + 2; i++)  
    cout << "#";
cout << endl;

for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {
        if (j == 0)
            cout << "#";  
        if (i == y && j == x)
            cout << "O";
        else if (i == fruitY && j == fruitX)
            cout << "F";
        else
        {
            bool print = false;
            for (int k = 0; k < nTail; k++)
            {
                if (tailX[k] == j && tailY[k] == i)
                {
                    cout << "o";
                    print = true;
                }
            }
            if (!print)
                cout << " ";
        }

        if (j == width - 1)
            cout << "#"; 
    }
    cout << endl;
}

for (int i = 0; i < width + 2; i++)
    cout << "#";
cout << endl;
cout << "score:" << score << endl;
}
void Input()
{
if (_kbhit())
{
    switch (_getch())
    {
    case 'a':
        dir = LEFT;
        break;
    case 'd': 
        dir = RIGHT;
        break;
    case 'w':
        dir = UP;
        break;
    case 's':
        dir = DOWN;
        break;
    case 'x':
        gameOver = true;
        break;
    }
  }
}
void Logic()
{
int prevX = tailX[0];
int prevY = tailX[0];
int prev2X, prev2Y;
tailX[0] = x;
tailY[0] = y;
for (int i = 1; i < nTail; i++)
{
     prev2X = tailX[i];
     prev2Y = tailY[i];
     tailX[i] = prevX;
     tailY[i] = prevY;
     prevX = prev2X;
     prevY = prev2Y; 
}
switch (dir)
{
case LEFT:
    x--;
    break;
case RIGHT:
    x++;
    break;
case DOWN:
    y++;
    break;
case UP:
    y--;
    break;
default:
    break;
}
if (x > width || x < 0 || y > height || y < 0)
gameOver = true;


for (int i = 0; 9 < nTail; i++)
    if (tailX[i] == x && tailY[i] == y)
        gameOver = true;

if (x == fruitX && y == fruitY)
{
    score += 10;
    fruitX = rand() % width;
    fruitY = rand() % height;
    nTail++;
  }
  }
  int main() 
  {
  setup();
  while (!gameOver)
  {
   Draw();
   Input();
   Logic();
   //sleep(10); sleep(10);   
   }
   return 0; 
   }

0 个答案:

没有答案