Java实现简单扑克牌游戏_javafx随机抽扑克牌csdn-程序员宅基地

技术标签: 笔记  java  

扑克牌小游戏:
游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:,,,。牌的大小为从1~13。(此处为了简单,只取1 -5).

1.黑桃A在哪名玩家手中,哪名玩家就获胜。

package poker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
public class Game {
    
 public static void main(String[] args) {
    
        //定义5名玩家,使用List
        List<Player> playerList=new ArrayList<>();
        playerList.add(new Player("于美人"));
        playerList.add(new Player("小婷子"));
        playerList.add(new Player("小晨子"));
        playerList.add(new Player("小艾"));
        playerList.add(new Player("小珍子"));
        //定义扑克牌顺序表
        List<Card> cardList=new ArrayList<>();
        //初始化扑克牌
        initializeCards(cardList);
        System.out.println(cardList);
        //调用collections下的shuffle(洗牌)方法
        //进行洗牌
        Collections.shuffle(cardList);
        //System.out.println("抽牌前,牌组中的牌:");
        System.out.println(cardList);
        //发牌
        int n=2;//每名玩家发几张牌
        for(int i=0;i<n;i++){
    //一共发n轮牌
            for(Player player:playerList){
    //每名玩家一次抽牌
                Card card=cardList.remove(0);//从牌组中,抽一张牌出来
                player.cardList.add(card);//把这张牌放到当前玩家的手中
            }
        }
        System.out.println("现在牌组中剩余的牌:");
        System.out.println(cardList);
        System.out.println("交换牌之前:");
      for(Player player:playerList){
    
            System.out.printf("玩家[%s]的手牌是: %s%n",player.name,player.cardList);
        }
        //要找的牌,方法1
        Card toFoundCard=new Card("",1);
        for(Player player:playerList){
    
            for(Card card:player.cardList){
    
                //比较每张牌和要找的是否为同一张牌
                if(card.equals(toFoundCard)){
    
                    System.out.println(player.name+"获胜");
                    return;
                }
            }
        }
        System.out.println("无人获胜");
 }
 //要找的牌,方法2
        Card toFoundCard2=new Card("",1);
       for(Player player:playerList){
    
            if(player.cardList.contains(toFoundCard)) {
    
                System.out.println(player.name + "获胜");
                return;
            }
          }
    private static void initializeCards(List<Card> cards){
    
        for(String suit:new String[]{
    "","","",""}){
    
            for(int rank=1;rank<=5;rank++){
    
                Card card=new Card(suit,rank);
                //把扑克牌放入牌组中
                cards.add(card);
            }
        }
    }

2.让每名玩家,依次抽取他的下家的一张手牌,然后再找A,找到A就获胜。

//添加打印手牌的方法
public static void printPlayerHandCard(List<Player> playerList){
    
        for(Player player:playerList){
    
            System.out.printf("玩家[%s]的手牌是:%s%n",player.name,player.cardList);
        }
    }
    //集体实现交换的过程
         //交换牌
        //每名玩家随机抽取下家的一张牌
        Random random=new Random();
        for(int i=0;i<playerList.size();i++){
    
            Player currentPlayer=playerList.get(i);
            //下家就是按照前后关系的下一个,最后一名玩家抽取第0个
            Player nextPlayer=playerList.get(i!=playerList.size()-1?i+1:0);

            //要取的牌的下标
            int toDrawIndex=random.nextInt(nextPlayer.cardList.size());
            //取牌
            Card drawCard=nextPlayer.cardList.remove(toDrawIndex);
            //放入当前玩家的手中
            currentPlayer.cardList.add(drawCard);

        }
        System.out.println("交换牌之后:");
        printPlayerHandCard(playerList);


3.于美人是赌神,她有变牌能力:她手中一旦没有A,她就可以把第一张牌变成A。(交换牌之前,有机会变一次;交换牌之后,有机会变一次)

Card toFoundCard=new Card("",1);
        //已知于美人的下标为0
        Player 于美人=playerList.get(0);
        if(!于美人.cardList.contains(toFoundCard)){
    
            于美人.cardList.set(0,toFoundCard);
        }
        System.out.println("于美人第一次发功:");
        printPlayerHandCard(playerList);
        System.out.println("交换牌之后:");
        printPlayerHandCard(playerList);
        //此处交换牌过程省略。。。。。。。。。。。。。。
        if(!于美人.cardList.contains(toFoundCard)){
    
            于美人.cardList.set(0,toFoundCard);
        }
        System.out.println("于美人第二次发功:");
        printPlayerHandCard(playerList);


定义玩家新的的一个类:

package poker;

import java.util.ArrayList;
import java.util.List;

public class Player {
    

    public List<Card> cardList=new ArrayList<>();
    public String name;
    public Player(String name){
    
        this.name=name;
    }
}

定义扑克牌的一个类:

package poker;
import java.util.Objects;
public class Card {
    
