《小丑牌》游戏在Java上进行的模仿
突发奇想想写一个小游戏看了看按我目前的水平能写出来的打牌类算是能巩固我目前所学的方向。注我们当时是6个人来做本人负责的是架构与出牌弃牌操作其他都是同伴写的1.先把小丑牌的规则与想要实现的方向按文档写出来就可以得到一张原型图与需求文案。原型图的链接 摹客RP? 、需求文案就2.有了原型图与需求文案后就可以写出来一个框架了我使用的项目结构是按特殊牌型handrank类model数据层service服务层view来写的。1特殊牌型用对象思想枚举map来写先用枚举定义牌的类型再将牌型与点数倍率进行key-value一一配对现在就得到了全部特殊牌型的点数与倍率的静态块.2然后是model层按牌牌堆玩家小丑牌的层次来写都是同层的对象后面发现牌堆可以合并到牌里小丑牌与牌可以共同继承一个父类其中牌堆按工具类写玩家类牌类正常写小丑牌同特殊牌型一样用枚举map来写。2.1牌堆里用ArrayList来创建了一个全牌堆一个弃牌堆其实是缓存区专门为了点数计算与出牌弃牌操作好写然后按原型图里的对牌操作来一个个定义工具方法像些什么牌堆初始化生成52张标准扑克牌洗牌随机打乱牌堆顺序从牌堆抽取指定数量的牌(因为已经洗了牌可以直接输出前八个值)将多张卡牌放入弃牌堆当牌堆为空时从弃牌堆重新洗牌补充牌堆等轮子。2.2玩家类有当前关卡累计得分本关目标分数剩余出牌次数剩余弃牌次数手牌装备牌集合。牌类有花色点数数值是否选中。来定义成员变量再构造get与set要写的方法就有添加手牌到玩家手牌集合移除玩家选中的手牌获取玩家当前选中的所有手牌清除所有手牌的选中状态判断玩家是否还有出牌弃牌次数装备小丑牌。都是使用对ArrayList的增删查改简单使用2.3小丑牌同特殊牌型一样用枚举map来写.3service层的工具方法有大初始化小初始化判断是否胜利判断是否为特殊关卡生成目标分数识别牌型并计算得分重点生成小丑牌选项应用小丑牌效果。3.1大初始化小初始化判断是否胜利判断是否为特殊关卡生成目标分数生成小丑牌选项应用小丑牌效果。其中初始化的有重置玩家分数、出牌次数(4)、弃牌次数(4) 重新初始化牌堆并洗牌3. 发8张手牌给玩家 4. 生成当前关卡目标分数5. 清空玩家道具如果是新游戏。大于小的区别就是关卡数1小丑牌保留。判断是否胜利判断是否为特殊关卡都是if就行生成目标分数是按一个简单函数输出。生成小丑牌选项应用小丑牌效果按小丑牌类里的map来输出。3.2识别牌型并计算得分1.要识别弃牌区里的牌是否符合规则里的特殊牌型要先判断是否为集合长度为5的集合是就继续判断什么牌型否就按高牌进行计算进行判断的话是先按皇家同花顺 同花顺 四条 葫芦 同花 顺子 三条 两对 一对来2.判断完后score (chips handPoints) * handMultiplier的公式来计算chips有效卡牌点数总和、handPoints牌型基础分配置化、handMultiplier牌型倍率配置化4view层是按主循环主菜单界面显示规则显示团队信息游戏进行界面胜利界面失败界面手牌展示界面显示弃牌次数出牌次数显示弃牌区出牌区出牌操作重点弃牌操作重点卡牌选择界面显示小丑牌小丑牌选择界面。4.1主菜单界面显示规则显示团队信息游戏进行界面胜利界面失败界面手牌展示界面显示弃牌次数出牌次数显示弃牌区出牌区卡牌选择界面显示小丑牌都是简单的sout打印。4.2出牌操作弃牌操作出牌操作弃牌操作是同一操作的不同操作形态所以写一次方法就可以了后面发现不是同一操作的不同操作形态只是操作类似当时写的工具太分细了不好改1.先对玩家输入进行格式清除把空格逗号等常见的区分符号进行去除比如“1 23”分成“123”的字符串再将字符串按char分就拆成‘1’‘2’‘3’格式.2.将输入的数字进行-1操作把输入与索引一一配对修改对应集合下的数字的选中状态输入一个数字一次为选中输入两次为不选中并再对应数组后打✓或不✓操作。3.把上面输入操作进行异常化处理把输入字符‘c’与‘q’时作为确认与取消操作在确认操作之前还要加判断弃牌堆里是否有牌无牌就操作失败。后面时在调用service层里的点数计算model层里的各种工具类就可以把出弃牌操作写完。3。关于本次模仿项目一开始其实就想写一个类似于小丑牌本体游戏的全栈效果。我们组里有人会写前端的只不过他没有参加其中像什么sring等图形化我们小组又绝大多数人不会只好退而求其次写Java控制台小游戏而对于本次项目个人最大的感受就是一个架构一份原型图一份需求文档的重要性由于之前都是想到什么就写什么不做任何规划就导致我本人之前抄的什么电商系统之类的只是徒有其表离了视频ai就完全不懂了自己一开始就没有好好的去认真巩固知识而这次就比之前好了很多重新学了以后牢固很多对一个项目的核心难点是什么怎么和组员沟通有了很大的进步。总之是受益匪浅合集: Java自学