java实现小猫钓鱼游戏
作者:EchoZYK 发布时间:2021-10-10 19:59:48
标签:java,小猫钓鱼,游戏
题目要求:
两人比赛,A,B,每人最开始分得6张手牌,手牌大小为从1到9
A先出牌,B后出牌,若出牌在桌面上存在,在出牌人获得两张相同牌中间的所有牌(包括两张相同牌),放入出牌人手中。
最后谁手中无牌判为负
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
/**
* 模拟实现两人玩小猫钓鱼游戏
* 判断谁先出完谁获胜
* @author zyk
*
*/
public class PlayGame {
public static void main(String[] args) {
Stack<Integer> deskStack = new Stack<>();//桌子上的牌,用栈进行管理
Queue<Integer> playerA = new LinkedList();//用队列管理每个选手的牌
Queue<Integer> playerB = new LinkedList();
int book[] = new int[10];
Scanner scanner = new Scanner(System.in);
//发牌,每人6张
for (int i = 0; i < 6; i++) {
playerA.add(scanner.nextInt());
}
for (int i = 0; i < 6; i++) {
playerB.add(scanner.nextInt());
}
//当两个队列都不为空,表示游戏没有结束
while (!playerA.isEmpty() && !playerB.isEmpty()) {
int ta = playerA.peek();//A出一张牌
//判断A出的牌能不能赢牌
if (book[ta] == 0) {//桌子上没有这张牌
//A不能赢牌
playerA.remove();//打出的牌出队列
deskStack.add(ta);//打出的牌入栈
book[ta]=1;//标记打出的牌出现在桌子上
}else {//A能赢牌
playerA.remove();//打出的牌出队列
playerA.add(ta);//打出的牌入队列
while (deskStack.lastElement()!=ta) {
book[deskStack.lastElement()] = 0;
playerA.add(deskStack.lastElement());
deskStack.pop();
}
}
int tb = playerB.peek();//B出一张牌
//判断B出的牌能不能赢牌
if (book[tb] == 0) {//桌子上没有这张牌
//B不能赢牌
playerB.remove();//打出的牌出队列
deskStack.add(tb);//打出的牌入栈
book[tb]=1;//标记打出的牌出现在桌子上
}else {//B能赢牌
playerB.remove();//打出的牌出队列
playerB.add(tb);//打出的牌入队列
while (deskStack.lastElement()!=tb) {
book[deskStack.lastElement()] = 0;
playerB.add(deskStack.lastElement());
deskStack.pop();
}
}
}
if (playerA.isEmpty()) {
System.out.println("B赢了");
System.out.print("B手中的牌为:");
while (!playerB.isEmpty()) {
System.out.print(playerB.peek()+" ");
playerB.remove();
}
}else {
System.out.println("A赢了");
System.out.print("A手中的牌为:");
while (!playerA.isEmpty()) {
System.out.print(playerA.peek()+" ");
playerA.remove();
}
}
System.out.println("");
System.out.print("桌子上的牌为:");
while (!deskStack.isEmpty()) {
System.out.print(deskStack.lastElement()+" ");
deskStack.pop();
}
}
}
实例:
输入:
2 4 1 2 5 6
3 1 3 5 6 4输出:
A赢了
A手中的牌为:5 6 2 3 1 4 6 5
参考: 《啊哈算法》第二章 栈,队列,链表
来源:https://blog.csdn.net/u011896903/article/details/52015166
0
投稿
猜你喜欢
- java web返回中文乱码ajax返回中文乱码问题 在浏览器按F12查看数据包可以看到charset为 iso-8859-1,这是spri
- 实例如下:import java.util.concurrent.CountDownLatch;import java.util.concu
- 本文要实现的是在 android 8.0 的平台上,蓝牙遥控器与TV自动配对,具体就是在TV端打开配对界面,TV端开始搜索远程蓝牙设备,按下
- 持久层的那些事什么是 JDBCJDBC(JavaDataBase Connectivity)就是 Java 数据库连接, 说的直白点就是 使
- FeignClient发送post请求异常这个问题其实很基础。但是却难倒了我。记录一下在发送post请求的时候要指定消息格式正确的写法是这样
- 本文实例为大家分享了unity实现虚拟摇杆控的具体代码,供大家参考,具体内容如下using UnityEngine;using UnityE
- 前言现在很多web应用,做过web项目的童鞋都知道,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过
- 介绍死信队列:没有被及时消费的消息存放的队列,消息没有被及时消费有以下几点原因:1.有消息被拒绝(basic.reject/ basic.n
- 本文主要为大家分享了MyEclipse中安装使用Maven的方法,供大家参考,具体内容如下Step1:下载mavenhttp://maven
- 目前很多业务使用微服务架构,服务模块划分有这2种方式:服务功能划分业务划分不管哪种方式,一次接口调用都需要多个服务协同完成,其中一个服务出现
- 0.前言HashMap简述:HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。H
- 获取resources文件路径背景在SpringBoot项目中,需要获取resources文件的路径,网上找了好多文章都不行,后面还是结合官
- 01.点明观点C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放,并且代
- 我们知道 Spring Boot 已经提供了一套默认的异常处理机制,但是 Spring Boot 提供的默认异常处理机制却并不一定适合我们实
- 又遇到了回调函数,这次打算写下来分享一下。所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数
- 常用的对数组进行的操作1、求数组中最大值,最小值思路:假设下标为0的元素是最大值,遍历数组,依次跟max进行比较,如果有元素比这个max还大
- 五子棋游戏(Java),供大家参考,具体内容如下思路:1.首先创建一个棋盘,建立一个二维数组,此文中为一个15*15的二维数组,2.初始化棋
- 一、啥是Fluent-Mybatis与Mybatis-Plus类似,是对Mybaits进一步的封装,使之语法简洁明了,更重要的是不需要在自主
- 一、内部类1.内部类的概念内部类是定义在类中的类。内部类把逻辑上相关的类放在一起。而有的内部类不会在其他地方用到,它没有类名,在定义的时候就
- 具体效果如下图所示:方法一方法二产生这种问题的原因是因为moudles.xml中没有找到对应的moudle。加入对应的moudle即可,修改