目录
控制台小游戏——吃豆豆 3
一、概述 3
主要内容: 3
已实现的目标: 3
二、主要类的设计 3
1)依次介绍各个类的设计: 3
2)综上所述,各个类之间的关系如下图所示: 8
三、程序的功能特点和运行操作方法 8
四、代码实现中值得一提的地方 13
1)任意位置输出及颜色控制 13
2)按键识别 14
3)游戏主循环代码的复用性增强 14
4)小怪移动策略 14
5)UI 设计的一点技巧 15
五、遇到的问题及解决方案 15
控制台小游戏——吃豆豆
一、概述
主要内容:
以 吃豆豆大作战 为基础参考,实现了运行在 Windows 控制台下的一个吃豆豆小游戏。玩家目标是吃掉所有豆豆,途中,若玩家撞到怪兽则游戏结束。游戏中存在超级豆子,吃到后,所有怪兽静止,且玩家进入无敌状态(可撞怪兽使之回到初始位置)。玩家可使用键盘方向键进行选择、控制移动,回车键确定,Esc 键返回,空格键暂停。
已实现的目标:
地图支持自定义编辑(可编辑地图中的:空地、墙、豆子、超级豆子、小怪初始位置及数量、吃豆人初始位置)
可选择游戏难度(即设定不同的小怪移动速度)
怪兽可追踪吃豆人位置,往吃豆人的所在位置靠近
可查看历史记录 TOP 10,并且可对游戏记录进行回放
在回放的过程中,支持按下方向键后,本文转载自http://www.biyezuopin.vip/onews.asp?id=15251退出回放模式,在当前情形下,操纵吃豆人, 进入正常的游戏模式,继续游戏
有用户友好的UI 界面(比如:吃到超级豆子后吃豆人变彩色闪烁,且下方显示进度条倒计时;选择界面高亮显示选项)
二、主要类的设计
1)依次介绍各个类的设计:
①Position 类
由于是在控制台下实现本游戏,所以显示界面的所有元素都是字符,而一些较为美观, 且符合游戏中的元素的特殊字符一般都是 2 个英文字符的宽度,所以这里界面设计的主要思想使将整个控制台运行窗口看成一个二维的画布,横坐标以每两个英文字符的宽度为单 位,纵坐标则以每行为单位。
而有了画布之后,画布上的每一个点其实可以看作一个数据结构,这就是 Position 类
的意义。
数据成员及成员函数:
#include"Game.h"
const int WINDOWS_SIZE_X = (MAP_SIZE + SIDE_INFO_UI_SIEZ) * 2 - 1;
const int WINDOWS_SIZE_Y = MAP_SIZE + INFO_UI_SIZE;
int main() {
//进入游戏
Game gameCtrl;
int choice = 0;
while (true) {
//主界面的选项的选择
choice = gameCtrl.start();
if (choice == 0) { //开始游戏
// 开启游戏前的难度选择
if(!gameCtrl.settings()) continue;
// 开启一局游戏
gameCtrl.init();
gameCtrl.loop();
}
else if (choice == 1) { //历史记录
//选择回放哪个历史记录
int record_idx=gameCtrl.show_record();
if (record_idx != -1) { //Esc键返回主页面
gameCtrl.play(record_idx);
}
}
}
}