结对编程作业
https://github.com/RichardDeemo/031902112/tree/main/结对编程作业
队员 | 博客链接 | 具体分工 |
---|---|---|
李涵 | https://www.cnblogs.com/lihan12138/p/15450011.html | 游戏开发及测试,素材收集,博客撰写 |
谢之越 | https://www.cnblogs.com/xiezhiyue/p/15435018.html | 前端界面与制作,需求分析,博客撰写 |
一、原型设计
(https://orgnext.modao.cc/app/061842717ba2f8d4975b8244f198793c155b384d 《猪尾巴游戏》 )
[2.2.1]提供此次结对作业的设计说明:
1.所采用的原型开发工具:
- 墨刀。
2.设计说明:
- 此次作业的原型采用了四个界面,分别为主界面(包含游戏开始和规则查看),游戏规则界面,模式选择界面(三种模式即人机对战,人人对战,在线对战),游戏界面(牌堆区,放置区,手牌区)。
3.设计结果:
- 主界面:
可以查看规则和开始游戏。
- 游戏规则界面:
- 模式选择界面:
只有双人对战模式开放,演示了摸牌,出牌和吃牌的基本操作。
- 游戏界面:
游戏双方在一台设备上轮流操作,如规则所示。
[2.2.2]遇到的困难及解决方法:
-
困难描述:
困难一:首次使用原型模型工具,一开始不知道从何下手。
困难二:时间紧迫,在之前的时间里队友之间没有具体计划,一直在踌躇。
困难三:由于起初对于工具的不熟练,缺乏设计理念和灵感。 -
解决方法:
查阅网上资料,学习了墨刀的基本使用方法,制作原型。在设计灵感方面,参考了其他同学的UI界面。去网上看了很多优秀网站的界面设计从中寻找灵感。两个人进行分工,学习工作各自部分,以此提高效率。 -
收获:学习了如何使用墨刀。
二、原型设计实现
[2.3.1]代码实现思路:
- 网络接口的使用:
没有使用网络接口,我们制作的猪尾巴暂时只支持本地双人对战。
- 代码组织与内部实现设计(类图)
撰写代码使用的是面向过程的方法,没有涉及到类,所有没有类图。
- 说明算法的关键与关键实现部分流程图
代码的关键在于玩家有手牌时,选取打出哪一张牌,并将打出后的手牌进行顺序调整。
- 贴出你认为重要的/有价值的代码片段,并解释:
这段代码实现了一个玩家出牌,摸牌,吃牌的完整流程。
if(ap!=0)
{
for(ai=0;ai<ap;ai++)
{
printf("%c",apaiduih[ai]);
printf("%d ",apaiduis[ai]);
}
printf("\n");
printf("请选择出牌模式(1/2):\n"); //选择出牌或摸牌
scanf("%d",&z);
if(z==1)
printf("\n");
if(z==1)
{
qpaiduih[qi]=paiduih[pi];
qpaiduis[qi]=paiduis[pi];
pi++;
qi++;
}
else if(z==2)
{
printf("你要打出哪一张牌?(1,2,3......):\n");//出牌
scanf("%d",&z);
if(z>ap)
{
flag=1;
break;
}
printf("\n");
qpaiduih[qi]=apaiduih[z-1];
qpaiduis[qi]=apaiduis[z-1];
for(j=z-1;j<ap-1;j++)
{
apaiduih[j]=apaiduih[j+1];
apaiduis[j]=apaiduis[j+1];
}
ap--;
qi++;
}
else
{
flag=1;
break;
}
}
else
{
printf("你只能摸牌,请选择1:\n"); //摸牌
scanf("%d",&z);
if(z!=1)
{
flag=1;
break;
}
printf("\n");
qpaiduih[qi]=paiduih[pi];
qpaiduis[qi]=paiduis[pi];
pi++;
qi++;
}
if(qpaiduih[qi-1]==qpaiduih[qi-2]) //吃牌
{
for(j=0;j<qi;j++)
{
apaiduih[ap]=qpaiduih[j];
apaiduis[ap]=qpaiduis[j];
ap++;
}
qi=0;
printf("你获得了放置区所有的牌。\n\n");
}
[2.3.2]贴出Github的代码签入记录,合理记录commit信息。
[2.3.3]遇到的代码模块异常或结对困难及解决方法。
-
困难描述:
选择打出牌时,打出的牌与选择的牌不相同。例如:选择打出A6,但是打出的是A7(也在玩家手中)。 -
解决过程:
细心寻找 bug 后发现是for函数参数错误,修改后程序可以正常运行。 -
心得:
写代码时一定要逻辑清晰,考虑好变量的赋值与使用。
[2.3.4]评价你的队友。
-
李涵:
值得学习的地方:负责,善于使用学习工具,学习能力强。
需要改进的地方:查找能力有待加强。 -
谢之越:
值得学习的地方:学习新技术时间很快,心态很好。
需要改进的地方:只用了不多时间学习新技术,心态和我一样佛系。
[2.3.5]提供此次结对作业的PSP和学习进度条。
- PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 4320 | 900 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 720 | 90 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 60 | 20 |
· Coding | · 具体编码 | 300 | 180 |
· Code Review | · 代码复审 | 120 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 20 |
Reporting | 报告 | ||
· Test Repor | · 测试报告 | 60 | 0 |
· Size Measurement | · 计算工作量 | 5 | 5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 10 |
合计 | 5725 | 1395 |
- 学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 梳理游戏逻辑,分工分配任务 |
2 | 0 | 0 | 0 | 0 | |
3 | 240 | 240 | 5 | 5 | 完成代码,学习了墨刀使用方法 |
4 | 20 | 260 | 5 | 10 | 撰写博客 |
三、心得
-
李涵:
这次作业难度很大,一开始就觉得我不可能做出来,缺乏自信,思想懒散,此吾罪一;时间充裕的时候也没有和队友沟通商量具体设计,没能抓住时间,此吾罪二;在大量的时间里没有学习前端,接口,UI设计等方面的软件工程知识,没有长足进步,此吾罪三。接近截止时间时才决定能做多少做多少,然悔之晚矣。当然写出了260行代码还是激起了我的编程兴趣,在最后持续一周的繁忙中,再没有时间给我玩游戏、躺着,但是却发现这样的生活很充实,这样的生活更有意义,也许我和别人之间真的只差一份努力,也许哪一天我能一个人做出自己想做的游戏,也许我可以不是我,我又可以成为真正的我。。。 -
谢之越:
作业难度:难。
作业感想:通过这次作业我学习了前端最基本的知识,并做出了原型设计,但是却还没完全掌握,我更了解一个项目从开始到成型该经历哪些流程,首先要进行需求分析,然后要有一个好的想法,具体构想出终于产品和他的范围,计划功能并设计框架。可以说,软工实践给我们一个提前体验的机会,提前体验所谓项目如何成型,让我之后的学习也将在尽可能的情况下尽可能的拓展能力,获得经验,还是需要多看书不断学习新知识。