自己031802340郑瀚曦:博客链接 Github项目地址
队员031802315李少荣:博客链接 Github项目地址——游戏原型设计的工程文件、代码、AI大比拼含算法在内的代码都在这个Github
任务 |
完成者 |
写博客 |
郑瀚曦 |
原型设计 |
郑瀚曦 |
AI代码实现 |
李少荣 |
性能分析 |
郑瀚曦 |
编程实现华容道 |
李少荣 |
使用接口 |
李少荣 |
1.引言
1.1编写目的
大三上学期的学习课业繁重,编写这样一个游戏能让我们在空闲时间适当放松。
1.2背景
a.我们团队开发的软件是图片华容道
b.我们团队的成员有:郑瀚曦、李少荣
用户:有娱乐需求的人
2.总体设计
2.1需求规定
[说明对本系统的主要的输入输出项目、处理的功能性能要求。]
2.1.1.通过操作改变图片中空格的位置
2.1.2.记录每次操作进行后的一共的操作数
2.1.3.在若干次1中的操作后将图片恢复原位,获得游戏胜利
2.1.4.记录每次游戏胜利需要的步数
2.1.5.输入输出要求
2.1.6其他专门要求
2.2运行环境
该软件是用java开发的App,使用的是IDEA开发工具,运行在windows系统中
2.4结构
3.接口设计
3.1获取题目
3.2用户接口
图形化界面和文本
3.3提交答案
Axure RP 9
- 困难描述
原型设计的元件库过少,界面不够美观
- 解决尝试
导入其他的元件库,进行界面设计,找一些精美的图片来作为背景图,变换按钮的颜色
- 是否解决
是
- 有何收获
学会使用Axure RP 9进行原型设计并且导入元件库,设计游戏的界面
- 代码组织与内部实现设计(类图)
- 说明算法的关键与关键实现部分流程图
public int bfsHash(int start,int zeroPos){
char temp[];
Node tempN=new Node(start,0,zeroPos);//创建一个节点
que.add(tempN);//压入优先级队列
mymap.put(start,1);//标记开始节点被访问过
while(!que.isEmpty()) {
tempN = que.poll();//弹出一个节点
String str = String.format("%09d", tempN.num);
temp = str.toCharArray();
int pos = tempN.zeroPos, k;
for (int i = 0; i < 4; i++) {
if (changeId[pos][i] != -1) {
swap(temp, pos, changeId[pos][i]);
k = Integer.valueOf(String.valueOf(temp));
if (k == des) return tempN.step + 1;
if (!mymap.containsKey(k)) {
Node tempM = new Node(k, tempN.step + 1, changeId[pos][i]);
que.add(tempM);//创建一个新节点并压入队列
mymap.put(k, 1);
}
swap(temp, pos, changeId[pos][i]);
}
}
}
return que.peek().num;
}
解释:
将开始节点压入队列,每次弹出来一个TempN。
弹出来的节点查找四个方向,如果changeId[pos][i]为-1说明不可到达
查找的四个方向的坐标不能是被访问过的点,即不能反复移动再退回去
如果满足条件,就创建新节点并且压入队列中
每次弹出来的节点都检验是否为初始状态,如果为初始状态,即k == des返回结果
- 性能分析和改进的思路
在BFS中容易消耗大量的性能,涉及压入队列的操作和向四个方向搜索
bfsHash中已经经过的点全部标记一下,避免移动一格之后重新退回去,即退回去的那个不要让它压入队列
- 展示性能分析图和程序中消耗最大的函数
消耗最大的函数
Jprofiler中的hot spots分析消耗最大的方法
2.贴出Github的代码签入记录,合理记录commit信息。 |
写代码时设计好了算法,以及数据结构,但是在书写过程中有些东西实现起来还是很复杂,比如(设计AI,其中要用到很多知识)。
最后只能通过网上搜索博客还有向同学请教的方式解决,然后在自己的编程环境下实现。
收获很多,知道了很多知识,能够实现自己的设计。
值得学习的地方:认真负责,对学习新知识很有热情
需要改进的地方:写代码要带更多的注释,在定义变量时注释变量的作用
PSP |
Personal Software Process Stages 2 |
预估时间(分钟) |
实际耗时(分钟) |
Planning |
计划 |
|
|
· Estimate |
· 估计这个任务需要多少时间 |
30 |
50 |
Development |
开发 |
|
|
· Analysis |
· 需求分析 (包括学习新技术) |
310 |
430 |
· Design Spec |
· 生成设计文档 |
30 |
30 |
· Design Review |
· 设计复审 |
60 |
60 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
80 |
80 |
· Design |
· 具体设计 |
300 |
500 |
· Coding |
· 具体编码 |
430 |
380 |
· Code Review |
· 代码复审 |
60 |
40 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
40 |
60 |
Reporting |
报告 |
|
|
· Test Report |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
30 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
50 |
70 |
合计 |
|
1450 |
1750 |
第N周 |
新增代码(行) |
累计代码(行) |
本周学习耗时(小时) |
累计学习耗时(小时) |
重要成长 |
1 |
217 |
217 |
8 |
8 |
学习了JAVA语言的JButton类和Focus监视器接口 |
2 |
181 |
398 |
7 |
15 |
通过设计方格移动的方法掌握了监视器的使用,学会了游戏中检测结果和检测是否可以移动的算法 |
3 |
165 |
563 |
6 |
21 |
学会用java检测键盘和鼠标 |
4 |
72 |
635 |
8 |
29 |
学习了AI中要用到的A*算法 |