Java中List、Collections实现梭哈游戏

简介:
package ch8;

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;
    }
}

数据结构与算法的完美结合

输出结果:

黑桃3
草花K
草花10
黑桃2
黑桃9
红心9
草花9
方块2
方块6
草花2
黑桃7
方块3
黑桃10
方块K
黑桃4
草花8
红心3
草花7
黑桃5
黑桃K
红心K
草花6
红心A
红心5
红心J
红心7
方块J
方块A
黑桃8
方块4
红心6
草花J
草花Q
方块8
方块7
黑桃J
方块5
红心4
草花3
黑桃6
红心2
红心10
红心8
草花A
红心Q
草花4
黑桃Q
方块10
草花5
黑桃A
方块9
方块Q
--------------
电脑:
草花K
纪庆:
黑桃3

电脑:
草花K 草花10
纪庆:
黑桃3 黑桃2


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6107892.html,如需转载请自行联系原作者

相关文章
|
11月前
|
Java API
【零基础学Java】—数组工具类Arrays(十七)
【零基础学Java】—数组工具类Arrays(十七)
|
3月前
|
存储 安全 Java
在 Java 中如何实现 ArrayList
【8月更文挑战第23天】
42 2
|
3月前
|
存储 Java
如何在 Java 中循环 ArrayList
【8月更文挑战第23天】
37 2
|
3月前
|
存储 Java
|
Java 索引
Java List 的简单使用
Java List 的简单使用
118 1
|
6月前
|
Java
Java之Collections的综合小练习
3. 综合练习 练习1:随机点名器 需求:班级里有N个学生,实现随机点名器
45 0
|
11月前
|
Java
【零基础学Java】—Collections集合工具类(四十二)
【零基础学Java】—Collections集合工具类(四十二)
|
算法 Java 索引
java--Arrays
java Arrays学习笔记
46 0
|
Java
Java 中Collections工具类的使用
Java 中Collections工具类的使用
52 0
java202303java学习笔记第三十三天collections之1
java202303java学习笔记第三十三天collections之1
54 0
下一篇
无影云桌面