下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
#include
#include
#include
#include
#include
#include
#define _SIZE_ 30
#define _SET_ cout<
static int flags = 0;
typedef int Array[_SIZE_][_SIZE_];
using namespace std;
struct Pos
{
int x;
int y;
Pos(int X,int Y):x(X),y(Y){}
};
class Grial
{
public:
Grial(Array a)
{
for(int i=0;i<_size_>
{
for(int j=0;j<_size_>
{
ar[i][j] = a[i][j];
}
}
}
void Init(Pos start)
{
int i = 0;
int j = 0;
char ch;
deque Q;
list Mlist;
ar[start.x][start.y] = 1;
Q.push_front(start);
while(1)
{
system("stty raw -echo");//改变终端控制,
//输入一个字符就立刻相应,将原来的\n作为结束的标志,
//改为输入一个字符就立即返回。
ch = getchar();
system("stty -raw echo");
//让终端变回正常。
switch(ch)
{
case 'w':
stateUp(Q);
system("clear");
Printf();
break;
case 'a':
stateLeft(Q);
system("clear");
Printf();
break;
case 'd':
stateRight(Q);
system("clear");
Printf();
break;
case 's':
stateDown(Q);
system("clear");
Printf();
break;
default:
if(ch=='0')
exit(1);
}
GrialM(Mlist);
if(flags==0)
{
Pos pos = AdancePoint(Mlist);
ar[pos.x][pos.y] = 1;//随机点。
flags=1;
}
sleep(0.675);
}
}
bool IsIn(Pos pos,deque &Q)
{
deque :: iterator it=Q.begin();
while(it!=Q.end())
{
if(pos.x==it->x && pos.y==it->y)
return true;
it++;
}
return false;
}
void GrialM(list &Mlist)//构造随机链表.
{
for(int i=0;i<_size_>
{
for(int j=0;j<_size_>
{
if(ar[i][j]==0)
Mlist.push_back(Pos(i,j));
}
}
}
Pos AdancePoint(list &Mlist)
{
int n = Mlist.size();
list :: iterator it = Mlist.begin();
advance(it,rand()%n);
return Pos(it->x,it->y);
}
void stateUp(deque &Q)
{
Pos pos = Q.front();
int x ;
if(pos.x==0)
{ x = _SIZE_-1;}
else
{x = pos.x-1;}
int y = pos.y;
Pos result(x,y);
if(IsIn(result,Q))
{
exit(-1);
}
if(ar[x][y]==1)
{
Q.push_front(result);
flags=0;
return ;
}
ar[x][y] = 1;
Q.push_front(result);
Pos ret = Q.back();
ar[ret.x][ret.y] = 0;
Q.pop_back();
}
void stateLeft(deque &Q)
{
Pos pos = Q.front();
int x = pos.x;
int y;
if(pos.y==0)
{
y = _SIZE_-1;
}
else{y = pos.y-1;}
Pos result(x,y);
if(IsIn(result,Q))
{
exit(-1);
}
if(ar[x][y]==1)
{
Q.push_front(result);
flags=0;
return ;
}
ar[x][y] = 1;
Q.push_front(result);
Pos ret = Q.back();
ar[ret.x][ret.y] = 0;
Q.pop_back();
}
void stateRight(deque &Q)
{
Pos pos = Q.front();
int x = pos.x;
int y ;
if(pos.y==_SIZE_-1)
{
y=0;
}
else {y=pos.y+1;}
Pos result(x,Q))
{
exit(-1);
}
if(ar[x][y]==1)
{
Q.push_front(result);
flags=0;
return ;
}
ar[x][y] = 1;
Q.push_front(result);
Pos ret = Q.back();
ar[ret.x][ret.y] = 0;
Q.pop_back();
}
void stateDown(deque &Q)
{
Pos pos = Q.front();
int x ;
if(pos.x==_SIZE_-1)
{x=0;}
else {x = pos.x+1;}
int y = pos.y;
Pos result(x,Q))
{
exit(-1);
}
if(ar[x][y]==1)
{
Q.push_front(result);
flags=0;
return ;
}
ar[x][y] = 1;
Q.push_front(result);
Pos ret = Q.back();
ar[ret.x][ret.y] = 0;
Q.pop_back();
}
public:
void Printf()
{
_SET_;
for(int i=0;i<_size_>
{
for(int j=0;j<_size_>
{
if(ar[i][j]==1)
{
cout<
}
else
cout<
}
cout<
}
}
private:
Array ar;
};
int main()
{
Array arr={0};
Grial gl(arr);
int x = rand()%10;
int y = rand()%10;
Pos start(x,y);
gl.Init(start);
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的C++简单贪吃蛇实现全部内容,希望文章能够帮你解决C++简单贪吃蛇实现所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!