c++写的贪吃蛇

#include
#include
#include
#include
#include
using namespace std;
/*
t为分数
u为级数
r可以用来控制速度
*/
int t=0,u=1,r=5;
/*
Weiqian类用来打印边界和里面的图形
set是设置数组qian[22][22]的值
display打印图形
qian[22][22]用来存储字符
*/
class Weiqian
{
public:
void set();
void display();
char qian[22][22];
}W;
//*****************************
void Weiqian::set()
{
int j,i;
cout<<"\n";
for(j=0;j<22;j++)
{
for(i=0;i<22;i++)
{
if(j==0||i==0||j==21||i==21)
qian[j][i]='\2';
else
qian[j][i]=' ';
}
}
}


//******************************************
/*
打印图形
*/
void Weiqian::display()
{
int j,i;
cout<<"\n";
for(j=0;j<22;j++)
{
for(i=0;i<22;i++)
{
cout< }
cout< }
}
/*
节点类
可以用来组成链表和得到坐标的值想x,y
可以用来增加节点和删除节点
通过增加投节点和删除尾节点来移到动贪吃蛇
*/
class SnkeJieDian
{
private:
SnkeJieDian *p,*next;
int x,y;
public:
int getx();
int gety();
void add_dian(int x,int y);
void delet_dian();
    
};
SnkeJieDian *head=NULL,*wei=NULL;
//*********************************
/*通过形参的坐标来增加一个节点
*/
void SnkeJieDian::add_dian(int x,int y)
{
SnkeJieDian *R=new SnkeJieDian;//开辟一个对象
R->x=x;
R->y=y;
R->next=head;
R->p=NULL;
if(head)
head->p=R;
head=R;
if(!wei)
wei=head;
W.qian[x][y]='\3';//爱心字符


}


//*****************************
/*
返回横坐标的值
*/
int SnkeJieDian::getx()
{
return x;
}




//*******************
/*
返回纵标的值
*/
int SnkeJieDian::gety()
{

return y;
}
//****************


/*
删除一个尾节点
*/
void SnkeJieDian::delet_dian()
{
SnkeJieDian *p=wei;
W.qian[wei->getx()][wei->gety()]=' ';
wei=wei->p;
wei->next=NULL;
}
//*********************************


/*
用来控制移动的类
*/
class move
{
public:
char ch;    
int foodx;
int foody;
public:
void move_dong();
void ChangePoint(char); 
void GetFood();
};
//*****************************
/*
控制方向的移动和判断是否操作有误
*/
void move::move_dong()
{
int a,b;
a= head->getx();
b= head->gety();
switch(ch)
{
case 'w': --a; break;
case 's': ++a; break;
case 'a': --b; break;
case 'd': ++b; break;
    case 'W': --a; break;
case 'S': ++a; break;
case 'A': --b; break;
case 'D': ++b; break;
}
if(a==21||b==21||a==0||b==0)
{
cout<<"。。。不好意思啊。。。你输了!!!"< exit(0);
}
if(W.qian[a][b]=='\3')
{
cout<<"\2 \2.....你太饿了吧。。咋吃自己啊。。哈哈哈!\2 \2"< exit(0);
}
if(a==foodx && b==foody)
{ t++;
head->add_dian(a,b);
if(t%3==0)
{
cout<<"  表现不错啊。。恭喜你级啦!!!\1 \1 "< u++;
r--;
cout< Sleep(3000);
}
GetFood();
}
else
{
head->add_dian(a,b); 
head->delet_dian();
}
}
/*
通过形参的值来给ch赋值
*/
void move::ChangePoint(char setdian)
{
switch(setdian)
{
case 'w': ch= 'w'; break;
case 's': ch= 's'; break;
case 'a': ch= 'a'; break;
case 'd': ch= 'd'; break;
    case 'W': ch= 'W'; break;
case 'S': ch= 'S'; break;
case 'A': ch= 'A'; break;
case 'D': ch= 'D'; break;
}
}
/*
调用随机函数来得到食物放置的x,y的坐标
*/
void move::GetFood()
{
srand((unsigned int) time(NULL)); 
for(;;)
{
    foodx= rand()%20+1; 
    foody= rand()%20+1;
    if(W.qian[foodx][foody]!='\3')
{
if(foodx%4==0)
W.qian[foodx][foody]= '\2';
else if(foodx%4==1)
W.qian[foodx][foody]= '\5';
else if(foodx%4==2)
W.qian[foodx][foody]= '\6';
else
W.qian[foodx][foody]= '\4';
break;
}
}
}
//***********************************************************************************************
void display()
{
   cout<<"  ***************************************************************\n";
cout<<"  *\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3*\n";
cout<<"  *\1                                                           \1*\n";
cout<<"  *\3                                                           \3*\n";
cout<<"  *\1    游戏说明:                                              \1*\n";
cout<<"  *\3                                                           \3*\n";
cout<<"  *\1    1.通过 w,a,s,d  键来控制方向                           \1*\n";
cout<<"  *\3    2.通过z 键来站停几秒                                   \3*\n";
cout<<"  *\1    3.b键退出游戏                                          \1*\n";
cout<<"  *\3    4.c键 从新开始                                         \3*\n";
cout<<"  *\1                                                           \1*\n";
cout<<"  *\3                                                           \3*\n";
cout<<"  *\1                                                           \1*\n";
cout<<"  *\3                                                           \3*\n";
cout<<"  *\1                                                           \1*\n";
cout<<"  *\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3*\n";
cout<<"  ***************************************************************\n";
}
char panduan(char c)
{
system("cls");
while(c!='w'&&c!='a'&&c!='s'&&c!='d'&&c!='z'&&c!='b'&&c!='c')
{
cout<<" 你的输入有误,请从新输入:\n";
c=getch();
}
if(c=='z')
Sleep(5000);
return c;
}
//**************************************************************************
/*
主函数对贪吃蛇的控制
*/
int main()
{
system("color 3E");
int t=6,k=8;
char ch;
display();
Sleep(3000);
system("cls");
Meinu:cout<<" 三秒后进入";
Sleep(1000);cout<<"\a"<<"¤";
Sleep(1000);cout<<"\a"<<"★";
Sleep(1000);cout<<"\a"<<"☆"< move T;
W.set();
head->add_dian(t,k);
head->add_dian(t+1,k);
head->add_dian(t+2,k);
t++;k++;
T.GetFood();
W.display();
while (1)
{

ch=getch();
ch=tolower(ch);
ch=panduan(ch);
if(ch=='b')
{
cout<<" \n   **游戏结束,欢迎再次使用\n!";
break;
}
if(ch=='c')
goto Meinu;
T.ChangePoint(ch);
while(!kbhit())//kbhit()但键盘没有输入的时候返回0;否则返回1
{
system("cls"); 
T.move_dong();
W.display();
Sleep(r*200);
}
}
return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部