GreedySnake项目分析
1.项目性分析
可行性分析
技术可行性
一、界面选择:终端/easyX
界面优缺点:
终端 | easyX | |
---|---|---|
鼠标监听 | × | √ |
键盘监听 | √ | √ |
文本输入 | √ | ×(不支持在图形界面输入,但是可以在终端和messagebox输入) |
二、有哪些核心功能/拓展功能
1.核心功能:移动,转弯,食物随机出现,地图
2.拓展功能:boss,排行榜(积分),道具(加速,积分翻倍)
三、怎么用代码实现核心功能
1.数据怎么表示
长度
地图(墙,食物,空地)
蛇身位置
方向
2.功能逻辑是怎样的
经济可行性
是否需要购买服务器,请技术人员
社会因素可行性
立项
项目开发计划
人员
学习进度:
时间安排:
紧急联系:
计划
计划安排:项目流程,那天做什么事
实际进度:当天项目进度,填写项目日志
任务
完成情况:负责人-》未启动,执行中,已完成
监督官:进行时间监督
补充
每天会议
开发环境
进度要求
表面上看起来简单,实际开发难的注意点:计时,其他方向,速度差
判断本次项目能否用到其他技术:局部技术(easyx,文件流,mysql)全局技术(需要每个人都要掌握的结构体,集合,git,头文件等)
2.需求分析
需求文档
GreedySnake需求文档
功能流程图
产品原型图
3.概要设计
游戏玩法:
玩家通过键盘方向键控制蛇上下左右移动,吃到食物得分并增长,碰到墙或者自己的身体则死亡,游戏结束。
难度设计:
分为四个难度等级:简单,中等,困难,炼狱
游戏架构:
整个游戏其实就是一个无穷的循环,直到退出游戏时退出循环。
一级循环:开始动画,难度选择,游戏过程
二级循环:游戏过程模块
代码语言:javascript复制 | <- <- 再来一局
| |
开始游戏 -> 难度选择 -> 游戏过程 -> 退出
| -> |
| <- |
4.详细设计
1.游戏开始动画
实现目的:
开始动画由一条蛇和一行文字从左到右移动而成。
实现原理:
开始动画的实现主要依靠对点的操作来实现,将控制台界面看成一个原点在左上角的坐标系,一个点(x,y)表示坐标系中的一个格子。
详细分析:
(1)蛇:
达到移动效果流程:
- 第一部分为蛇从左边开始出现到整个身体完全出现
- 第二部分为蛇身整体从左移动到接触右边界的过程
- 第三部分为蛇从接触右边界到完全消失的过程
详细分析:
第一部分,这一部分的实现首先是建立一个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.上线 维护
上线信息
日期:
地点:
人员:
下载: