C语言_综合项目——贪吃蛇

综合项目——贪吃蛇

1. 程序分析

通过控制蛇头方向吃食物,使得蛇变长,从而获得积分。通过上下左右键控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬到自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。
1.1 模块设计
在本游戏中,从键盘输入来获取移动方向和蛇的移动关系
贪吃蛇:
M(模型)
蛇模块:蛇的初始化、蛇的移动、蛇长度改变、蛇的死亡
随机数生成模块:获取随机数(与食物一起)
食物模块:食物的产生、食物的消失
V(视图)
界面处理模块:加载地图、预处理地图、渲染地图
C(控制器)
游戏控制模块:控制键盘输入、执行游戏流程
记录蛇的坐标位置信息等
在这里插入图片描述
1.2 模块描述
蛇的初始化(定义结构体 x、y坐标)
蛇的初始化实际就是二维数组的初始化,该二维数组存储两个值,里面包含该蛇身体的坐标信息,它出现的初始位置是横纵坐标的中间位置。
蛇的移动
蛇的移动是通过改变二维数组坐标位置来实现的,例如当蛇向前进一个单位,则将尾每一个身体位置的坐标改变,同时改变蛇头、蛇身以及蛇尾的方向。这样整体看来蛇就前进了一个单位。
蛇的增长
当蛇吃了正常食物后,蛇的长度会增加,增加蛇的长度就是在食物的位置增加一个二维数组并且将这个位置变为蛇头。
蛇的死亡
当蛇撞上障碍物、自身或者通关时,蛇会死亡,蛇死亡就是二维数组的销毁。
食物的产生
食物出现的位置产生都是随机的,这些因素由通过随机函数获取的随机数决定。食物的位置不能出现在障碍物和边界上。
控制键盘输入
通过获取键盘输入的W/w(上)、S/s(下)、A/a(左)、D/d(右)来改变蛇模块中移动方向,从而影响蛇的移动方向。

1.3 项目分析
游戏界面显示之后,会根据读取的移动方向来控制蛇的移动,蛇移动之后会吃食物,食物被吃掉之后又会随机生成,然后刷新界面,将界面显示出来。
刷新界面时会判断蛇的状态,如果蛇死亡,则游戏结束;如果蛇胜利晋级则进入下一关,重新加载地图,显示新的一关的游戏初始界面;如果蛇没有死亡也没有晋级过关,继续本关游戏,则按照读取的键盘输入控制蛇的移动。

2. 项目实现

2.1 项目创建
蛇的结构
用来存放蛇的长度和位置坐标
蛇移动函数
用来实现游戏的控制和判断
显示游戏界面函数
用来实现游戏的显示
主函数
用来实现游戏流程控制

2.2 项目设计
Snake.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include <windows.h> 
#include<conio.h>
#include"Snake.h"
/*
	1.定义蛇的结构体
	2.初始化蛇和食物
	3.开始游戏
		蛇和墙的碰撞
		蛇和自身碰撞
		蛇和食物碰撞
			重新随机食物
			蛇身体增长
			分数增长
		方向键控制
	4.游戏结束
*/
//获取食物随机数 
//习惯性把函数放在主函数上面,在Snake.h中声明了所以放哪都行
void InitFood()
{
   
	//srand((size_t)time(NULL));//这句话使用多次放到主函数中,不需要多次加入随机数种子
	food[0]=rand()%WIDE;
	food[0]=rand()%HIGH;	
}
//获取蛇随机数
void InitSnake()
{
   
	snake.size=2;
	snake.body[0].X=WIDE/2;
	snake.body[0].Y=HIGH/2;
	snake.body[1].X=WIDE/2-1;
	snake.body[1].Y=HIGH/2;
	
}
//显示蛇的位置 显示食物位置
void ShowUI()
{
   
	COORD coord;
	//更新蛇末尾空格
	coord.<
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值