结对编程作业
https://github.com/YahAHaCH/pigtail
| 姓名 | 分工 | 博客链接 |
|---|---|---|
| 洪磊 | 原型设计、游戏逻辑、AI算法 | https://www.cnblogs.com/YahAHaCH/p/15456220.html |
| 张伟鹏 | 前端设计 | https://www.cnblogs.com/zhangweipeng/p/15456224.html |
一、原型设计
原型开发工具:Axure Rp8
设计说明
- 游戏分为三个界面,开始界面,大厅界面和游戏界面
(1)开始界面
开始界面由一个游戏标题和三个游戏模式按键组成,分为人机对战、本地人人对战、联网对战三种模式
![]()
若在开始界面选择人机对战或者本地人人对战,则直接进入游戏界面;若选择联网对战,则弹出登录窗口,登陆成功后进入大厅界面
![]()
(2)游戏界面

对游戏逻辑进行分析,游戏界面分为一下区域:牌库、放置区、双方手牌、用户个人信息、托管按钮和设置按钮。将游戏的每张扑克牌设置为四种状态,位于牌库、放置区或双方手牌,当满足手牌移动到另一区域的条件时,切换卡牌的状态,置入其对应的区域。左下方设有托管按钮,点击后切换为人机操作,右上角为设置按钮,点击后弹出设置窗口,可以返回大厅或结束游戏。

遇到的困难和解决办法
(1)一开始不熟悉软件的使用,导致很多功能很难实现,页面内弹出窗口的设计较为麻烦,直接使用弹出窗口会弹出一个奇怪的页面
(2)熟悉软件后,使用动态面板代替弹出窗口,避免页面内弹出窗口信息不完全的问题,解决需求。
(3)通过此次原型设计,学会了需求分析、构想页面、开发原型设计出页面。熟悉了软工开发的流程,对Axure Rp等原型开发工具的使用更为熟练
二、原型设计实现
代码实现思路
从模式拆分为三个不同的模块
-
联网对战
-
人机对战
-
本地人人对战
游戏抽象出五个类,分别为牌堆、放置区、用户、卡牌、对局,以下代码展示游戏的核心逻辑
class Game
{
public:
int op;//表示游戏类型是人人还是人机
Pile pile;
Deck deck;
Player player1,player2;
Game(int x){op=x;}
bool Check_end()
{
if(deck.Empty())return true;
return false;
}
void One_turn(int who)//who表示执行这一回合的玩家编号
{
int op;//标识进行何种操作,0~3表示打出对应花色的牌,4表示抽取牌堆的牌
Player now;if(who==1)now=player1; else if(who==2)now=player2; else puts("fuck!!!!"); //请求now这一回合进行的操作 Card top//这一轮将要发到放置区牌堆顶的卡牌 if(op==4) top=deck.Draw(); else top=now.Play(op); //检测即将发到放置区的卡牌和放置区顶部的卡牌花色是否相同 if(pile.Check_top(top)) { who.Eat(top); while(!pile.Empty())who.Eat(pile.Pop_top()); } else { pile.Push_top(top); } } void Run_a_game() { int turn_count=0,now=1;//计算已经操作的回合数和现在操作的玩家编号 while(true) { ++turn_count; One_turn(now); if(Check_end()) { if(player1.cnt==player2.cnt)printf("Tie %d %d\n",player1.cnt,player2.cnt); else if(player1.cnt>player2.cnt)printf("Player1 win! %d %d\n",player1.cnt,player2.cnt); else if(player1.cnt<player2.cnt)printf("Player2 win! %d %d\n",player1.cnt,player2.cnt); else printf("fuck!!!!!!!!"); } now^=3; } }
};
由于游戏中除了牌堆顺序的其余所有信息在游戏过程中是公开的,故也不隐藏玩家手牌,人机对战则将人人对战中其中一个玩家替换成AI,请求AI进行的操作
遇到的代码模块异常
游戏逻辑开发时碰到一些游戏逻辑错误,导致后续测试AI等多个步骤收到了错误的结果,经过了长时间的查错终于发现是牌堆类Pile中的函数编写有误
评价你的队友
z_w_p:一个认真负责的队友,有很强的的代码能力,自己把后端的所有算法给包揽下来,对我也提供了很大的帮助。很高兴能与他组队一起完成这个作业。
YahAHa:队友很愿意学习新东西,其实我们两个都不熟悉前端开发,他主动去学习了前端的技术
三、心得
难度方面:这一次的作业其实从游戏到实现都没有什么特别的难度,没有特别困难或需要算法的地方,但是有许多需要学习的技术和知识,收获了不少
感想:终于在作业中体验了一次完整的软工开发流程,感觉自己对软工也有更全面的理解,但是明白以后决不能在ddl之前赶工了
对之后的启发:之后想要尝试前端更进阶一些的东西,把前端做的更好,通过和队友的合作也感到了和别人合作开发的感觉,这次也学到了很多前端和接口的基础知识,希望之后也能自己做些自己想做的项目,把功能做的更完善,把UI做的更好



浙公网安备 33010602011771号