评论

收藏

[Java] java实现纸牌游戏之小猫钓鱼算法

编程语言 编程语言 发布于:2021-10-05 21:11 | 阅读数:599 | 评论:0

这篇文章主要为大家详细介绍了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<integer> a = new linkedlist<integer>();//a手中的牌
 linkedlist<integer> b = new linkedlist<integer>();//b手中的牌
 stack<integer> 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家
原文链接:https://blog.csdn.net/qq_24046745/article/details/52723671

关注下面的标签,发现更多相似文章