108
社区成员




本次结对编程任务为:一款随机骰子对战小游戏的设计与实现
作业提交截止时间为:2023.10.12 22:00
结对编程(Pair Programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。
在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。
鼓励自行设计优美简洁的盘面,包含但不限于以下内容(以下区域全部公开):
进入游戏,选择游戏模式后,设置游戏局数和玩家个人筹码数
每一局游戏内有三轮投掷机会,玩家一人一次轮流投掷骰子,每个玩家有5个骰子
前两次投掷骰子之后可以选择锁定0~5个骰子,锁定的骰子位于选定区域不再改变
前两轮每轮投掷结束并在所有玩家锁定骰子后,每位玩家可以选择增加倍率:0,1,2,3。选择完成后进入下一轮。
第三轮投掷结束后,所有玩家的全部骰子自动锁定并进行计分(得分为五个骰子的点数总和+奖励分),得出最终结果,筹码划分。
分数最高的玩家从所有其它玩家手里赢得(二人分差的绝对值)*(总倍率)的筹码。
N局游戏后,筹码最多的玩家获胜。
如若中途有玩家筹码小于等于0,则该玩家被击飞,游戏直接结束(都没了的意思哦)。
原型模型必须采用专用的原型设计工具实现:如Adobe XD、Mockplus、Axure RP、Figma、Balsamiq Mockup、UXPin、Prototype Composer、GUI Design Studio等。不同的原型设计软件的入手难度、可实现的界面交互复杂度不同,大家根据自己的实际情况,选择适合自己的软件进行设计。
应用功能可包含但不限于:
编程实现你们的原型设计,尽可能达到较高还原度。
进行算法设计,尽可能使人机对战中的AI更智能。
通常来说,游戏AI(Game AI)区别于我们讨论计算机视觉、自然语言处理等领域时所说的学术AI。
学术AI的目的是创造一个智能体,该智能体根据环境作出动作,以最大化成功率为目的。例如在图像识别任务中,我们希望AI能够获得尽量高的准确率。
而游戏AI是开发者希望为玩家创造更加引人入胜的体验而诞生的。我们用的每一个技术、每一个技巧、每一种算法,都是为了这样的一个目标。在这种目的的引导下,我们有时故意不把AI做得那么强大,为玩家提供更好的服务。
不过,在K班的AI大战中,为了战胜其他小组的AI,可能需要聪明的算法乃至学术AI的方法来实现游戏AI。
在编程实现过程中,需要展示代码组织与内部实现设计(类图),说明算法的关键与关键实现部分流程图,并进行性能分析和改进。具体见下文中的博客撰写内容。
在项目开发过程中,学习使用GitHub进行代码托管、历史版本管理。
项目完成后,请制作一段不超过2分钟的产品演示视频,并上传到Bilibili视频平台。
若条件允许,作业截止后组织召开班级内的最强AI角逐赛,每个结对队伍与其他结对队伍制作的AI进行两两对战,评选出班级最强AI。具体PK赛制与得分规则后续给出。
若条件允许,且评选出班级最强AI后,每组可派出至多一名成员与最强AI进行人机对战赛,胜出可获得Bonus得分奖励。
在正文第一行给出GitHub项目地址(本行除链接外无任何其他文本内容)
在正文第二行给出Bilibili视频地址(本行除链接外无任何其他文本内容)
一、结对探索(4分)(汉字序号为一级标题,下同)
1.1 队伍基本信息(1分)(阿拉伯数字序号为二级标题,下同)
结对编号:____;队伍名称:____;
学号 姓名 作业博客链接 具体分工 1.2 描述结对的过程(1分)
1.3 非摆拍的两人在讨论设计或结对编程过程的照片(2分)
二、原型设计(16分)
2.1 原型工具的选择(2分)
(在此处说明选择了什么原型设计工具?为什么选择这一款原型软件?)
2.2 遇到的困难与解决办法(3分)
(原型设计过程中的困难描述、解决尝试、是否解决、有何收获)
2.3 原型作品链接(5分)
(静态原型作品得2分,交互性强的原型作品得5分)
2.4 原型界面图片展示(6分)
(尽可能图文并茂地在此处介绍你们队伍设计的各功能模块,创新点也在此处展示说明)
三、编程实现(14分)
3.1 网络接口的使用(2分)
3.2 代码组织与内部实现设计(类图)(2分)
3.3 说明算法的关键与关键实现部分流程图(2分)
3.4 贴出重要的/有价值的代码片段并解释(2分)
3.5 性能分析与改进(2分)
(描述你改进的思路,展示性能分析图和程序中消耗最大的函数)
3.6 单元测试(2分)
(展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路)
3.7 贴出GitHub的代码签入记录,合理记录commit信息(2分)
四、总结反思(11分)
4.1 本次任务的PSP表格(2分)
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 · Estimate · 估计这个任务需要多少时间 Development 开发 · Analysis · 需求分析 (包括学习新技术) · Design Spec · 生成设计文档 · Design Review · 设计复审 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) · Design · 具体设计 · Coding · 具体编码 · Code Review · 代码复审 · Test · 测试(自我测试,修改代码,提交修改) Reporting 报告 · Test Report · 测试报告 · Size Measurement · 计算工作量 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 · 合计 4.2 学习进度条(每周追加)(2分)
第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长 1 500 500 5 5 熟悉x语言1、2、3特性 2 1000 1500 12 17 通过练习xxx,掌握了xxx用法 … 4.3 最初想象中的产品形态、原型设计作品、软件开发成果三者的差距如何?(2分)
(也就是谈一谈本次任务中“理想与现实的差距”,是哪些因素造成了这些差距?)
4.4 评价你的队友(2分)
(分别评价队友值得学习的地方和需要改进的地方)
(本部分需要包含队伍内所有成员的心得体会,若缺少一人,则队伍总分减少2分,减满4分为止) 4.5 结对编程作业心得体会(3分)
(可包含但不限于评价作业难度、完成后的感受、遇到的代码模块异常或结对困难及解决方法、对之后学习或软件开发的启发)
(本部分需要包含队伍内所有成员的心得体会,若缺少一人,则队伍总分减少3分,减满6分为止)
本文第三部分博客撰写内容提供了博文模板,需要严格按照博客撰写内容中的一级标题和二级标题进行撰写博客。博客共分为【一、结对探索】(满分4分)、【二、原型设计】(满分18分)、【三、编程实现】(满分12分)、【四、总结反思】(满分11分)四个部分。
作品有创新,融入了班级特色创意元素,如有,在博客中2.4 原型界面图片展示部分展示说明。(每处满分+4分,满分+8分)
评选出班级最强AI后,每组可派出至多一名成员与最强AI进行人机对战赛,胜出可获得Bonus得分奖励。(+4分)
鼓励进行微信小程序应用开发,成功上线的结对队伍将给予Bonus附加奖励。(+8分)(若选择小程序开发,不使用“孤注一掷”三个字作为小程序名称。)
撰写博文时,请在编辑区右上角选择【切换为MarkDown】,使用MarkDown语言撰写博客文档,并严格按照博客撰写格式中的一级标题和二级标题进行撰写博客;
将作业标题严格命名为2023软工K班结对编程任务,不要修改;
作业截止后发布博文:作业截止24小时内补交在原分数上扣20分,24-48小时内扣40分,48-72小时内扣60分,以此类推扣到0分为止;
发布博文但未提交任务/错误提交链接:24小时内补提交扣10分,24-48小时内扣20分,48-72小时内扣30分,以此类推扣到0分为止(请注意:本次作业开始,不会再在QQ课程群中提醒需要提交任务);
缺交:以上两项扣分规则仅适用于在作业截止之后、评测开始之前补提交的情况!作业截止后任意时间开始进行评测,评测开始的具体时间不会提前告知,评测开始时仍未发布博客或未提交任务均视为缺交,评为0分;
抄袭或作弊:自动评测系统或人工检测到的不诚信行为评为0分(包括但不限于作业抄袭、对战中骰子数非随机等)。