我的半成品贪吃蛇有问题,求路人帮忙解决
大体的思路可以不用看了,就是它只能动一下就停住了,小弟实在看不出来错哪里了
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
using namespace std;
const int Array_x = 100;
const int Array_y = 50;
class Position
{
char Array[Array_x][Array_y];
int x , y;
public:
Position(int _x = 40,int _y = 20)
{
x = _x;
y = _y;
if((x <= 0 || y <= 0) || (x >= Array_x || y >= Array_y))
{
cout << "输入值或大或小,默认值为边框为20 , 祝你玩的愉快" << endl;
for(int j = 0 ; j < y ; ++j)
{
for(int i = 0 ; i < x ; ++i)
{
if(i == 0 || j == 0 || i == x-1 || j == y-1)
Array[j][i] = 'A';
else
Array[j][i] = ' ';
}
} }
else
{
for(int j = 0 ; j < y ; ++j)
{
for(int i = 0 ; i < x ; ++i)
{
if(i == 0 || j == 0 || i == x-1 || j == y-1)
Array[j][i] = 'A';
else
Array[j][i] = ' ';
}
}
}
}
void AssValue(int temp_x ,int temp_y)
{
Array[temp_x][temp_y] = 'B';
}
void AssEmpty(int temp_x , int temp_y)
{
Array[temp_x][temp_y] = ' ';
}
char get_Array(int _x , int _y)
{
return Array[_x][_y];
}
int get_x()
{
return x;
}
int get_y()
{
return y;
}
void Print()
{
for(int i = 0 ; i < y ; ++i)
{
for(int j = 0 ; j < x ; ++j)
cout << Array[i][j];
cout << endl;
}
}
};
struct Node
{
int x;
int y;
Node *next;
};
class Pointer
{
Position pst;
Node *head;
public:
void Initiate(int px , int py)
{
head = new Node;
head->x = px;
head->y = py;
head->next = NULL;
pst.AssValue(px , py);
}
Position getPosition()
{
return pst;
}
void Assign_rand(int temp_x , int temp_y)
{
pst.AssValue(temp_x , temp_y);
}
void Add(int temp_x , int temp_y)
{
Node *temp = new Node;
temp->x = temp_x;
temp->y = temp_y;
temp->next = head;
pst.AssValue(temp_x , temp_y);
head = temp;
}
void Del()
{
Node* tt = head;
if(tt->next == NULL)
{
delete head;
head = NULL;
}
else
{
while(tt->next != NULL)
{
tt = tt->next;
}
}
pst.AssEmpty(tt->x , tt->y);
delete tt;
tt = NULL;
}
};
class Running
{
// Position pos;
Pointer pt;
int rx , ry;
public:
Running(int _rx = 10, int _ry = 10)
:rx(_rx) , ry(_ry){}
void Create_head()
{
pt.Initiate(rx , ry);
for(int i = 1 ; i < 3 ; ++i)
{
++rx;
pt.Add(rx , ry);
}
}
void Create_ege()
{
int sign = 1;
int r_x , r_y;
srand((unsigned)time(0));
while(sign)
{
r_x = rand()%(pt.getPosition().get_x());
r_y = rand()%(pt.getPosition().get_y());
if(' ' == pt.getPosition().get_Array(r_x , r_y))
sign = 0;
}
pt.Assign_rand(r_x , r_y);
}
void Display()
{
pt.getPosition().Print();
}
void game_over()
{
int temp_rx = pt.getPosition().get_x() - 1;
int temp_ry = pt.getPosition().get_y() - 1;
if(rx == 0 || rx == temp_rx || ry == 0 || ry == temp_ry)
return;
}
void Judge(char ch)
{
switch(ch)
{
case 'w':
++ry;pt.Add(rx , ry);break;
case 's':
--ry;pt.Add(rx , ry);break;
case 'a':
--rx;pt.Add(rx , ry);break;
case 'd':
++rx;pt.Add(rx , ry);break;
}
}
void Run() //问题就在这里
{
char ch = 'w';
// int sign = 1;
pt.getPosition().Print();
while(1)
{
Judge(ch);
pt.Del();
Sleep(1000);
system("cls");
pt.getPosition().Print();
}
}
int get_rx()
{
return rx;
}
int get_ry()
{
return ry;
}
};
int main()
{
Running rn;
rn.Create_head();
rn.Create_ege();
rn.Run(); //这是运行的代码,主要的问题就在这个函数中
return 0;
}