贪吃蛇游戏(C语言)

涉及知识点:结构体,枚举,函数等等

环境VS+Easyx(插件)


分析:

1.数据处理:

蛇: 位置 长度 方向

食物:位置 标志(食物的存在与否)

2.窗口坐标体系


具体代码如下:定义食物与定义蛇 方法类似,下面略写。

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
//位置结构体
typedef struct MyStruct
{
	int x;
	int y;
}POS; 
//定义蛇属性
struct  s
{
	POS position[100];   //蛇是一节一节的 
	int length;    //长度 
	int dirction;  //方向 
}snake;
//定义食物的属性
struct foods
{
	POS position; //位置 
	int flag;    //食物是否存在 
}food; 

//枚举方向 
enum MyEnum
{
	UP,DOWN, LEFT,RIGHT
};
//初始化
void initSnake()
{
	snake.length=3;     //初始长度为3 
	snake.dirction=RIGHT;
	
	snake.position[0].x=20;
	snake.position[0].y=0;
	
	snake.position[1].x=10;
	snake.position[1].y=0;
	
	snake.position[2].x=0;
	snake.position[2].y=0;	
}
//画出来
void drawSnake()
{
	cleardevice(); //刷新 
	for(int i=0;i<snake.length;i++)
	{
		setfillcolor(RED);
		fillrectangle(snake.position[i].x,snake.position[i].y,snake.position[i].x+10,snake.position[i].y+10);
	}
}
//动起来
void runGame()
{
	//蛇身体移动,坐标转换,后面跟着前面 
	//一定先从后往前移动,防止覆盖
	for(int i=snake.length-1;i>0;i--)
	{
		snake.position[i].x=snake.position[i-1].x;
		snake.position[i].y=snake.position[i-1].y;
	} 
	//蛇头移动
	switch(snake.dirction)
	{
	case UP:
	    snake.position[0].y-=10;
		break;
	case DOWN:
	    snake.position[0].y+=10;
		break;
	case LEFT:
	    snake.position[0].x-=10;
		break;
	case RIGHT:
	    snake.position[0].x+=10;
		break;
	default:
		break;
	} 
} 
void useKey()
{
	//通用套路,关于方向的处理 
	if(_kbhit())    //检测按键按下 
	{
		char ch=_getch();
		switch(ch)
		{
			case 'W':
			case 'w':
			case 72:
				//防止掉头 
				if(snake.dirction!=DOWN)
				{
					snake.dirction=UP;
				}
				break;
			case 'S':
			case 's':
			case 80:
				if(snake.dirction!=UP)
				{
					snake.dirction=DOWN;
				}
				break;
			case 'A':
			case 'a':
			case 75:
				if(snake.dirction!=TIGHT)
				{
					snake.dirction=LEAT;
				}
				break;
			case 'D':
			case 'd':
			case 77:
				if(snake.dirction!=LEFT)
				{
					snake.dirction=RIGHT;7
				}
				break;	
			default:
				break;
		} 
	}
}
 
void starGame()
{
	initgraph(600,600);   //创建窗口 
	setbkcolor(RGB(210,255,200));       //设置背景颜色 
	cleardevice();          //刷新 
}
//画食物
void initFood()
{
	/* 
	    srand*(unsigned int)time(NULL);     //播撒随机数的种子 
	    rand()%100;  //生成0-99的随机数 
	*/
} 
void drawFood()
{
	//类似画蛇,即为画小方块 
}
int main()
{
	starGame();
	initSnake();
	
	while(1)
	{
		drawSnake();
		runGame();
		useKey();
		Sleep(100);   //放慢速度,等待100毫秒 
	}
	
	closegraph();  //关闭窗口 
	
	return 0; 
} 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

♪Yiiiiiiiiiiiiii

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

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

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

打赏作者

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

抵扣说明:

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

余额充值