# 2022软工K班结对编程任务

## 一、结对探索（4分）

### 1.1 队伍基本信息（1分）

​ 结对编号：21；队伍名称：只因

032002237叶夏雨原型设计，前端开发
032002239张陈玮原型设计，UI设计，后端开发

## 三、编程实现（14分）

### ​ 3.4 贴出重要的/有价值的代码片段并解释（2分）

public class ChessElement {
private int[] location = new int[6];
private int score;
private int left;
public ChessElement(int[] location) {// 初始化棋盘元素(location长度为3)
for (int i = 0; i < 3; i++) {
if (location[i] != 0) {
this.location[location[i] - 1]++;
}
}
init();
}
public ChessElement(int[] location, int dice, boolean isOpposite) {// 初始化棋盘元素，并在己方或对方放一个骰子(location长度为6)
this.location = location;
if (isOpposite) {
this.location[dice - 1] = 0;
} else {
this.location[dice - 1]++;
}
init();
}
public void setScore() {// 初始化得分
for (int i = 0; i < 6; i++) {
score += location[i] * location[i] * (i + 1);
}
}
public boolean isFull() {// 判断棋盘元素是否已经满了
int a = 0;
for (int i = 0; i < 6; i++) {
a += location[i];
}
if (a < 3) {
return false;
} else {
return true;
}
}
public int getScore() {// 获取该棋盘元素的当前得分
return score;
}
private void setLeft() {//获取剩余空位数量
for (int i = 0; i < 6; i++) {
left += location[i];
}
left = 9 - left;
}
public int getNewScore(int x) {// 填入x后该棋盘元素的得分
int result = 0;
int a[] = new int[6];
for (int i=0;i<6;i++) {
a[i]=location[i];
}
a[x - 1] = 0;
for (int i = 0; i < 6; i++) {
result += a[i] * a[i] * (i + 1);
}
return result;
}
public int getAddition(int x) {// 填入x后该棋盘元素的得分增量
return getNewScore(x) - score;
}
public int getDecrement(int x) {// 对面填入x后该棋盘元素的得分减量
int result = 0;
int a[] = new int[6];
for (int i=0;i<6;i++) {
a[i]=location[i];
}
a[x - 1] = 0;
for (int i = 0; i < 6; i++) {
result += a[i] * a[i] * (i + 1);
}
result = getScore() - result;
return result;
}
public int[] getLocation() {// 以一维数组形式输出棋盘元素
return location;
}
public int getLeft() {
return left;
}
private void init() {
setScore();
setLeft();
}
}

function senddata(){//向后端发送数据
dice=Math.floor((Math.random() * 10) + 1) % 6 + 1;
var data1 = "{";
var data2 = "{";
for (var i=0;i<9;i++){
data1 = data1 + "\"" + i +"\"" + ":" + leftchess[i];
data2 = data2 + "\"" + i +"\"" + ":" + rightchess[i];
if (i!=8){
data1 = data1 + ",";
data2 = data2 + ",";
}
}
data1 = data1 + "}";
data2 = data2 + "}";
\$.ajax({
type: "post",
url: "http://localhost:8083/xyt/MyWebServlet",
data:
{
"data1": data1,
"data2": data2,
"dice": dice
},
cache: false,
dataType: "json",
success:
function(data){
var position = data;
if(position=="1"){
for(var i=0;i<3;i++){
if (rightchess[i]==0){
rightchess[i]=dice;
diceforscore=dice;
isright=0;
isleft=1;
dice=0;
break;
}
}
}
else if(position=="2"){
for(var i=3;i<6;i++){
if (rightchess[i]==0){
rightchess[i]=dice;
diceforscore=dice;
isright=0;
isleft=1;
dice=0;
break;
}
}
}
else{
for(var i=6;i<9;i++){
if (rightchess[i]==0){
rightchess[i]=dice;
diceforscore=dice;
isright=0;
isleft=1;
dice=0;
break;
}
}
}
}
})
}

### ​​ 3.5 性能分析与改进（2分）

WholeChess类内部的calculateValue方法,count的值在大于7后对结果几乎没有影响，但是却极大的影响代码运行速度,所以将count从10改为7。

### 3.6 单元测试（2分）

