目录
1 问题描述 2
2 需求分析 2
2.1 数据需求 2
2.2 功能需求 2
2.3 非功能需求 3
3 概要设计 3
3.1抽象数据类型 3
3.2 总体设计 3
3.3 功能模块设计 5
3.4 用户界面设计 7
4 详细设计及系统实现 9
4.1 存储结构 9
4.2 核心算法 9
4.3 各功能实现 10
5 系统调试分析 14
6 课程设计总结 14
参考文献 15
附录:源码以及其它相关材料 15
2 需求分析
2.1 数据需求
游戏包括界面,基本的控件,有文本框、选择框、按钮等。
用户信息:用户登录需要的账号和密码,新用户注册用到的信息;对玩家信息的记录、保存、读取。
界面信息:图片,九宫格规格;
交互信息:控制游戏的移动;
2.2 功能需求
- 游戏界面设计:
用户登录,进入游戏界面,有良好的功能可视化界面,有游戏规则介绍。例如有计时和分数的显示,游戏图片替换和打乱图片的按键,显示游戏界面的图像画面,游戏玩家开始游戏、悔一步,重新开始的按键。 - 原始图像的选择:
游戏开始时,从准备好的图片中,选择想要拼的图片,要有不同难度的图片(可从相似度考虑);可选择重新开始; - 随机打乱图像:
选择难度(1,2,3),根据难度将图片分成33, 55,6*6的规格,设计算法,随机打乱生成肯定有成功结果的初始化状态九宫格,要求有动态的打乱图片的显示过程(若产生的初始化九宫格无法到达最终状态,应该有提示3秒后自动刷新,重新生成); - 计时器的设计:
动态显示玩家本局的时间,可选择限时挑战; - 移动:
用户可以拖动模块进行交换,直到拼出原图像。
1)通过w, s, a, d(或者上,下,左,右)进行平移操作,动态的展示每一步移动的结果。如果操作违法,应不做该操作;
2)能够刷新界面;
3)游戏过程中,允许选择悔一步(不可后退多步,若用户悔步>1,给出提示且不执行多次后退操作)或者终止游戏(正常),继续下一步; - 系统能自动检查到用户拼合出原图。
- 结束游戏:
int result = CanMovePos(Pos);
for(int i=0; i<4; ++i)//
{
bool bIsMove=false;//初始设定为不能移动
int r = result%10*10;//依次求出四位数的第4,3,2,1位(从左往右数)
r = (int)pow((float)r, i);//对应下,上,左,右是否有格子
switch(r)
{
case 1000://表示左侧有格子
if(m_Block[Pos-1] == LASTBLOCK)//LASTBLOCK两位数表示的空白格子[Pos-1]是左侧格子的下角标,m_Block为求两位数的函数
{
MovePos(Pos-1, Pos);
bIsMove = true;
}
break;
case 100://表示右侧还有格子
if(m_Block[Pos+1] == LASTBLOCK)
{
MovePos(Pos+1, Pos);
bIsMove = true;
}
break;
case 10://表示上面有格子
if(m_Block[Pos-m_BlockNum] == LASTBLOCK)
{
MovePos(Pos-m_BlockNum, Pos);
bIsMove = true;
}
break;
case 1://表示下面有格子
if(m_Block[Pos+m_BlockNum] == LASTBLOCK)
{
MovePos(Pos+m_BlockNum, Pos);
bIsMove = true;
}
break;
}
result /= 10;//下一位
if(bIsMove)
{
AddStep();//移动成功增加步数
return true;
}
}//四种情况必出现一种,其他情况为异常情况
return false;