第二次结对编程作业

三世轮回 提交于 2019-12-02 23:40:21

在文章开头给出结对同学的博客链接、本作业博客的链接、你所Fork的同名仓库的Github项目地址(2分)

给出具体分工(2分)
翟鑫亮负责算法的设计,张伟佳负责接口连接,UI两人共同承担
给出PSP表格(2分)
PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划80100· Estimate· 估计这个任务需要多少时间6090Development开发15001600· Analysis· 需求分析 (包括学习新技术)600700· Design Spec· 生成设计文档5030· Design Review· 设计复审10080· Coding Standard· 代码规范 (为目前的开发制定或选择合适的规范)3030· Design· 具体设计800930· Coding· 具体编码500600· Code Review· 代码复审4030· Test· 测试(自我测试,修改代码,提交修改)5080Reporting报告110100· Test Repor· 测试报告4030· Size Measurement· 计算工作量2010· Postmortem & Process Improvement Plan· 事后总结, 并提出改进计划5060 · 合计40304470

网络接口的使用(3分)

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

算法的关键与关键实现部分流程图(6分)
此次的算法主要涉及到制作扑克、洗牌和对前中后三堆牌的选择三部分。1、制作扑克利用两个字符串数组将扑克的花色和数值保存起来,再用循环将不同花色所对应的数值扑克制作出来保存到map<int,string>中并将牌号保存到vector oldarr中。2、洗牌调用distribute方法里的随机分配函数将根据系统时间产生随机数,在循环里选择该扑克号存入vector newarr中。3、分堆选择由于十三水中的牌型比较多,所以我们依次从大牌型到小牌型考虑。先分后堆,再分中堆,最后前堆。
关键代码解释(3分)
void get_rand_number(vector oldarr, vector &newarr)
{
int value;
srand((int)time(0)); //拿当前系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。
/* 发牌的时候对于已经分配的数据不再修改 /
for (int index=52;index>0; index--)
{
value =rand() % index;
newarr.push_back(oldarr[value]);
oldarr.erase(oldarr.begin() + value);
}
}以上代码中的srand()保证了洗牌的随机性。void getpoker(vector handPoker)
{
memset(a,'0', sizeof(a));
for (string str : handPoker)
{
int index;
if (str[1] > '1' && str[1] <= '9')
index = (str[1] - '2');
else if (str[1] == '%')index = 8;
else if (str[1] == 'J' )index = 9;
else if (str[1] == 'Q')index = 10;
else if (str[1] == 'K')index = 11;
else index = 12;
y[index]++;
if (str[0] == '&')
{
a[0][index] = str[1];
x[0]++;
}
else if (str[0] == '$')
{
a[1][index] = str[1];
x[1]++;
}
else if (str[0] == '
')
{
a[2][index] =str[1];
x[2]++;
}
else
{
a[3][index] =str[1];
x[3]++;
}
}}对扑克数组进行赋值,在构造完后方便后面的各种牌型的判断和牌的“删除”。
展示性能分析图和程序中消耗最大的函数(1分)

描述你改进的思路(5分)
  可以从性能分析图看出,我们的play函数和lookPoker函数所占的消耗最大。我在lookPoker函数先是对扑克复制到另一个数组,然后再对这个数组进行特殊字符%的判断,这无疑加大了开销,所以将会直接在原来数组里判断并输出。7、单元测试(5分)展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路TEST_METHOD(samecolordragon)
{
Operation oper;
vector temp;
temp.push_back("#2"); temp.push_back("#3"); temp.push_back("#4");
temp.push_back("#5"); temp.push_back("#6"); temp.push_back("#7");
temp.push_back("#8"); temp.push_back("#9"); temp.push_back("#%");
temp.push_back("#J"); temp.push_back("#Q"); temp.push_back("#K"); temp.push_back("#A");
oper.getpoker(temp);
Assert::IsTrue(oper.samecolordragon());
}构造一个存储字符串的向量,向其中存储特殊牌型-----至尊清龙,判断samecolordragon函数是否判断正常。
贴出Github的代码签入记录(1分)

遇到的代码模块异常或结对困难及解决方法(8分)
翟鑫亮:
问题描述(2分)
  对福建十三水这种棋牌游戏的规则很迷,什么各种打枪或者全垒打还有输赢后如何进行水的划分都不是很清楚。
做过哪些尝试(2分)
  有从网上看过许多这种十三张类似游戏的规则,发现它们的玩法大差不差只不过是牌型的叫法不同而已。此外还从网上看了一些关于该游戏的视频。  
是否解决(2分 )
  基本解决
有何收获(2分)
  收获的话,大概应该有两点。第一个就是学会了如何打福州十三水,说实话还是第一次听过这种玩法,一开始还以为是什么旅游胜地呢。其次的话,接触到了一些游戏规则设计的算法,学会了更加灵活地解决问题。
评价你的队友(4分)
翟鑫亮:
值得学习的地方(2分)
需要改进的地方(2分)
学习进度条(2分)

第N周新增代码(行)累计代码(行)本周学习耗时(小时)累计学习耗时(小时)重要成长1002020学会了原型设计工具的基本使用方法,学会了十三水的玩法23403405060开始学习网页制作,并着手于算法设计352086045100网页制作基本成型,开始交互工作;4412127260130基本完成ai和ui制作

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!