public static void main(String[] args) {
int[][] a1 = { { 1, 0, 0}, { 2, 2, 2 }, { 0, 0, 0 } };
int[][] a2 = { { 6, 6, 0 }, { 5, 5, 0 }, { 1, 1, 0 } };
int dice = 1;
InterfaceToJs i = new InterfaceToJs(a1,a2,dice);
System.out.println(i.getPosition());
}

public static void main(String[] args) {
int[][] a1 = { { 1, 1, 0}, { 2, 2, 2 }, { 2, 0, 0 } };
int[][] a2 = { { 6, 6, 6 }, { 5, 5, 5 }, { 6, 1, 0 } };
int dice = 1;
InterfaceToJs i = new InterfaceToJs(a1,a2,dice);
System.out.println(i.getPosition());
}

## 四、总结反思（11分）

### ​ 4.1 本次任务的PSP表格（2分）

PSP2.1Personal Software Process Stages预估耗时（分钟）实际耗时（分钟）
Planning计划3030
· Estimate· 估计这个任务需要多少时间18002000
Development开发15001800
· Analysis· 需求分析 (包括学习新技术)10001200
· Design Spec· 生成设计文档120120
· Design Review· 设计复审3030
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)3030
· Design· 具体设计6050
· Coding· 具体编码600700
· Code Review· 代码复审6050
· Test· 测试（自我测试，修改代码，提交修改）180200
Reporting报告6060
· Test Report· 测试报告3030
· Size Measurement· 计算工作量2020
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3030
· 合计55506350

### 4.2 学习进度条（每周追加）（2分）

#### 叶：

115015088熟悉html,css，完成了基本界面设计
2300450816学习js，完成了掷骰子，棋盘的功能
3500950723进一步掌握前端三件套，优化作品

#### 张

1001515了解了深度学习和Spring框架，虽然最后没用上
2500500520熟悉java语言httpservlet类
3100015001232通过练习前后端交互，掌握了ajax用法

### 4.3 最初想象中的产品形态、原型设计作品、软件开发成果三者的差距如何？（2分）

1.产品形态和原型设计的最终的成果还是符合预期的 。
2.软件开发还是和理想的有差距，比如想要实现的小程序上线等等都没有实现。

### 4.4 评价你的队友（2分）

#### To张：

• 值得学习的地方：稳如老狗,学习能力强

• 需要改进的地方：时间管理需要加强，期待早日成为时间管理大师~

#### To叶：

• 值得学习的地方：努力学习，成为搭建网页小能手

• 需要改进的地方：遇到困难摆大烂

### ​ 4.5 结对编程作业心得体会（3分）

##### 叶：
1. 零基础入门造火箭的体验，整个过程非常煎熬，因为这学期选修课选的太多，导致投入软工大作业的时间很难分配，于是只能不断压缩睡眠时间，还好队友给力，最终浑浑噩噩，勉勉强强完成了任务。
2. 完成后的感受：天呐，我要好好睡一觉 zzzZZZ~
3. 困难：因为一开始分工的时候就决定了要做前端，但是完全零基础，于是就紧锣密鼓地开始学习前端三件套。B站上搜集视频，然后倍速播放(看视频看到最后有点恶心的感觉呃呃呃…)。学习了一周后总算基本入门了前端，之后在B站上看到制作五子棋小游戏的视频，觉得大差不差，就跟着学，并用画布制作了棋盘，然后折腾了几天发现画布很难实现想要的功能，最后只能推翻重来用ul重新制作了棋盘，所以这一个简单的环节就浪费了许多时间(×_×)。
4. 启发：再次深刻地意识到自己的不足，革命尚未成功，同志还需努力！
##### 张：
1. 作业难度：从未有过的体验，第一次尝试前后端分离的项目，收获十足
2. 完成后的感受：spring框架很重要，需要尽快学习，然后就是好好放松一天
3. 困难：变量的安全性欠考虑，类内的对象经常逸出。函数递归需要重新学习（卡了好久）。因为一开始想搞深度学习，所以投入的很多时间学习，结果最后还是没用上，浪费了不少时间。最后是使用的编程工具很大程度上决定了写代码的速度，idea在代码编写上确实比eclipse方便
4. 启发：好好学习，提升自己的能力才是目前最重要的。
• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 打赏
• 6
评论
08-03
08-03
03-23
08-22
10-27
09-28 1286
12-04 507

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

qq_51304813

¥1 ¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。