Java实现梭哈扑克牌游戏

本文通过Java语言实现梭哈扑克牌游戏,提供源码链接,并详细解释代码思路。游戏中排除大王小王,使用ArrayList存储扑克牌和进行玩家操作。文章鼓励读者尝试使用不同数据结构实现。
摘要由CSDN通过智能技术生成

源码链接:https://github.com/zhangdididi/CardGame

《赌神》相信很多人都看过,也都见过电影中各种花里胡哨的搓牌发牌的经典场面,这种赌博的玩法就叫做梭哈。下面我们就用Java语言来实现梭哈游戏这个小项目,在代码中也带有详细的注解以表达代码的思路。

首先我们需要提供一个扑克牌的类,在使用时就可以根据点数和花色来构造一整副牌,梭哈玩法中不包括大王小王,这里就只考虑点数和花色。

//扑克牌类
class Card {
   
    public String suit;//花色
    public String rank;//点数

    public Card(String suit, String rank) {
   
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
   
        return "(" + suit + " " + rank +  ")";
    }
}

这里为了保证方法的封装性,将他们都用 private 来修饰了,所以就在public 类的内部来进行测试。当然如果想要在其他类中去调用方法,也可以去修改他的访问权限。

public class CardDemo {
   
    public static void main(String[] args) {
   
        //创建一副牌
        System.out.println("创建一副牌");
        List<Card> poker = newPoker();

        //洗牌 (这里使用Collection类的shuffle方法来进行随机洗牌)
        Collections.shuffle(poker);
        System.out.println(poker);

        //创建玩家数组列表
        List<List<Card>> players = new ArrayList<>();
        //新增两个数组列表 表示两个玩家的两副牌
        players.add(new ArrayList<Card>());
        players.add(new ArrayList<Card>());

        //依次发牌
        //将刚才重新洗好的牌的最上面开始交替给玩家发牌
        for (int cardIndex = 0; cardIndex < 5; cardIndex++) {
   
            for (int playerIndex = 0; playerIndex < 2; playerIndex++) {
   
                List<Card> playerCards = players.get(playerIndex);//先得到一个玩家数组
                Card curCard = poker.remove(0);//拿到这副牌最上面的一张
                playerCards.add(curCard);//将拿到的牌给到玩家手中
            }
        }

        //新建两个玩家的点数表和花色表
        int[] RankOfPlayer1 = getRankArray(players.get(0));
        int[] SuitOfPlayer1 = getSuitArray(players.get(0));
        int[] RankOfPlayer2 = getRankArray(players.get(1));
        int[] SuitOfPlayer2 = getSuitArray(players.get(1));

        int typeOfPlayer1 = pokerType(RankOfPlayer1, SuitOfPlayer1);
        int typeOfPlayer2 = pokerType(RankOfPlayer2, SuitOfPlayer2);

        
一.扑克牌游戏 一副扑克牌去除大小王,剩余52张,A--K,红心,方块,黑桃,梅花四种花色。然后把这一副牌发给两个人,每人分得五张,比较这两人手中牌的大小。 大小的判定规则暂定如下: 牌型比较:同花顺>铁支>葫芦>同花>顺子>三条>二对>对子>散牌。 数字比较:A>K>Q>J>10>9>8 花式比较:黑桃>红桃>草花>方片 牌型说明: 同花顺:拥有五张连续性同花色的顺子。以A为首的同花顺最大。 铁支:四张相同数字的牌,外加一单张。比数字大小,「A」铁支最大 葫芦:由「三条」加一个「对子」所组成的牌,若别家也有此牌型,则比三条数字大小 同花:不构成顺子的五张同花色的牌。先比数字最大的单张,如相同再比第二支、依此类推 顺子:五张连续数字的牌组。 以A为首的顺子最大,如果大家都是顺子,比最大的一张牌,如果大小还一样就比这张牌的花式 三条:牌型由三张相同的牌组成,以A为首的三条最大 二对:牌型中五张牌由两组两张同数字的牌所组成。若遇相同则先比这副牌中最大的一对,如又相同再比第二对,如果还是一样,比大对子中的最大花式 对子:牌型由两张相同的牌加上三张单张所组成。如果大家都是对子,比对子的大小,如果对子也一样,比这个对子中的最大花色 散牌:单一型态的五张散牌所组成,不成对(二对),不成三条,不成顺(同花顺),不成同花,不成葫芦,不成铁支。先比最大一张牌的大小,如果大小一样,比这张牌的花色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值