学校课程设计需要,写了个贪食蛇,主要参考了别人http://blog.youkuaiyun.com/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":"■");
}
}