结对编程作业

自己031802340郑瀚曦:博客链接 Github项目地址
队员031802315李少荣:博客链接 Github项目地址——游戏原型设计的工程文件、代码、AI大比拼含算法在内的代码都在这个Github

分工
任务 完成者
写博客 郑瀚曦
原型设计 郑瀚曦
AI代码实现 李少荣
性能分析 郑瀚曦
编程实现华容道 李少荣
使用接口 李少荣

一、原型设计

1.设计说明

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提交答案

2.原型模型设计工具
Axure RP 9
3.照片

4.遇到的困难及解决方法
  • 困难描述
    原型设计的元件库过少,界面不够美观
  • 解决尝试
    导入其他的元件库,进行界面设计,找一些精美的图片来作为背景图,变换按钮的颜色
  • 是否解决
  • 有何收获
    学会使用Axure RP 9进行原型设计并且导入元件库,设计游戏的界面

二、AI与原型设计实现

1.代码实现思路:
- 代码组织与内部实现设计(类图)

  • 说明算法的关键与关键实现部分流程图

  • 贴出你认为重要的/有价值的代码片段,并解释
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信息。

3.遇到的代码模块异常或结对困难及解决方法。

写代码时设计好了算法,以及数据结构,但是在书写过程中有些东西实现起来还是很复杂,比如(设计AI,其中要用到很多知识)。
最后只能通过网上搜索博客还有向同学请教的方式解决,然后在自己的编程环境下实现。
收获很多,知道了很多知识,能够实现自己的设计。

4.评价你的队友。

值得学习的地方:认真负责,对学习新知识很有热情
需要改进的地方:写代码要带更多的注释,在定义变量时注释变量的作用

5.提供此次结对作业的PSP和学习进度条。
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*算法
posted @ 2020-10-13 15:11  hell56l  阅读(34)  评论(0编辑  收藏  举报