java如何实现纸牌游戏之小猫钓鱼算法

发布时间:2020-07-30 14:50:48

来源:亿速云

阅读:57

作者:小猪

这篇文章主要为大家展示了java如何实现纸牌游戏之小猫钓鱼算法,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。

假如游戏开始时,小哼手中有 6 张牌,顺序为 2 4 1 2 5 6,小哈手中也有 6 张牌,顺序为 3 1 3 5 6 4,最终谁会获胜呢?现在你可以拿出纸牌来试一试。接下来请你写一个程序来自动判断谁将获胜。这里我们做一个约定,小哼和小哈手中牌的牌面只有 1~9。

输入2 4 1 2 5 6

3 1 3 5 6 4

输出小哼win

小哼当前手中的牌是 5 6 2 3 1 4 6 5 桌上的牌是 2 1 3 4

这道题目完全考察栈跟队列的应用,桌面上的牌是栈,个人手中的牌是队列。

附上JAVA实现的源码:

import java.util.LinkedList;

import java.util.Scanner;

import java.util.Stack;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

LinkedList a = new LinkedList();//A手中的牌

LinkedList b = new LinkedList();//B手中的牌

Stack stack = new Stack<>();//记录桌面上的牌

int[] book = new int[10];//用来标记哪些牌已经在桌上

int n,t,s;

for(int i = 0; i < 10; i++){

book[i] = 0;

}

System.out.println("输入手中牌的个数");

n = scanner.nextInt();

System.out.println("输入A君手中牌的大小");

for(int i = 1; i<=n; i++){

a.addLast(scanner.nextInt());

}

System.out.println("输入B君手中牌的大小");

for(int i = 1; i<=n; i++){

b.addLast(scanner.nextInt());

}

System.out.println("输入完毕开始游戏");

while (!a.isEmpty() && !b.isEmpty()) {//当有人手中没牌游戏结束

t = a.removeFirst();

if (book[t] == 0) {//A没有赢

stack.push(t);//桌面上加一张牌

book[t] = 1;//记录桌面上已经有这张牌了

}else {//A赢了

a.addLast(t);//将打出的牌到到末尾

while (!stack.peek().equals(t)) {//将桌面上的牌按顺序放到A的末尾

s = stack.pop();

a.addLast(s);

book[s] = 0;

}

}

//同上B取出牌

t = b.removeFirst();

if (book[t] == 0) {

stack.push(t);

book[t] = 1;

} else {

b.addLast(t);

while (!stack.peek().equals(t)) {

s = stack.pop();

b.addLast(s);

book[s]= 0;

}

}

}

if (!a.isEmpty()) {//A胜利

System.out.println("A君胜利!A手中的牌是");

while (!a.isEmpty()) {

System.out.print(a.removeFirst()+ " ");

}

System.out.println();

if (!stack.isEmpty()) {//桌面上有牌

System.out.println("桌面上的牌是");

for (Integer x : stack) {

System.out.print(x + " ");

}

} else {

System.out.println("桌面没有牌了");

}

} else {//B胜利

System.out.println("B君胜利!B手中的牌是");

while (!b.isEmpty()) {

System.out.print(b.removeFirst()+ " ");

}

System.out.println();

if (!stack.isEmpty()) {//桌面上有牌

System.out.println("桌面上的牌是");

for (Integer x : stack) {

System.out.print(x + " ");

}

} else {

System.out.println("桌面没有牌了");

}

}

return;//结束

}

}

结果:输入手中牌的个数

6

输入A君手中牌的大小

2 4 1 2 5 6

输入B君手中牌的大小

3 1 3 5 6 4

输入完毕开始游戏

A君胜利!A手中的牌是

5 6 2 3 1 4 6 5

桌面上的牌是

2 1 3 4

以上就是关于java如何实现纸牌游戏之小猫钓鱼算法的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。

