贪吃蛇 -【C语言小游戏】

非基于打印数组的C语言版贪吃蛇

 

部分代码

坐标结构体

struct coordinate
{
	int x;
	int y;
};

贪吃蛇结构体

struct snake
{
	coordinate poshe;
	coordinate posta;
	coordinate posbody[maxlen];
	int direction;
	int length;
} eatsnake;

移动一步

void moveOneSept()
{
	oper_count++;
	if(Is_eatfood()==0)
	{
		display(eatsnake.posbody[eatsnake.length-1],snackpump);
	}
	for(int i=eatsnake.length-1; i>0; i--)
	{
		eatsnake.posbody[i].x=eatsnake.posbody[i-1].x;
		eatsnake.posbody[i].y=eatsnake.posbody[i-1].y;
	}
	if(eatsnake.direction==Up)
	{
		eatsnake.posbody[0].y--;
	}
	else if(eatsnake.direction==Down)
	{
		eatsnake.posbody[0].y++;
	}
	else if(eatsnake.direction==Left)
	{
		eatsnake.posbody[0].x-=2;
	}
	else if(eatsnake.direction==Right)
	{
		eatsnake.posbody[0].x+=2;
	}
	display(eatsnake.posbody[0],snackbody);
}

吃到食物

int Is_eatfood()
{
	if( eatsnake.posbody[0].x==pnew.x&&eatsnake.posbody[0].y==pnew.y)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
void eatfood()
{
	if(Is_eatfood())
	{
		color();
		coordinate adgr;
		if(eatsnake.posbody[eatsnake.length-1].x-eatsnake.posbody[eatsnake.length-2].x>0)
		{
			adgr.x=eatsnake.posbody[eatsnake.length-1].x-2;
			adgr.y=eatsnake.posbody[eatsnake.length-1].y;
		}
		else if(eatsnake.posbody[eatsnake.length-1].x-eatsnake.posbody[eatsnake.length-2].x<0)
		{
			adgr.x=eatsnake.posbody[eatsnake.length-1].x+2;
			adgr.y=eatsnake.posbody[eatsnake.length-1].y;
		}
		else if(eatsnake.posbody[eatsnake.length-1].y-eatsnake.posbody[eatsnake.length-2].y>0)
		{
			adgr.x=eatsnake.posbody[eatsnake.length-1].x;
			adgr.y=eatsnake.posbody[eatsnake.length-1].y-1;
		}
		else if(eatsnake.posbody[eatsnake.length-1].y-eatsnake.posbody[eatsnake.length-2].y<0)
		{
			adgr.x=eatsnake.posbody[eatsnake.length-1].x;
			adgr.y=eatsnake.posbody[eatsnake.length-1].y+1;
		}
		display(adgr,snackbody);
		eatsnake.length++;
		eatsnake.posbody[eatsnake.length-1].x=adgr.x;
		eatsnake.posbody[eatsnake.length-1].y=adgr.y;
		crenewfood();
	}
}

判断游戏结束

int GameOver()
{
	int flag=0;
	for(int i=1; i<eatsnake.length; i++)
	{
		if(eatsnake.posbody[i].x==eatsnake.posbody[0].x
  		 &&eatsnake.posbody[i].y==eatsnake.posbody[0].y)
		{
			flag=1;
			SetPos(5,5);
			return 1;
		}
	}
	if(		  eatsnake.posbody[0].x<0
	          ||eatsnake.posbody[0].y<0
	          ||eatsnake.posbody[0].x>len
	          ||eatsnake.posbody[0].y>wid
	  )
	{
		SetPos(5,5);
		return 2;
	}
	return 0;
}

食物

void ToMap()
{
	for(int k=0; k<eatsnake.length; k++)
	{
		int p1=eatsnake.posbody[k].x,p2=eatsnake.posbody[k].y;
		datamap[p1][p2]=1;
	}
}
void crenewfood()
{
	coordinate p[len*wid];
	ToMap();
	int count=0;
	for(int i=0; i<len; i+=2)
	{
		for(int j=0; j<wid; j++)
		{
			if(datamap[i][j]==0)
			{
				p[count].x=i;
				p[count].y=j;
				count++;
			}
		}
	}
	if(count>0)
	{
		srand((unsigned)time(NULL));
		int index=rand()%count;
		display(p[index],newfood);
		datamap[p[index].x][p[index].y]=2;
		pnew.x=p[index].x;
		pnew.y=p[index].y;
	}
}

完整代码:https://download.youkuaiyun.com/download/weixin_44882124/85170740icon-default.png?t=M3C8https://download.youkuaiyun.com/download/weixin_44882124/85170740

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值