C++项目贪吃蛇游戏笔记-项目分析

2023-03-21 11:18:01 浏览数 (2)

GreedySnake项目分析

1.项目性分析

可行性分析

技术可行性

一、界面选择:终端/easyX

界面优缺点:

终端

easyX

鼠标监听

×

键盘监听

文本输入

×(不支持在图形界面输入,但是可以在终端和messagebox输入)

二、有哪些核心功能/拓展功能

1.核心功能:移动,转弯,食物随机出现,地图

2.拓展功能:boss,排行榜(积分),道具(加速,积分翻倍)

三、怎么用代码实现核心功能

1.数据怎么表示

长度

地图(墙,食物,空地)

蛇身位置

方向

2.功能逻辑是怎样的

经济可行性

是否需要购买服务器,请技术人员

社会因素可行性

立项

项目开发计划

人员

学习进度:

时间安排:

紧急联系:

计划

计划安排:项目流程,那天做什么事

实际进度:当天项目进度,填写项目日志

任务

完成情况:负责人-》未启动,执行中,已完成

监督官:进行时间监督

补充

每天会议

开发环境

进度要求

表面上看起来简单,实际开发难的注意点:计时,其他方向,速度差

判断本次项目能否用到其他技术:局部技术(easyx,文件流,mysql)全局技术(需要每个人都要掌握的结构体,集合,git,头文件等)

2.需求分析

需求文档

GreedySnake需求文档

功能流程图

产品原型图

3.概要设计

游戏玩法:

玩家通过键盘方向键控制蛇上下左右移动,吃到食物得分并增长,碰到墙或者自己的身体则死亡,游戏结束。

难度设计:

分为四个难度等级:简单,中等,困难,炼狱

游戏架构:

整个游戏其实就是一个无穷的循环,直到退出游戏时退出循环。

一级循环:开始动画,难度选择,游戏过程

二级循环:游戏过程模块

代码语言:javascript复制
             | <- <- 再来一局
             |          |
开始游戏 -> 难度选择 -> 游戏过程 -> 退出
                      | -> |  
                      | <- |

4.详细设计

1.游戏开始动画

实现目的:

开始动画由一条蛇和一行文字从左到右移动而成。

实现原理:

开始动画的实现主要依靠对点的操作来实现,将控制台界面看成一个原点在左上角的坐标系,一个点(x,y)表示坐标系中的一个格子。

详细分析:

(1)蛇:

达到移动效果流程:

  1. 第一部分为蛇从左边开始出现到整个身体完全出现
  2. 第二部分为蛇身整体从左移动到接触右边界的过程
  3. 第三部分为蛇从接触右边界到完全消失的过程

详细分析:

第一部分,这一部分的实现首先是建立一个deque双端队列,用于存储点的对象,这些点就是组成蛇身的元素,然后再用一个for循环将容器中的点依次打印出来,每打印一个点停顿一会,这样就达到了移动的效果。

第二部分,这部分蛇的每次前进都是通过计算将要移动到的下一个点的坐标,然后将这个点打印出来,与此同时将蛇尾,亦即queue中的首端点去掉,并擦除屏幕上该点颜色。

第三部分就直接依次从蛇尾擦除即可。

(2)文字

文字snake的移动基本类似

实现与改动:

因为无需对首尾进行操作,而是要对所以点进行移动,因此容器选用vector

具体请参看:startinterface.h以及startinterface.cpp

2.选择难度

实现目的:

程序先将难度选择的文字信息打印在屏幕上,然后用户通过控制键盘方向键选择,回车键确认。

实现原理:

按下回车后通过改变蛇移动的速度实现改变难度。其中读取键盘输入是通过_getch()函数完成的。

程序优化:

为了突出选中项,需要给选中项打上背景色,然后每一次上下移动时,先将当前的背景色去掉,然后给下一个选中项打上背景色。

3.游戏过程

实现目的:

程序绘制出地图以及侧边栏,同时初始化蛇和食物,并监听用户键盘输入,做出相应变化。

实现原理:

程序首先它先绘制出地图以及侧边栏,同时初始化蛇和食物,

然后通过一个无穷循环监听键盘,以此来控制蛇移动,同时又进行各种判断,来判断是否死亡、吃到食物或暂停。

注意事项:

这里使用_kbhit()函数来监听键盘,它用来判断在一段固定的时间内是否有键盘输入,

这个函数的返回值有两个,第一个是是否有输入的返回值,第二个才是键盘输入的内容,

也就是说要经过两次的读取缓冲区才能读到真正的键盘输入。

5.编码

分类

个程序共有七个类,分别为Tools,Point,StartInterface,Snake,Map,Food

main.cpp

controller.h控制整个游戏过程的,包括游戏的各个阶段,比如更新分数,游戏难度选择等

controller.cpp

food.h实现食物的随机出现

food.cpp

map.h负责绘制地图(地图可以扩展,增添新内容)

map.cpp

point.h设置点的对象

point.cpp

snake.h控制蛇的移动和吃到食物等

snake.cpp

startinterface.h显示开始动画

startinterface.cpp

tools.h工具类主要是用于设置光标的位置以及输出文字的颜色

tools.cpp

类关系图

代码语言:javascript复制
tools//设置光标的位置以及输出文字的颜色
  |
point//设置点的对象
  |
startinitface,map,snake,food//游戏内容
  | 
controller//控制整个游戏过程的,包括游戏的各个阶段,比如更新分数,游戏难度选择等

完整代码

贪吃蛇游戏笔记-项目代码

6.测试 整合

游戏bug的检测

游戏的封装

7.上线 维护

上线信息

日期:

地点:

人员:

下载:

更新日志

0 人点赞