Java梭哈游戏部分实现代码

转载:https://www.cnblogs.com/jiqing9006/p/6107892.html
同时这段代码在李刚老师疯狂JAVA讲义这本书中也有

import java.util.*;

/**
 * Created by Jiqing on 2016/11/27.
 */
public class ShowHand { // 梭哈
    // 定义该游戏最多支持多少个玩家
    private final int PLAY_NUM = 5;
    // 定义扑克牌的花色和数值
    private String[] types = {"方块","草花","红心","黑桃"};
    private String[] values= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
    // cards 扑克牌
    private List<String> cards = new LinkedList<String>();
    // 定义所有玩家
    private String[] players = new String[PLAY_NUM];

    // 玩家手上的扑克牌
    private List<String>[] playersCards = new List[PLAY_NUM];

    /**
     * 初始化扑克牌,放入52张扑克牌
     * 通过shuffle随机排序
     */
    public void initCards() {
        for(int i = 0 ; i < types.length ; i ++) {
            for (int j = 0;j<values.length;j++) {
                cards.add(types[i]+values[j]);
            }
        }
        // 随机排列
        Collections.shuffle(cards);
    }

    /**
     * 初始化玩家
     */
    public void initPlayer(String...names) {
        if (names.length > PLAY_NUM || names.length <2) {
            System.out.println("玩家数量不对");
            return;
        } else {
            for (int i = 0;i<names.length;i++){
                players[i] = names[i];
            }
        }
    }

    /**
     * 初始化玩家手中牌
     */
    public void initPlayerCards() {
        for (int i = 0;i<players.length;i++) {
            if (players[i] != null && !players[i].equals("")) {
                playersCards[i] = new LinkedList<String>();
            }
        }
    }

    /**
     * 输出全部扑克
     */
    public void showAllCards() {
        for (String card :cards) {
            System.out.println(card);
        }
    }

    /**
     * 派发扑克
     * @param first最先派给谁
     */
    public void deliverCard(String first) {
        int firstPos = ArrayUtils.search(players,first);
        // 依次给该玩家之后的人发牌
        for (int i = firstPos;i<PLAY_NUM;i++) {
            if (players[i] != null) {
                playersCards[i].add(cards.get(0)); // 获取第一张牌
                cards.remove(0);// 移除第一张牌
            }
        }

        // 依次给玩家之前的人发牌
        for (int i = 0 ; i<firstPos;i++) {
            if (players[i] != null) {
                playersCards[i].add(cards.get(0));
                cards.remove(0);
            }
        }
    }

    /**
     * 输出玩家手上的扑克牌
     *
     */
    public void showPlayerCards() {
        for (int i=0;i<PLAY_NUM;i++) {
            if (players[i] != null) {
                System.out.println(players[i] + ":");
                for (String card:playersCards[i]) {
                    System.out.print(card+"\t");
                }
            }
            System.out.print("\n");
        }

    }

    public static void main(String[] args) {
        ShowHand sh = new ShowHand();
        sh.initPlayer("电脑","纪庆");
        sh.initCards();
        sh.initPlayerCards();

        sh.showAllCards();
        System.out.println("--------------");
        sh.deliverCard("纪庆");
        sh.showPlayerCards();

        sh.deliverCard("电脑");
        sh.showPlayerCards();
    }

}

class ArrayUtils
{
    /**
     * 定义一个工具方法,工具方法从字符串数组中找到对应的字符串元素的位置
     * @param array 搜索的数组
     * @param target 搜索的字符串
     * @return 目标字符串出现的位置,-1表明找不到
     */
    public static int search(String[] array, String target)
    {
        for (int i = 0 ; i < array.length ; i++ )
        {
            if (array[i] != null && array[i].equals(target))
            {
                return i;
            }
        }
        return -1;
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
梭哈(来自英文showhands)是从扑克牌中借鉴过来的。每人五个骰子,摇出后,依其点数牌形可分为:散牌(五个骰子点数各不一样)、一对(五个骰子中仅有两个骰子点数一样,其余皆不一样)、两对(两个对子加一个其他点数,如一对二加一对四加一个三)、三条(三个骰子的点数一致,余下两个骰子点数各不相同,如三个四加一个二和一个六)、葫芦(也就是扑克牌中的三条带一对:三个骰子点数同为某数,余下两个骰子点数同为另一数,如三个三加一对二)、(其中四个骰子的点数一致,如四个一加一个五)、顺子(五个骰子点数呈连续分布,如12345和23456)、豹子(五个骰子点数全一样)。  胜负规则为豹子>顺子>炸弹>葫芦>三条>两对>对子>散牌。若属于同一类型,则依次比较类型构成主次要成分的骰子点数大小。如先比较四个相同骰子的点数,再比较散牌;葫芦先比较三个相同骰子再比较对牌;两对先比较较大的对,再比较稍小的对,最后比较散牌;如此类推。比较点数时1>6>5>4>3>2。试举例,如双方均为葫芦,一人为三个五带对二,另一人为三个四带对六,前者胜;又若双方均为两对,同有对二、对六,但一方散牌为五、另一方为一,则后者胜。 ◦ 要求:请编程实现如下功能:  分别产生六组随机数(对应六个玩家),根据上面的规则判断所产生的骰子点数牌型,并输出。  比较六个玩家的胜负,并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值