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<<"。。。不好意思啊。。。你输了!!!"<
}
if(W.qian[a][b]=='\3')
{
cout<<"\2 \2.....你太饿了吧。。咋吃自己啊。。哈哈哈!\2 \2"<
}
if(a==foodx && b==foody)
{
t++;
head->add_dian(a,b);
if(t%3==0)
{
cout<<" 表现不错啊。。恭喜你级啦!!!\1 \1 "<
u++;
r--;
cout<
}
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"<<"☆"<
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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
