一道简单的“小猫钓鱼”游戏算法

您所在的位置:网站首页 扑克牌两人游戏 一道简单的“小猫钓鱼”游戏算法

一道简单的“小猫钓鱼”游戏算法

2024-07-12 09:04:33| 来源: 网络整理| 查看: 265

“小猫钓鱼”纸牌游戏规则描述

将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(*——*这不就是作者小时候喜欢玩的“接火车”游戏么)

几个注意的地方 两个队列、一个栈分别用来模拟两个人手中的牌以及桌子上的牌一个标记数组book[10],因为假设扑克牌只有0-9之间的数字,巧妙的利用数组下标这里没有考虑:游戏能否结束。这个不是本算法的侧重点为了更清晰的表达思路,A、B出牌部分的代码没有重构 代码 package others; import java.util.Queue; import java.util.Stack; import java.util.concurrent.LinkedBlockingQueue; /** * 小猫钓鱼纸牌游戏 *游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的 *第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌 *的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可 *将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人 *手中的牌全部出完时,游戏结束,对手获胜。 * @author XZP * */ public class CatFish { public static void main(String[] args) { Queue queueA = new LinkedBlockingQueue(); Queue queueB = new LinkedBlockingQueue(); // 测试数据 queueA.add(2); queueA.add(4); queueA.add(1); queueA.add(2); queueA.add(5); queueA.add(6); queueB.add(3); queueB.add(1); queueB.add(3); queueB.add(5); queueB.add(6); queueB.add(4); judgeWhoWin(queueA, queueB); } public static void judgeWhoWin(Queue QA, Queue QB) { Stack desk = new Stack(); // 模拟桌子 int tempA, tempB, tempTop; int[] book = new int[10]; // 用于标记桌子上是否有该牌面的标记数组 while (!QA.isEmpty() && !QB.isEmpty()) { // 首先A开始出牌 tempA = QA.poll(); // 桌子上有同tempA牌面相同的 if (book[tempA] > 0) { // 有就取走放队尾并将标志位-1 book[tempA]--; QA.add(tempA); tempTop = desk.pop(); while (tempTop != tempA) { book[tempTop]--; QA.add(tempTop); tempTop = desk.pop(); } QA.add(tempTop); } else { // 没有就直接入栈,并将标记位+1 desk.push(tempA); book[tempA]++; } // 轮到B出牌 tempB = QB.poll(); // 桌子上有同tempB牌面相同的 if (book[tempB] > 0) { // 有就取走放队尾并将标志位-1 book[tempB]--; QB.add(tempB); tempTop = desk.pop(); while (tempTop != tempB) { book[tempTop]--; QB.add(tempTop); tempTop = desk.pop(); } QB.add(tempTop); } else { // 没有就直接入栈,并将标记位+1 desk.push(tempB); book[tempB]++; } } if (QA.isEmpty()) { System.out.println("A player won! B手中的牌是:"); System.out.println(QB); } else if (QB.isEmpty()) { System.out.println("B player won! A手中的牌是:"); System.out.println(QA); } else { System.out.println("no player won!"); } } }


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