贪食蛇

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




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值