c语言写了一个贪吃蛇


  1. 很简单的  可能存在一些bug  大牛不要嘲笑
#include "stdafx.h"
#include <conio.h>
#include "head.h"
#include <Windows.h>
#include <time.h>
int x=-1,y=-1,m=0;//m为蛇的长度   n为食物个数 
int nx=-1,ny=-1,n=0;
int chengji=0;
void 游戏开始();
void 显示();
void 画蛇();
void 蛇头运动();
void 蛇身运动();
void 初始蛇的随机位置();
void 改变蛇的方向();
void 是否死亡();
void 画食物();
void 蛇吃食物();
void 蛇变长();
void 成绩();
void 打印墙体();
int _tmain(int argc, _TCHAR* argv[])
{

	游戏开始();
	初始蛇的随机位置();
	while (1)
	{
		system("cls");
		画蛇();
		画食物();
		显示();
		蛇身运动();
		改变蛇的方向();
		蛇头运动();
		改变蛇的方向();
		蛇吃食物();
		成绩();
		是否死亡();
		Sleep(200);
	}


	return 0;
}
void 成绩()
{
	printf("总分为:%d   长度为:%d\n",chengji,m);
}
void 蛇变长()
{
	if(she[m-1][2]==1)
	{
		she[m][0]=she[m-1][0];
		she[m][1]=she[m-1][1]-1;
		she[m][2]=she[m-1][2];

	}
	else if(she[m-1][2]==2)
	{
		she[m][0]=she[m-1][0];
		she[m][1]=she[m-1][1]+1;
		she[m][2]=she[m-1][2];
	}
	else if(she[m-1][2]==3)
	{
		she[m][0]=she[m-1][0]-1;
		she[m][1]=she[m-1][1];
		she[m][2]=she[m-1][2];
	}
	else if(she[m-1][2]==4)
	{
		she[m][0]=she[m-1][0]+1;
		she[m][1]=she[m-1][1];
		she[m][2]=she[m-1][2];
	}
}
void 蛇吃食物()
{
	if(qipan[ny][nx]==2)
	{
		n=0;
		蛇变长();
		chengji+=10;
		m++;

	}
}
void 画食物()
{
	if(n==0)
	{
		do
		{
			nx=rand()%21+1;
			ny=rand()%21+1;
		}
		while(qipan[ny][nx]==2);
		qipan[ny][nx]=3;
		n++;
	}
}
void 是否死亡()
{
	int sum=0;
	for(int i=0;i<23;i++)
	{
		for(int j=0;j<23;j++)
		{
			if (qipan[i][j]==1)
			{
				sum++;
			}
		}
}
	if (sum!=88)
	{
		printf("游戏结束\n");
		system("pause");
		exit(0);

	}

}
void 游戏开始()
{
	printf("\t\t\t        《贪吃蛇》\n");
	printf("\t\t\t     按任意键开始游戏\n");
	getch();
}

void 显示()
{
	for(int i=0;i<23;i++)
	{
		for(int j=0;j<23;j++)
		{
			if (qipan[i][j]==1)
			{
				printf("■");//墙
			}
			else if(qipan[i][j]==0)
			{
				printf("  ");//空
			}
			else if(qipan[i][j]==2)
			{

				printf("■");//蛇
			}
			else if(qipan[i][j]==3)
			{

				printf("* ");
			}
		}
		printf("\n");
	}
}

void 初始蛇的随机位置()
{
	srand(time(0));
	x=rand()%16+3;
	y=rand()%21+1;

	//生成初始蛇
	she[0][0]=x;
	she[0][1]=y;
	she[0][2]=3;
	she[1][0]=x+1;
	she[1][1]=y;
	she[1][2]=3;
	she[2][0]=x+2;
	she[2][1]=y;
	she[2][2]=3;
	m=3;

}
void 画蛇()
{
	for (int i=0;i<70;i++)
	{
		if(she[i][0]!=0)
		{
			qipan[she[i][1]][she[i][0]]=2;
		}
	}
}
void 蛇头运动()
{
	if (she[0][2]==1)
	{//上
		she[0][1]=she[0][1]-1;
	}
	else if (she[0][2]==2)
	{//下
		she[0][1]=she[0][1]+1;
	}
	else if (she[0][2]==3)
	{//左
		she[0][0]=she[0][0]-1;
	} 
	else if (she[0][2]==4)
	{//右
		she[0][0]=she[0][0]+1;
	}

}
void 蛇身运动()
{
	for(int i=69;i>=1;i--)
	{
		if(she[i][0]!=0)
		{
			if(m==i+1)
			{
				qipan[(she[i][1])][(she[i][0])]=0;
			}
			she[i][0]=she[i-1][0];
			she[i][1]=she[i-1][1];
			she[i][2]=she[i-1][2];

		}
	}
}

void 改变蛇的方向()
{
	if(kbhit() != 0)
	{
		int key;
		while(kbhit() != 0)
		key = getch(); 
		if(key==72)//上
		{
			if(she[0][2]!=2)
			{
				she[0][2]=1;
			}

		}
		if(key==80)//下

			if(she[0][2]!=1)
			{
				she[0][2]=2;
			}
		if(key==75)//左 
			if(she[0][2]!=4)
			{
				she[0][2]=3;
			}
		if(key==77)//右
			if(she[0][2]!=3)
			{
				she[0][2]=4;
			}
	}
}
0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值