我已经一个学期没编程了,这日心血来潮,编了一个贪吃蛇,我的代码质量不高,不过应有的还是有的,
下面我把代码贴出来给大家瞧瞧哦。
#include<iostream>
#include <conio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
struct snake
{
int x;
int y;
};
void showboard(char a[30][30]); //展示棋盘动态信息
void putboard(char a[30][30]);// 生成棋盘
int getdir(int d) ; // 获取方向
int ifdead(snake queue[100],int *length); // 判断蛇是否死了
snake move(int d,snake s,int *f,int *mm,int *nn,int *length); // 使蛇头移动
void creatfood(char a[30][30],int *f,int *mm,int *nn);//产生食物
using namespace std;
int main()
{
char a[30][30];
snake s[100];int x,y;int over=1;
int d=2;int f=0;int mm=10;int nn=10,length=4;
s[0].x=5;s[0].y=4;
s[1].x=6;s[1].y=4;
s[2].x=7;s[2].y=4;
s[3].x=8;s[3].y=4;
while(true)
{
x=s[0].x;y=s[0].y;
putboard(a);
creatfood(a,&f,&mm,&nn);
d=getdir(d);
s[0]=move(d,s[0],&f,&mm,&nn,&length);
for(int z=length-1;z>1;z--)
{
s[z].x=s[z-1].x;s[z].y=s[z-1].y;
}
s[1].x=x;s[1].y=y;
for(int k=0;k<length;k++)
{
a[s[k].x][s[k].y]='#';
}
for(int i=0;i<15;i++)
{
for(int k=0;k<25;k++)
{
cout<<a[i][k];
}
cout<<endl;
}
over=ifdead(s,&length);
if(over==0)
{
cout<<"GAME OVER";
break;
}
Sleep(500);
system("cls");
}
return 0;
}
void putboard(char a[30][30])
{
for(int i=0;i<30;i++)
{
for(int k=0;k<30;k++)
{
a[i][k]=' ';
}
}
for(int i=0;i<15;i++)a[i][0]='*';
for(int i=0;i<15;i++)a[i][24]='*';
for(int k=0;k<25;k++)a[0][k]='*';
for(int k=0;k<25;k++)a[14][k]='*';//产生墙壁
}
void creatfood(char a[30][30],int *f,int *mm,int *nn)//f用来标记是否该食物是否被吃了
{
int x=*mm;int y=*nn;
if(*f==0)
{
srand((unsigned)time(NULL));
x=rand()%13+1;
y=rand()%23+1;//产生食物
}
a[x][y]='$';
*f=1;
*mm=x;*nn=y;
}
int getdir(int d)
{
char c;int dir=d;
if(_kbhit()) //kbhit判断是否有键盘输入
{
c=getchar();
if(c=='s'&&d!=2){dir=1;}
else if(c=='w'&&d!=1){dir=2;}
else if(c=='d'&&d!=4){dir=3;}//经典W A S D 操作
else if(c=='a'&&d!=3){dir=4;}
}
return dir;
}
snake move(int d,snake s,int *f,int *mm,int *nn,int *length)
{
switch(d)
{
case 1:
s.x++;
break;
case 2:
s.x--;
break;
case 3:
s.y++;
break;
case 4:
s.y--;
break;
}
if(s.x==*mm&&s.y==*nn)
{
*f=0;
*length=*length+1;
}
return s;
}
int ifdead(snake queue[100],int *length)
{
if(queue[0].x==0||queue[0].x==14||queue[0].y==0||queue[0].y==24){return 0;}
for(int k=1;k<*length;k++)
{
if(queue[0].x==queue[k].x&&queue[0].y==queue[k].y){return 0;}
}
return 1;
}
自己吃到自己了