学校课程设计需要,写了个贪食蛇,主要参考了别人http://blog.csdn.net/hai8902882/article/details/6976490
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<time.h> const int H=8; const int L=16; const char Shead='@'; const char Sbody='@'; const char Sfood='*'; const char Snode=' '; void Initial(); void Create_food(); void Show(); void Button(); void Move(); void Check_Border(); void Check_Head(int x,int y); void Score(); void decoration1(); void decoration2(); char GameMap[H][L]; int key,flag=0,time1,cas,score; int sum=1,over=0; int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; struct Snake{ int x,y; int now; }Snake[H*L]; int main() { Initial(); Show(); return 0; } void Initial() { int i,j; int hx,hy; system("title 贪食蛇"); memset(GameMap, Snode, sizeof(GameMap)); system("cls"); srand(time(0)); hx=rand()%H; hy=rand()%L; GameMap[hx][hy]=Shead; Snake[0].x=hx; Snake[0].y=hy; Create_food(); decoration1(); scanf("%d",&cas); switch(cas) { case 1:time1=500;break; case 2:time1=300;break; case 3:time1=100;break; default:time1=300;break; } getch(); system("cls"); decoration2(); getch(); Button(); } void Create_food() { int fx,fy; while(1) { fx=rand()%H; fy=rand()%L; if(GameMap[fx][fy]==Snode) { GameMap[fx][fy]=Sfood; break; } } } void Show() { int i,j; while(1) { _sleep(time1); Button(); Move(); if(over) { printf("\n\t**游戏结束**\n"); printf("\t你的成绩为:"); Score(); printf(" \t >_< \n"); getchar(); getchar(); break; } system("cls"); decoration2(); printf("\n\t当前蛇节数为:%6d\n",sum); printf("\t当前分数为:"); Score(); } } void Button() { if(kbhit()!=0) { while(kbhit()!=0) key=getch(); if((key==75&&flag!=2)||(key==77&&flag!=1)||(key==72&&flag!=4)||(key==80&&flag!=3)||sum==1) switch(key) { case 75:Snake[0].now=0; flag=1;//左 break; case 77:Snake[0].now=1; flag=2;//右 break; case 72:Snake[0].now=2; flag=3;//上 break; case 80:Snake[0].now=3;flag=4;//下 break; } } } void Move() { int i,x,y; int t=sum; x=Snake[0].x; y=Snake[0].y; GameMap[x][y]=Snode; Snake[0].x=Snake[0].x+dx[Snake[0].now]; Snake[0].y=Snake[0].y+dy[Snake[0].now]; Check_Border(); Check_Head(x,y); if(sum==t) { for(i=1;i<sum;i++) { if(i==1) GameMap[Snake[i].x][Snake[i].y]=Snode; if(i==sum-1) { Snake[i].x=x; Snake[i].y=y; Snake[i].now=Snake[i+1].now; } else { Snake[i].x=Snake[i+1].x; Snake[i].y=Snake[i+1].y; Snake[i].now=Snake[i+1].now; } GameMap[Snake[i].x][Snake[i].y]=Sbody; } } } void Check_Border() { if(Snake[0].x<0||Snake[0].x>=H||Snake[0].y<0||Snake[0].y>=L) { over=1; } } void Check_Head(int x,int y) { if(GameMap[Snake[0].x][Snake[0].y]==Snode) GameMap[Snake[0].x][Snake[0].y]=Shead; else { if(GameMap[Snake[0].x][Snake[0].y]==Sfood) { GameMap[Snake[0].x][Snake[0].y]=Shead; Snake[sum].x=x; Snake[sum].y=y; Snake[sum].now=Snake[0].now; GameMap[Snake[sum].x][Snake[sum].y]=Sbody; sum++; Create_food(); } else { over=1; } } } void Score() { switch(cas) { case 1:score=(sum-1)*2;break; case 2:score=(sum-1)*4;break; case 3:score=(sum-1)*8;break; default:score=(sum-1)*5;break; } printf("%d\n",score); } void decoration1() { printf("\n\n\n\n\n\n\t按任意键开始\n"); getch(); system("cls"); printf("\n\n\n\n\n\t认真阅读游戏规则\n"); printf("\t1.按←↑→↓控制贪食蛇方向移动\n"); printf("\t2.贪食蛇若撞墙或者自食则结束游戏\n"); printf("\t***祝游戏愉快***\n"); getch(); system("cls"); printf("\n\n\t难度1 每吃一个食物就可加2分 \n\t难度2 每吃一个食物就可加4分\n\t难度3 每吃一个食物就可加8分\n\t若不为上面难度系数则每吃一食物就可加5分\n"); printf("\n\t选择难度\n\t1.简单\n\t2.普通\n\t3.困难:\n\t你所选择的是:"); } void decoration2() { int i,j; for(i=1;i<=H/3;i++) printf("\n"); printf("\n\t"); for(i=0;i<=L/2+1;i++) { printf(i==L/2+1?"■\n":"■"); } for(i=0;i<H;i++) { printf("\t"); printf("■"); for(j=0;j<L;j++) { printf("%c",GameMap[i][j]); } printf("■\n"); } printf("\t"); for(i=0;i<=L/2+1;i++) { printf(i==L/2+1?"■\n":"■"); } }
贪食蛇
最新推荐文章于 2018-09-05 09:59:00 发布