- modify
void GameScreen::generateFruit()
inGameScreen.cpp
// GameScreen.cpp
- static std::default_random_engine engine;
- engine.seed(time(NULL));
+ static std::default_random_engine engine(time(NULL));
修复了水果生成为同一行的bug
- modify
Snake::Snake()
inSnake.cpp
// Snake.cpp
- pickupBuffer_.loadFromFile("Sounds/pickup.aiff");
+ pickupBuffer_.loadFromFile("Sounds/pickup.wav");
修复了拾取水果后无音效的bug 需要将"Sounds/pickup.aiff"转码为"Sounds/pickup.wav"
// InputSoundFile.hpp
The supported audio formats are: WAV (PCM only), OGG/Vorbis, FLAC. The supported sample sizes for FLAC and WAV are 8, 16, 24 and 32 bit.
- modify
Snake::Snake()
inSnake.cpp
// Snake.cpp
- Snake::Snake() : direction_(Direction::Up), hitSelf_(false)
+ Snake::Snake() : hitSelf_(false), direction_(Direction::Up)
修改了构造函数初始化表的顺序为Snake
类中声明的顺序
- modify
GameOverScreen::GameOverScreen(std::size_t score)
inGameOverScreen.cpp
// GameOverScreen.cpp
- text_.setColor(sf::Color::Red);
+ text_.setFillColor(sf::Color::Red);
- modify
MenuScreen::MenuScreen()
inMenuScreen.cpp
// MenuScreen.cpp
- snakeText_.setColor(sf::Color::Green);
+ snakeText_.setFillColor(sf::Color::Green);
将已弃用(deprecated)的setColor
方法更改为建议使用的setFillColor
方法
-
大幅修改
Snake
类的实现。(70%)- 节点
现在
Snake
类不依赖于SnakeNode
类,不使用vector
而使用deque
作为蛇路径的容器, 头结点(0号节点)作为蛇头节点,之后第$10k (k = 1, 2, ... , n)$ 个节点是蛇身体节点, 使用黄色,半径为$r$ 的圆作为节点的形状 第$5(2k+1) (k = 1, 2, ... , n)$ 个节点是蛇的关节节点,使用$r \times \sqrt{3}r$ 的矩形作为形状。 矩形法线方向为 后一节点->前一节点 的方向。 - 更新
每次更新时,
push_front
一个头结点+方向向量的节点 同时判断尾结点的重叠次数(overlap),若重叠次数为零,则pop_back
尾结点 每次只加入一个path节点,而将固定帧率提高到100fps,操作和视觉效果更加流畅、丝滑。 - 性能方面
相比于
vector
每次更新时要全部移动一位,deque
只需要改变头尾节点,处理更高效。 尤其在容器的size()
很大的时候,有非常显著的性能提升。
- 节点
现在
-
Game.cpp
的更改 -
字体改动 修改全局字体为 SourceHanSansSC-Bold.otf 思源黑体,支持中文显示
-
文件树优化 所有源文件归类到src文件夹,其他资源归类到assets文件夹,分好类。便于查看
-
makefile的优化 使用static编译,让最终的程序方便分发。
-
Fruit
的更改- 将
Fruit
类修改为struct,因为没有什么值得私有的成员变量 GameScreen
类中,fruit
的存储由vector
改为deque
,删除一个水果的效率提高了。- 新增5种水果颜色显示,用
score
存储每种水果的得分。 - 修改了随机生成水果的函数,现在可以按照要求生成五种水果了。(黑色加棕色 25%,红色、蓝色、绿色各25%)
- 将
-
网格的实现和拓展
- 在
Grid.h
和Grid.cpp
中声明并实现了网格类和网格的渲染 实现了按G键切换开启、关闭网格状态
- 在
-
新增游戏玩法
- 按空格键加速
- 鼠标点击控制方向,长按拖拽可以持续控制方向
新增手柄操作控制方向
-
UI优化,新增自己画的主题title
logo.png
,并且设计了UI交互逻辑
- 增加了
OptionScreen
, 现在可以在OptionScreen
里面切换颜色状态了optionScreen
使用OptionButton
进行设置- 鼠标移动到选项上会有下划线的显示
- 鼠标点击之后颜色改变,同时有全局网格和颜色反馈
- 小幅度优化了UI设计,新增返回UI和重置UI
- 设计了键盘锁和鼠标锁,防止误触
- 删除手柄控制和键盘控制窗口切换
- 全面统一UI设计,通过
Button
类操作并显示 - 增加
PauseScreen
类,在游戏中暂停可以进入暂停界面,可以进行设置、重新开始、退出、返回等操作 - 游戏中实时显示分数
- 新增帮助界面和关于界面,
HelpScreen
和AboutScreen
- 在首页,暂停页,结束页添加帮助按钮和关于按钮
- 将
OptionButton
类独立出来,方便复用 - 到这里就不做大的改动了,整体定型
- 将
TitleSprite
类独立出来,便于代码复用 - 统一了变量命名规范,增加了一些注释
- 同时修复了都含有
TitleSprite
的界面切换时角度不统一的问题。修改之后,TitleSprite
作为全局元素渲染和更新 - 将水果颜色的定义移动到
Game.cpp
- 新增首次游戏前先跳转到帮助界面的功能
- 修改了 bgm
- 继续写设计说明文档和
README.txt