贪吃蛇小游戏

新手上路可能比较嫩,写的代码不简洁也不太好看,敬请谅解。以后学习中有什么不会的都会做好笔记的。。这个还是一位学长做的 转载一下他的。
源代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
//函数声明区 
void welcome();//欢迎界面 
void Pos(int x,int y);	//光标位置设定 
void creatMap();	//打印地图
void initSnake();	//初始化蛇身 
void creatFood();//创建食物 
char reDirection();//用来识别方向 
int snakeMove();//蛇的移动
int crossWall();//不能穿墙 
int eatSelf();//不能吃自己 
void cf();//函数初始化 
int start();//主函数的开始 
void pause();//游戏中途暂停
int color(int c);    //更改文字颜色
void headtoright();//链表的逆置 

typedef struct Snake	//相当于蛇的一个节点 
{
   
	int x;//横坐标 
	int y;	//纵坐标
	struct Snake *next; //指针域next(下一个结点的指针),数据域x,y 
}snake; 

int firsttime=0;//初始化定义 
snake *head;//头指针 
snake *p;   //用来遍历 
snake *food1; //用来标记的 
char status='H';//初始方向的状态 
int score=0;	//分数 
int add=10;    //一个食物的分 
int leap=0;//用来标记是否结束 ,0是没有,1代表蛇死了代表结束了  
int endleap=0;//结束标志  1就是结束 
int sleepTime=500;
char m='y'; //初始化声明一个值,让其进入循环 

void headtoright()
{
   
	snake*p,*q,*r;
	p=head;
	q=r=NULL;
	while(p)
	{
   
		q=p->next;
		p->next=r;
		r=p;
		p=q;
	}
	head=r;
}
void initSnake()//蛇身初始化,给定一个长度 ,用结构体表示是蛇的骨架,真正要显示出来的是打印■
{
   
	endleap=0;
	leap=0;
	int i;
	snake *tail;//尾指针 
	tail=(snake*)malloc(sizeof(snake));	//第一个节点(头结点) 
	tail->x=30;	//2的倍数,因为方块的长是两个单位 
	tail->y=10; //1个单位
	tail->next=NULL; 
	for(i=1;i<=4;i++)	//实现尾插法 
	{
   
		head=(snake*)malloc(sizeof(snake));//申请一个节点 
		head->next=tail;//连接成链 
		
		head->x=30-2*i;//下一个节点的位置
		head->y=10; 
		
		tail=head;	 
	} 
	// 遍历打印出来  打印5个节点 
	while(tail!=NULL)
	{
   
		Pos(tail->x,tail->y);
		printf("■");
		tail=tail->next; 
	}
}

void pause()
{
   
	while(1)
	{
   
 	Sleep(300);
 		if(GetAsyncKeyState(VK_SPACE))
		{
   
 			break;
		}
		reDirection();
	} 
}
char reDirection()//识别用户按下的键值 保留方向值 
{
   
	if(GetAsyncKeyState(VK_F8))
	{
   
		if(sleepTime>300)//最多减到300 
		{
   
			sleepTime-=50;//每次减50 
			add++;//每次食物加一分 
		} 
	
	} 
	
		if(GetAsyncKeyState(VK_F9))
	{
   
		
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值