zoukankan      html  css  js  c++  java
  • 结对编程作业

    https://github.com/B1usher/Pig_Tail

    姓名 学号 分工 博客链接
    赵文涛 031902630 原型设计,AI设计 https://www.cnblogs.com/Blusher/p/15451030.html
    杨寓荃 031902629 游戏开发,游戏测试 https://www.cnblogs.com/yyq24/p/15456216.html

    一、原型设计


    原型链接

    1.1 设计说明

    • 使用的原型开发工具

    我们使用的原型开发工具是Axure Rp9,共开发了“开始界面”、“游戏界面”、“在线大厅”三个界面,以及各界面基本交互功能的实现。

    • 界面说明介绍

    (1)开始界面:
    开始界面提供了三种模式选择的功能。点击本地对战和人机对战跳转至游戏界面,点击在线对战跳转至在线大厅

    (2)游戏界面:
    游戏界面提供了所有游戏进行时的画面展示。界面上侧为玩家2,下侧为玩家1,中间左侧为牌堆,中间右侧为放置区。界面中提供了玩家id的显示,以及牌堆、手牌各花色牌数量的显示,方便玩家选择合适的操作。当手动或通过提示选中一种花色后,通过“打出键”打出;或通过“抽牌键”从牌堆中抽取。并有退出键和托管键,点击后弹出相应提示。

    托管提示:

    退出提示:

    (3)在线大厅:
    开始界面提供了登录,创建,加入三个功能。只有登录后才能看到创建、加入模块,否则会提示错误,点击登录后会弹出登录区域。

    登录区域

    登入后可以选择房间或输入uuid来加入已有游戏

    登入后也可以自己创建房间

    1.2 遇到的困难和解决方法

    (1)困难描述:无法实现在线界面中房间列表的页码中文本的变化;分享的网页版加载速度慢;各种事件执行的顺序不好确定。
    (2)解决过程:页码问题我们首先添加了一个全局变量,设它的默认值与当前页码的文本值一样,通过点击下一页按钮,使这个变量的值加减,再把页码的文本值设成这个变量的值;加载问题应该是图片过多的原因,于是我们把原型设计中的几乎所有图片都删了。
    (3)有何收获:感觉自己的强迫症又重了几分,对于一些元件大小和位置的选择,几乎是一个像素一个像素去调,虽然肉眼看不出两侧一个像素的不对称。虽然最终结果还是挺简陋的,但我觉得原型设计能体现基本功能和界面布置就可以了。

    二、原型设计实现


    2.1 代码实现思路

    • 网络接口的使用

    刚开始学习如何使用接口时,画了下面这张流程图,开始写代 码时发现其中还是有一些不一样的,但大体也还是这么实现的。(流程图未修改)

    • 具体代码

    由于最终是使用微信小程序来实现整个游戏的运行,为了展示的方便,我们用C++写了个文字版的猪尾巴小游戏(未加入在线功能,但预留了函数),具体功能与微信小程序类似。下面会结合两者的代码进行分析。
    (1)代码中的类可分为牌堆类、放置区类、玩家类,都是用于存储牌库、各花色牌数量等信息提供给各函数使用

    class PaiDui	//牌堆类
    {
    public:
    	int poker[52] = { 0 };	//牌堆牌序 0:无牌;1~13:黑桃A~K;14~26:红桃A~K;27~39:梅花A~K;40~52:方片A~K
    	int top = 0;			//牌顶当前位置
    	int heitao = 13;		//各花色数量
    	int hongtao = 13;
    	int meihua = 13;
    	int fangpian = 13;
    	void create();			//创建随机牌堆
    };
    class FangZhiQU	//放置区类
    {
    public:
    	stack<int> card;
    	stack<int> decor;	//花色  1: 黑桃  2:红桃  3:梅花  4:方片
    };
    class WanJia	//玩家类
    {
    public:
    	stack<int> heitao;		//黑桃
    	stack<int> hongtao;		//红桃
    	stack<int> meihua;		//梅花
    	stack<int> fangpian;	//方片
    	int total()				//手牌总数
    	{
    		return heitao.size() + hongtao.size() + meihua.size() + fangpian.size();
    	}
    };
    

    (2)Ai的实现思路为记录抽牌、打黑桃、打红桃、打梅花、打方片5种操作的得分,通过有着不同权重的策略改变每种操作的得分,最终选择得分最高的操作。通过测试不同策略互相对战的胜率,增删改不同策略的权重,得出不同的分数比例(在C++文字版中实现)。本来想的是用这个得分作为博弈树的评估值,但最终没写出来,小程序中只能用最基础的了。

    int Ai(WanJia& me, WanJia& you, FangZhiQU& fangzhiqu, PaiDui& paidui, int rule)		//Ai操作选择  rule表示使用什么策略  0:所有; 1:牌堆数量; 2:对手手牌数量; 3:放置区顶牌 
    { 
    	int score[5] = { 0 };	//5种操作的得分 0:从牌堆中抽取  1: 打出黑桃  2:打出红桃  3:打出梅花  4:打出方片
    
    	//计算分数
    	if (rule == 0)
    	{
    		Update_1(me, you, fangzhiqu, paidui, score);
    		Update_2(me, you, fangzhiqu, paidui, score);
    		Update_3(me, you, fangzhiqu, paidui, score);
    	}
    	else if (rule == 1)
    		Update_1(me, you, fangzhiqu, paidui, score);
    	else if (rule == 2)
    		Update_2(me, you, fangzhiqu, paidui, score);
    	else if (rule == 3)
    		Update_3(me, you, fangzhiqu, paidui, score);
    
    	//选择操作
    	int max = score[0];
    	int operation = 0;
    	for (int i = 0; i < 5; i++)
    	{
    		if (score[i] > max)
    		{
    			operation = i;
    			max = score[i];
    		}
    	}
    
    	return operation;
    }
    

    (3)关于操作的执行,我们也将其进行了拆分,真人和AI只要提供操作的类型就可以了,操作的实现是一致的,也便于后期维护。

    (4)性能分析

    2.2 Github的代码签入记录

    2.3 遇到的代码模块异常或结对困难及解决方法。

    (1)困难描述:程序总是报错,但由于代码未分块和没有好的备注习惯,导致找不到错在哪。
    (2)解决过程:一开始没办法只能一行行看,在关键位置写一些输出,慢慢看控制台,最终发现居然是复制黏贴变量名未改,两个人的讨论也是很重要的解决办法。
    (3)有何收获:优化了代码里的备注,加了许多新的备注,不然过几天就不知道自己写了啥了。将代码进行了功能的划分,调用、维护起来也容易。

    2.4 队友评价

    赵文涛

    (1)值得学习的地方

    队友的学习能力和积极性是我望尘莫及的,这次的微信小程序的编码也都是他完成的,积极性方面要向他学习,不能不到dl不学习

    (2)需要改进的地方

    写代码没有一个总的思路,想到哪写到哪,导致后期测试的时候十分痛苦,出错也找不到错在哪。

    杨寓荃

    (1)值得学习的地方

    队友真的是太给力了,高效爆肝让低效爆肝的我羞愧得无地自容,同时拒绝摆烂将在线ai进度推进到ddl前夕

    (2)需要改进的地方

    由于我俩都是ddl型选手,在ddl前是真滴给我带上了面具。

    2.4 提供此次结对作业的PSP和学习进度条

    • PSP表格
    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    · Estimate · 估计这个任务需要多少时间 30 30
    Development 开发
    · Analysis · 需求分析 (包括学习新技术) 900 1200
    · Design Spec · 生成设计文档 120 150
    · Design Review · 设计复审 20 20
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 20
    · Design · 具体设计 60 100
    · Coding · 具体编码 1500 3000
    · Code Review · 代码复审 120 300
    · Test · 测试(自我测试,修改代码,提交修改) 300 600
    Reporting 报告
    · Test Repor · 测试报告 60 60
    · Size Measurement · 计算工作量 10 15
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 60
    · 合计 3210 5555
    • 学习进度条
    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 5 5 理解了题目要求,思考了实现方式,分配了任务
    2 0 0 10 15 考虑了游戏运行逻辑,设计了原型,学习了HTML+CSS+JS
    3 1000 1000 25 40 初步实现了界面开发与人人对战功能,学习了如何开发微信小程序
    4 2500 3500 50 90 开发了人机对战,对网络接口的使用有了一定的了解,试着开发了在线模式

    三、心得


    赵文涛

    这次结对编程教会了我选一个好队友的重要性,真是大佬带我飞!因为在学js时,队友已经开始开发微信小程序了,导致我直接摆烂,最终小程序的开发都是队友完成的,我只能做些思路设计的工作,闲着无聊还想用C++写一个,但能力有限做不成图形界面,在线也做不了,白白查了几个小时,学到的东西不知道为什么又用不来。只能说前面玩的爽,后面熬的爽,基本每天都没睡多久,中间还要弄团队项目的事情,导致现在整个人都不好了。但是每天想打开游戏就有一种负罪感,导致我不玩游戏不行的生活习惯改变了,哈哈哈。还好能看懂代码,能帮忙查了下错,也算是尽到自己的一份力了,未来要更加努力才行呀。

    杨寓荃

    看到作业的时候我就感觉心态崩了,这是一个我之前完全没有接触过的项目, 根本不知该如何下手。好在隔壁班结对作业较早截止,让我感受到了小程序的能力,于是乎开始了猪尾巴小程序之旅。前几个星期主要是学习js,html,css,学习的时候自我感觉良好,然而上手之后就被自己折磨到,小程序中window对象,一些方法使用不了,html和css做出各种畸形页面,在线对战举步维艰,ai设计更是无从下手,最后人机对战可以简单的实现,但由于单机对战和在线对战本地数据不同,在线托管还无法进行。虽然这次作业做得不是很完整,但是也学到了很多东西,跟着kx老师果真是又快乐又痛苦啊!!

  • 相关阅读:
    コナン純黒のナイトメア20180715
    コナン純黒のナイトメア20180630
    コナン純黒のナイトメア20180629
    コナン純黒のナイトメア20180623
    コナン純黒のナイトメア20180622
    コナン純黒のナイトメア20180616
    コナン純黒のナイトメア20180613
    コナン純黒のナイトメア20180611
    单词乱记 20180607
    五周突破日语能力考试 单词5-2
  • 原文地址:https://www.cnblogs.com/Blusher/p/15451030.html
Copyright © 2011-2022 走看看