JAVA钓鱼游戏_java如何实现纸牌游戏之小猫钓鱼算法相关推荐

  1. java中的纸牌游戏_JAVA课程设计纸牌游戏

    <JAVA课程设计纸牌游戏>由会员分享,可在线阅读,更多相关<JAVA课程设计纸牌游戏(16页珍藏版)>请在人人文库网上搜索. 1.一.问题分析和任务定义1.题目:纸牌游戏:编 ...

  2. 蜘蛛纸牌 java代码_java实现蜘蛛纸牌游戏

    [实例简介] 用java技术实现windows自带的蜘蛛纸牌游戏 [实例截图] [核心代码] CardsGame └── CardsGame ├── bin │   └── com │   └── g ...

  3. java 拼图游戏_Java学员作品-拼图游戏

    由于大多数的手机都内置了Java的运行环境,加上Java语言自身的跨平台特性,Java成为了编写手机游戏时最常使用的语言之一. 拼图游戏很多人都玩过,它的游戏规则是将图片进行分割,然后将顺序打乱,要求 ...

  4. java d打字游戏_java实现快速打字游戏

    本文实例为大家分享了java实现打字游戏的具体代码,供大家参考,具体内容如下 import java.util.Random; import java.util.Scanner; public cla ...

  5. 蜘蛛纸牌java注释_自己摸索的纸牌游戏代码,感觉还有很多知识不懂,任重道远啊!...

    package com.poker; /* * 定义一个纸牌的实体类 */ public class Poker implements Comparable{ String color ;//定义花色 ...

  6. java扫雷教程_java实现简单扫雷游戏

    本文实例为大家分享了java实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 package com.test.swing; import java.awt.event.ActionEvent; ...

  7. 用java雷电游戏_Java实现仿雷电游戏

    [实例简介]Java实现仿雷电游戏 [实例截图] [核心代码] package cqu; import java.awt.BorderLayout; import javax.swing.JFrame ...

  8. java applet 游戏_Java Applet实现五子棋游戏

    从谷歌的AlphaGo到腾讯的绝艺,从人脸识别到无人驾驶,从谷歌眼镜到VR的兴起,人工智能领域在不断的向前迈进,也在不断深入的探索.但背后错综复杂的技术和利益成本也是很多企业亟待解决的难题.对于人工智 ...

  9. java 扫雷游戏_java的扫雷小游戏(超简单)

    这学期的专业选修课选了java,由于之前已经学过了C++,数据结构和操作系统的原因吧!所以感觉上手还是比较容易的-- 于是,实验课老师并没有要求那样一次次的做实验交实验报告,而是在最后一次实验课上,利 ...

  10. java赛马游戏_Java小程序赛马游戏实现过程详解

    这是当时做的一个小游戏,大概就是程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有 ...

最新文章

  1. openStack 租户控制台修改虚拟机账户密码
  2. java中ThreadPool的介绍和使用
  3. LeetCode 39. 组合总和(排列组合 回溯)
  4. ajax正确返回数据,却进入了error分支
  5. 百度自动驾驶出租车服务在北京开放:无需预约免费试乘
  6. F - Wormholes(判断是否存在负环)
  7. Sublime Text3插件管理
  8. 联想万全服务器系列,联想服务器万全系列慧眼高级版操作快速入门
  9. ITSS服务管理体系建立流程(四个阶段)附:广东软件行业协会ITSS评估
  10. html设置线条颜色渐变,CSS3 - 设置渐变颜色背景,线性/放射性/循环(附在线渐变生成工具)...
  11. PCB多层电路板终于不再神秘
  12. VMware虚拟机中安装的系统共享主机无线网络的方法
  13. leetcode174.地下城游戏
  14. 爬梯:MongoDB入门到高级到SpringBoot-API
  15. 描写油菜花的好句好段
  16. Redis中的Lua脚本怎么玩
  17. 2021J - Circular Billiard Table
  18. 物联网ARM开发- 5协议 FSMC控制器外扩SRAM存储器
  19. Android编程红外编程——红外码详析
  20. 雨落竹轩(来自好友)

热门文章

  1. 教你炒股票24:MACD对背弛的辅助判断
  2. 计算机一级用写在简历里面吗,写简历要小心,简历填写最忌讳的是什么,你知道吗?...
  3. UE4相机贴图,屏幕标注
  4. openwrt 格式化_OpenWRT上进行EXT4格式化和内容写入
  5. 【每天学一点】如何高效工作,进行项目管理
  6. 花生壳内网穿透图文教程
  7. 单总体分布卡方拟合优度检验
  8. promise执行顺序总结
  9. 微信小程序内置在线客服
  10. oracle匹配excel数据,ORACLE与excel的数据互传方法