栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java模拟保皇游戏开始的发牌过程。

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java模拟保皇游戏开始的发牌过程。

规则:4副扑克,5个玩家。

1)有一个大王标记为皇上。每次发牌时,所发牌中有该大王的玩家是皇上。

2)皇帝选择侍卫(也叫保儿、腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己的牌中选择一张拥有相同三张(点数和花色都相同)的一张牌(不能是2、3、大小王),其他四个玩家中有这张牌的就是侍卫。例如,皇上有三个红桃5,其他四个玩家中有红桃5的玩家就是侍卫。特殊情况是:1.皇上有一套四张牌相同的点数的牌,皇帝可以自己做侍卫;2.皇帝没有满足要求的牌,无法获得侍卫。3. 如果皇上有多种选择,需要与用户进行交互,即需要皇上输入想要使用的牌来选择侍卫情况。

程序要求:程序启动后生成5个玩家,并自动给他们发牌。然后输出:

1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;

2)那张作为侍卫所特有的牌(“花色”+“点数”)。如果无法得到侍卫,则程序输出相应的提示。例如,程序运行后输出如下的结果:

情况1:只有一种选择,直接生成侍卫(是皇帝自身或者另外一个玩家)

皇帝是player3
皇上的牌是:[皇上, ♚, ♣A, ♣A, ♥A, ♥A, ♥A, ♠A, ♦Q, ♠Q, ♠Q, ♦J, ♥J, ♥J, ♠J, ♠J, ♣10, ♥10, ♣9, ♣9, ♠9, ♠9, ♣8, ♥8, ♠8, ♣7, ♥7, ♣6, ♣6, ♥6, ♠6, ♦5, ♦5, ♥5, ♦4, ♣4, ♠4, ♣3, ♣3, ♣3, ♥3, ♠3, ♠3]
侍卫对应的牌是:♥A
侍卫是player2
侍卫的牌是:[, ♚, ♣2, ♥2, ♦A, ♦A, ♦A, ♥A, ♣K, ♥K, ♥K, ♠K, ♦Q, ♦J, ♠J, ♣10, ♥10, ♥10, ♥10, ♠10, ♦9, ♦9, ♣9, ♣9, ♦8, ♥8, ♠8, ♠8, ♦7, ♣7, ♣7, ♣7, ♠7, ♦6, ♣5, ♠5, ♠5, ♦4, ♣4, ♥4, ♠4, ♦3, ♠3]

情况2:有多种选择,需要进行交互,皇上输入想要使用的牌

皇帝是player3
皇上的牌是:[皇上, ♦2, ♣2, ♦A, ♣A, ♣A, ♠A, ♠A, ♦K, ♥K, ♠K, ♠K, ♣Q, ♣Q, ♥Q, ♦J, ♠J, ♣10, ♣10, ♣10, ♥10, ♦9, ♦9, ♥9, ♥9, ♦7, ♣7, ♣7, ♥7, ♠7, ♦6, ♣6, ♦5, ♣5, ♣5, ♣5, ♥5, ♦4, ♦3, ♦3, ♦3, ♣3, ♥3]
拥有3张相同的:♣10,♣5
请选择想要使用的牌:
♣10
侍卫是player4
侍卫的牌是:[♚, ♦2, ♥2, ♦A, ♣A, ♦K, ♦K, ♣K, ♠K, ♦Q, ♥Q, ♥Q, ♠Q, ♠Q, ♣J, ♣J, ♥J, ♥J, ♠J, ♦10, ♣10, ♥10, ♦9, ♣9, ♣9, ♦8, ♦8, ♥8, ♥7, ♥7, ♠7, ♦6, ♣6, ♥6, ♦5, ♣5, ♥5, ♣4, ♥4, ♥4, ♠4, ♦3, ♥3]

代码如下:

import java.util.*;
//定义扑克牌类,提供equals、toString等方法
class Card {
    private String color;
    private String size;//点数中有字符JQK,所以定义成String类型
    private int index;//记录牌的相对大小,方便排序
    @Override
    public String toString(){
        return color+size;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Card card = (Card) o;
        return index == card.index && Objects.equals(color, card.color) && Objects.equals(size, card.size);
    }

