贪吃蛇源代码
五年级 散文 3731字 125人浏览 感四海恩情

#include<windows.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

#include<cstring>

#include<cstdio>

#include<iostream>

#define N 22

using namespace std;

int gameover;

int x1,y1;

int x,y;

long start;

class snake_position

{

public:

int x,y;

snake_position(){};

void initialize(int &);

};

snake_position position[(N-2)*(N-2)+1];

void snake_position::initialize(int &j)

{

x=1;

y=j;

}

class snake_map

{

char s[N][N];

int grade,length;

int gamespeed;

char direction;

int head,tail;

int score;

bool gameauto;

public:

snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s)//这里可能有问题 {}

void initialize();

void show_game();

int updata_game();

void setpoint();

void getgrade();

void display();

};

void snake_map::initialize()

{

int i,j;

for(i=1;i<=3;i++)

s[1][i]='*';

s[1][4]='#';

for(i=1;i<=N-2;i++)

for(j=1;j<=N-2;j++)

s[i][j]=' ';

for(i=0;i<=N-1;i++)

s[0][i]=s[N-1][i]='-';

for(i=1;i<N-2;i++)

s[i][0]=s[i][N-1]='|';

}

void snake_map::show_game()

{

system("cls");

int i,j;

cout<<endl;

for(i=0;i<N;i++)

{

cout<<'\t';

for(j=0;j<N;j++)

cout<<s[i][j]<<' ';

if(i==2) cout<<"\t等级:"<<grade;

if(i==6) cout<<"\t速度:"<<gamespeed;

if(i==10) cout<<"\t得分:"<<score<<"分";

if(i==14) cout<<"\t暂停:按一下空格键";

if(i==18) cout<<"\t继续:按两下空格键";

cout<<endl;

}

}

void snake_map::getgrade()

{

cin>>grade;

while(grade>7||grade<1)

{

cout<<"请输入数字1—7选择等级,输入其他数字无效"<<endl; cin>>grade;

}

switch(grade)

{

case 1:gamespeed=1000;gameauto=0;break;

case 2:gamespeed=800;gameauto=0;break;

case 3:gamespeed=600;gameauto=0;break;

case 4:gamespeed=400;gameauto=0;break;

case 5:gamespeed=200;gameauto=0;break;

case 6:gamespeed=100;gameauto=0;break;

case 7:grade=1;gamespeed=1000;gameauto=1;break;

}

}

void snake_map::display()

{

cout<<"\n\t\t\t\t等级:"<<grade;

cout<<"\n\n\n\t\t\t\t速度:"<<gamespeed;

cout<<"\n\n\n\t\t\t\t得分:"<<score<<"分"; }

void snake_map::setpoint()

{

srand(time(0));

do

{

x1=rand()%(N-2)+1;

y1=rand()%(N-2)+1;

}while(s[x1][y1]!=' ');

s[x1][y1]='*';

}

char key;

int snake_map::updata_game()

{

gameover=1;

key=direction;

start=clock();

while((gameover=(clock()-start<=gamespeed))&&!kbhit()); if(gameover)

{

getch();

key=getch();

}

if(key==' ')

{

while(getch()!=' '){};

}

else direction=key;

switch(direction)

{

case 72:x=position[head].x-1;y=position[head].y;break;

case 80:x=position[head].x+1;y=position[head].y;break; case 75:x=position[head].x;y=position[head].y-1;break;

case 77:x=position[head].x;y=position[head].y+1;break;

}

if(!(direction==72||direction==80||direction==75||direction==77)) gameover=0;

else if(x==0||x==N-1||y==0||y==N-1)

gameover=0;

else if(s[x][y]!=' '&&!(x==x1&&y==y1))

gameover=0;

else if(x==x1&&y==y1)

{

length++;

if(length>=8&&gameauto)

{

length-=8;

grade++;

if(gamespeed>=200)

gamespeed-=200;

else gamespeed=100;

}

s[x][y]='#';

s[position[head].x][position[head].y]='*';

head=(head+1)%((N-2)*(N-2));

position[head].x=x;

position[head].y=y;

show_game();

gameover=1;

score+=grade*20;

setpoint();

}

else

{

s[position[tail].x][position[tail].y]=' ';

tail=(tail+1)%((N-2)*N-2);

s[position[head].x][position[head].y]='*';

head=(head+1)%((N-2)*(N-2));

position[head].x=x;

position[head].y=y;

s[position[head].x][position[head].y]='#';

gameover=1;

}

return gameover;

}

int main()

{

char ctn='y';

int nodead;

cout<<"\n\n\n\n\n\t\t\t我是小黑"<<endl;

cout<<"\n\n\n\t\t\t按任意键马上开始。。。"<<endl;

getch();

while(ctn=='y')

{

system("cls");

snake_map snake;

snake.initialize();

cout<<"\n\n请输入数字选择游戏等级:"<<endl;

cout<<"\n\n\n\t\t\t1.等级一:速度 1000 \n\n\t\t\t2.等级二:速度800 \n\n\t\t\t3.等级三:速度600";

cout<<"\n\n\t\t\t4.等级四:速度 400 \n\n\t\t\t5.等级五:速度 200 \n\n\t\t\t6.等级六: 速度 100 \n\n\t\t\t7.自动升级模式"<<endl;

snake.getgrade();

for(int i=1;i<=4;i++)

{

position[i].initialize(i);

}

snake.setpoint();

do

{

snake.show_game();

nodead=snake.updata_game();

}while(nodead);

system("cls");

cout<<"\n\n\n\t\t\t\tGameover!\n\n"<<endl;

snake.display();

cout<<"\n\n\n\t\t 是否选择继续游戏? 输入继续yes,n 退出"<<endl; cin>>ctn;

}

return 0;

}