    public String suit;//花色
    public int rank;//分值
    //构造方法
    public Card(String suit,int rank){
    
        this.rank=rank;
        this.suit =suit;
    }
    @Override
    public String toString() {
    
        return String.format("[%s%d]",suit,rank);
    }
    //重写比较相等的方法
    @Override
    public boolean equals(Object o) {
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Card card = (Card) o;
        return rank == card.rank &&
                Objects.equals(suit, card.suit);
    }
}

注意:(1)要重新定义比较相等方法的重写。
(2)注意foreach 方法的写法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46551861/article/details/108650353

智能推荐

U4_3 语法分析-自底向上分析-LR0/LR1/SLR分析-程序员宅基地

文章浏览阅读1.9k次,点赞67次,收藏20次。U4_3 语法分析-自底向上分析-LR0/LR1/SLR分析

夜游苏州古城-程序员宅基地

文章浏览阅读1.5k次。  马上就要参加巅峰战将营,整理了一下,自己还真没有几套运动的衣服。只好临时抱佛脚了,跟丫头去逛街买装备。  一整天下来,李宁、安踏逛遍,搞定3身运动装,收工!  晚上便跟丫头来到石路万人码头乘坐游船赏月。  游船从石路南浩街万人码头出发,沿途经过了24做桥:阊门吊桥、惠济桥、平门桥、齐门桥、糖坊湾桥、娄们桥、相门桥、葑门桥、竹辉桥、古觅渡桥、南园桥、人民桥、蟠龙桥、吴门桥、盘门、新市

Python(35):Python3 通过https上传文件和下载文件_python3 文件上传下载-程序员宅基地

文章浏览阅读1.3k次,点赞29次,收藏8次。Python(35):Python3 通过https上传文件和下载文件_python3 文件上传下载

手机远程唤醒 android,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...-程序员宅基地

文章浏览阅读5.1k次。一、需求分析我的电脑一般都是24小时候开机的,方便远程操作。但是这样,一是比较浪费电,二是对电脑硬件也或多或少有些影响。所以就需要远程开机。目前远程开机有很多种方式:1、智能插线板,可以远程控制插板的通电和断电,并在BIOS中设置来电开机,实现远程开机2、通过一些硬件,插到机箱电源跳线上来实现3、利用大部分电脑都支持的WakeOnLan技术来实现开机,只是配置过程有不少坑,相对比较麻烦。如果利用W..._wol安卓远程唤醒软件

VUE基础知识学习,零基础安装node和淘宝镜像 operation not permitted, mkdir ‘D:\nodejs\node_global‘解决方法_operation not permitted, mkdir 'd:\nodejs\node_glo-程序员宅基地

文章浏览阅读1.6k次,点赞5次,收藏2次。@VUE基础知识学习,基础安装node和淘宝镜像 operation not permitted, mkdir 'D:\nodejs\node_global’解决方法在官网上搜索node.js安装下载成功之后在本地进行安装,记得一定要去搜一下安装教程,因为有些步骤需要修改正常安装之后没有什么问题。检验npm版本(operation not permitted, mkdir 'D:\nodejs\node_global’解决方法)在这里我遇到了一个问题:发现报错,之后我就去百度上搜索了一下这个问_operation not permitted, mkdir 'd:\nodejs\node_global

C语言strtoul函数简介-字符串转无符号长整形_strtoul(argc[2], 0, 16);-程序员宅基地

文章浏览阅读224次。请查看这位大牛的文章,写得太好了,牛皮plus plus.......https://blog.csdn.net/qq_37858386/article/details/78458401_strtoul(argc[2], 0, 16);

随便推点

用gambit学博弈论--完全信息动态博弈(一)_gambit博弈论软件教程-程序员宅基地

文章浏览阅读1.3k次。  通常用博弈的战略式表述去描述和分析静态博弈,而对动态博弈的描述和分析就借助博弈的扩展式表述。回顾第2章给出的战略式表述,其中心内容包含三个要素:(1)参与者_gambit博弈论软件教程

AI伦理:科技发展中的人性之声-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏3次。然而,随着AI技术的快速发展,我们也面临着一系列伦理问题,这些问题涉及到我们的隐私、公平性、自主性和责任等方面。通过建立法律框架、改进训练数据和算法、提高模型的可解释性以及提供伦理培训,我们可以更好地应对AI伦理挑战,为科技发展中的人性之声提供指导。:为了解决数据收集和滥用问题,需要制定严格的数据隐私法规,确保个人数据的收集和使用受到适当的监管。:为了解决自主性问题,需要建立法律框架,明确自主AI系统的责任和法律责任。为了应对伦理挑战,开发人员和数据科学家需要受到伦理教育,以提高他们的伦理意识和决策能力。

shell之三剑客awk(基础用法)-程序员宅基地

文章浏览阅读3.6w次,点赞89次,收藏623次。AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,统计汇总等工作,数据可以来自标准输入也可以是管道或文件。当读到第一行时,匹配条件,然后执行指定动作,在接着读取第二行数据处理,不会默认输出。如果没有定义匹配条件,则是默认匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。逐行读取文本,默认以空格或tab键为分割符进行分割,将分割所得的各个字段,保存到内建变量中,并按模式或或条件执行编辑命令。与sed工作原理相比:s_awk

Android自定义 edittext,Android 自定义ClearEditTextView-程序员宅基地

文章浏览阅读161次。ClearEditTextView通过扩展EditText,添加了右边清除按钮、输入数据不合法时可左右抖动的功能。效果如下:模拟登录整体的实现代码如下:public class ClearEditTextView extends EditText implements View.OnFocusChangeListener, TextWatcher {//右边的删除按钮private Drawabl..._android edittext clear

小程序与H5如何互相跳转_uni小程序跳转到h5链接方法-程序员宅基地

文章浏览阅读1.1k次。由于小程序官方没有提供外部H5网页直接跳转到小程序的api,所以目前只支持小程序内嵌H5,并且只有内嵌的H5才能跳回小程序小程序跳转H5需要用到小程序的web-view,官方文档链接web-view是承载网页的容器。会自动铺满整个小程序页面,个人类型的小程序暂不支持使用。写法如下:<view class="page-body"> <web-vi..._uni小程序跳转到h5链接方法

程序员的职业成长之路?从初级到高级的技能提升之路-程序员宅基地

文章浏览阅读153次。程序员的职业成长之路?从初级到高级的技能提升之路

推荐文章

热门文章

相关标签