zoukankan      html  css  js  c++  java
  • 结对编程作业

    自己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*算法
  • 相关阅读:
    【转】PowerDesigner数据库视图同时显示Code和Name
    [转]BT原理分析
    异常机制及throw与throws的区别(转)
    BS与CS的联系与区别。
    ASP.NET和C#的区别/
    上百例Silverlight网站及演示汇总,供友参考
    Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps
    【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps
    学习MAP 地图好地址
    Bing必应地图中国API
  • 原文地址:https://www.cnblogs.com/fzu031802340/p/13808976.html
Copyright © 2011-2022 走看看