结对编程作业

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行代码还是激起了我的编程兴趣,在最后持续一周的繁忙中,再没有时间给我玩游戏、躺着,但是却发现这样的生活很充实,这样的生活更有意义,也许我和别人之间真的只差一份努力,也许哪一天我能一个人做出自己想做的游戏,也许我可以不是我,我又可以成为真正的我。。。

  • 谢之越:
    作业难度:难。
    作业感想:通过这次作业我学习了前端最基本的知识,并做出了原型设计,但是却还没完全掌握,我更了解一个项目从开始到成型该经历哪些流程,首先要进行需求分析,然后要有一个好的想法,具体构想出终于产品和他的范围,计划功能并设计框架。可以说,软工实践给我们一个提前体验的机会,提前体验所谓项目如何成型,让我之后的学习也将在尽可能的情况下尽可能的拓展能力,获得经验,还是需要多看书不断学习新知识。

posted @ 2021-10-24 21:19  蓝花雨  阅读(51)  评论(0编辑  收藏  举报