第二次结对编程作业

1.博客链接

刘御帆:

作业链接

仓库地址

2.具体分工

刘御帆:

·UI界面开发       · 图片收集    

·音乐收集          ·ps

·UI和后端代码连接

许宏健:

·出牌代码           ·网络接口通信

·服务器数据解析     ·代码上传

·博客撰写

3.psp表格

PSP4.1

Personal Software
Process Stages

预估耗时(min)

实际耗时(min)

Planning

计划

40

50

Estimate

估计这个任务需要多少时间

10

10

Development

开发

1800

2400

Analysis

需求分析
(包括学习新技术)

800

1200

Design Spec

生成设计文档

60

40

Design Review

设计复审

30

20

Coding Standard

代码规范
(为开发制定合适的规范)

30

20

Design

具体设计

80

100

Coding

具体编码

1500

1500

Code Review

代码复审

600

650

Test

测试
(自我测试,修改,提交修改)

120

300

Reporting

报告

70

70

Test Report

测试报告

20

20

Size Measurement

计算工作量

10

10

Postmortem & Process
Improvement Plan

事后总结
并提出过程改进计划

30

30

合计

5160

6360

4.解题思路描述与设计实现说明

4.1网络接口的使用

        本次作业使用了maven项目管理方法,通过配置pom,获得到Unirest-java包。Unirest是一种轻量级的Http客户端库,能仅仅使用几行代码就能实现Http中get和post请求,大大减少了使用者的时间成本。下面是网络接口http中get请求实现的代码示例:

String response=Unirest.get("http://api.revth.com/history")

.header("X-Auth-Token", token)

.queryString("player_id",player_id)

.queryString("limit",limit)

.queryString("page",page)

.asString()

.getBody();

4.2代码组织与内部实现设计(类图)

  本次做也大部分使用类与类之间的关联关系,较少使用泛华关系(继承),类图如下。

4.3算法的关键与关键实现部分流程图

       出牌算法思路:出牌算法采用贪心算法思想,不考虑整体的最优解,只找出局部最优解,即先寻找是否能组成特殊牌型,在验正是够存在普通牌型中的同花顺,如果不存在逐级往下寻找,存在则优先满足后墩,再满足中墩,最后满足前墩

5.关键代码解释

     ①出牌算法

   下面是代码展示的是从服务器得到牌之后将字符串转化为易处理的数据:

boolean findsantonhuashun(int a[][]) {

int i,j,k,x;

int flag1=0,flag2=0;

for(i=0;i<4;i++) {

x=0;

for(j=1;j<=13;j++) {

if(j==13)k=0;

else k=j;

if(a[i][k]==1) x++;

if((a[i][k]==0 || j==13) && x==3) flag1++;

else if((a[i][k]==0 || j==13) && x==5) flag2++;

else if((a[i][k]==0 || j==13) && x==8) {

flag1++;

flag2++;

}

else if((a[i][k]==0 || j==13) && x==10) flag1+=2;

else if((a[i][k]==0 || j==13) && x!=0)return false;

}

}

if(flag1==1 && flag2==2)return true;

else return false;

}

  ②UI界面

  UI界面有难度的的地方在于代码量大,还有切换页面上较为困难,最后我们选择通过制作弹窗的方式,下面代码展示的是登录按钮事件处理;

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String usrname = textField.getText();

String passwd =  String.valueOf(passwordField.getPassword());

StartLogin login =  new StartLogin();

login.login.setUsername(usrname);

login.login.setPassword(passwd);

if(login.startLogin()) {

try {

new Game();

dispose();

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (JavaLayerException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

else {

JOptionPane.showMessageDialog(null, login.re, "密码或用户名错误", JOptionPane.ERROR_MESSAGE);

}

}

 6.性能分析与改进

7.单元测试

8.贴出Github的代码签入记录

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

9.1问题描述

·不知道怎么使用http请求

·json复杂数据转换

9.2做过哪些尝试

·通过百度发现很多人推荐使用unirest-java这种包使用起来较为简单,但是需要用到maven项目管理方法才能正常使用,最后我通过询问java老师最终学会了如何使用maven。

·json解析我最终选择了gson这个jar包,在网上查找大量的例子和代码,最终学会了如何使用gson

9.3是否解决

两个问题都解决了

9.4有何收获

       解决上述两个问题的过程中顺便学习了如何使用maven来进行项目管理,而maven是在线协作的项目中不可或缺的一部分。在解决json解析的问题中我熟练的掌握了如何使用gson解析json数据。

10.评价队友

      许宏健:虽然我们两个的编程技术都不怎么好,但是在这次的组队过程中,队友每次编程过程中遇到的问题能及时和我沟通协商,一起商量出解决的办法,从这些行为中可以看出,我的队友是一个能够虚心学习的人,而且在碰到困难是不轻言放弃的人。

       刘御帆:本次作业我的队友许宏健主要承担前段页面设计部分同时也承担了部分的后端。对于我能力上的不足队友毫无怨言积极辅导我完成我应该负责的部分,是本次结对作业的主力。

11.学习进度条

 

N

新增代码(行)

本周学习耗时(小时)

累计学习耗时(小时)

1

400

9

9

2

1300

26

35

原文地址:https://www.cnblogs.com/dropper/p/11768893.html