    @Override
    public int hashCode() {
        return Objects.hash(color, size, index);
    }

    public Card(String color, String size, int index) {
        this.color = color;
        this.size = size;
        this.index = index;
    }

    public String getColor() {
        return color;
    }
    public String getSize() {
        return size;
    }
    public int getIndex() {
        return index;
    }
}

//比较扑克牌相对大小的方法,用于sort按序输出
class compareIndex implements Comparator{
    public int compare(Card c1,Card c2){
        return c2.getIndex()-c1.getIndex();
    }

}
//麻烦使用IDEA,谢谢
public class Main {
    //查找在集合中是否有与被比较元素相同的元素;比较方法,花色和点数相同即相同
    public static boolean search(List cards , Card c){
        for(int i = 0;i allCards = new ArrayList<>();

        //初始化四副牌
        String[] sizes = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] colors = {"♠","♥","♣","♦"};//IDEA中输入时字符与名称相互对应
        for(int i = 0;i<4;i++){
            int index = 1;
            for(String size:sizes){
                for(String color:colors){
                    Card c = new Card(color,size,index++);
                    allCards.add(c);
                }
            }
            //添加大小王
            Card smallKing = new Card("","♚",index++);
            Card bigKing = new Card("","",index++);
            Collections.addAll(allCards,smallKing,bigKing);
        }
        //移除一个大王,并且添加“皇上”牌;remove(Object obj):只移除第一个相同的元素,后面的相同不会移除
        allCards.remove(new Card("","",54));
        allCards.add(new Card("","皇上",55));//定义皇上牌的相对大小为55,与当大王牌有区分

        //洗牌!!!
        Collections.shuffle(allCards);//打乱顺序

        //定义五个玩家,并且初始化!!!!!!
        List[] players = new ArrayList[5];
        for(int i = 0;i<5;i++){
            players[i] = new ArrayList<>();
        }
        //定义一个Map集合给各个玩家赋值编号,方便后面的发牌等遍历
        Map map = new HashMap<>();
        for(int i =0;i<5;i++){
            map.put(i,players[i]);
        }
        int kingplayerNo = 0;//用来记录皇帝玩家序号
        //给五个玩家发牌并记录皇帝是谁
        for(int i = 0,j = 0;i kingplayer = map.get(kingplayerNo);

        //记录出现三次或者四次相同牌的信息并储存
        int samepokerNumber = 1;
        Card[] samecard3 = new Card[10];
        int count1 = 0;
        Card[] samecard4 = new Card[10];
        int count2 = 0;
        Card cardFlag = kingplayer.get(1);
        for(int i =2;i=1){
            System.out.println("本局侍卫是皇帝自身");
        }
        if(count1 == 1 && count2 == 0){
            Card c = samecard3[0];
            System.out.println("侍卫对应的牌是:"+c);
            int protecterNo = 0;
            for(int i = 0;i<5;i++){
                if(i==kingplayerNo)
                    continue;
                if(search(map.get(i),c)){
                    protecterNo = i;
                    break;
                }
            }
            System.out.println("侍卫是player"+(protecterNo+1));
            System.out.println("侍卫的牌是:"+map.get(protecterNo));
        }
        if(count1>=2||((count1+count2)>=2&&count1>=1)){
            for(int i =0;i0){
                System.out.println();
            }
            System.out.println("请选择想要使用的牌:");
            String choose = sc.next();
            String firstcolor = "";
            String lastsize = "";
            firstcolor += choose.charAt(0);
            if(choose.length()==2){
                lastsize += choose.charAt(1);
            }
            if(choose.length()==3){
                lastsize += choose.charAt(1);
                lastsize += choose.charAt(2);
            }
            Card chooseCard = new Card(firstcolor,lastsize,10);
            int flag = 0;
            for(int i = 0;i 

个人作业,如有不足,请多指教。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号