当前位置:首页 » 《随便一记》 » 正文

Java中洗牌和发牌程序_Zhangsama1的博客

13 人参与  2022年02月19日 16:32  分类 : 《随便一记》  评论

点击全文阅读


前言

实现控制台下3个人玩斗地主游戏时模拟洗牌和发牌的程序,共4种花色,每种花色13张牌,3个人玩时每人发17张牌,底牌3张。
编程提示:
(1)扑克牌类Card:花色和数字。花色为:♠,♥,♣,♦。
(2)玩家类Player。
(3)洗牌:先创建54张扑克牌,循环,每一张牌和它后面的随机一张牌进行交换。
(4)发牌:随机产生1~53的一个整数,发到谁,谁就是地主(这里可以随机产生一个1-3之间的整数,来决定哪个player是第一个发到牌的人,这之后就按照顺序发牌),斗地主3个Player人,每一个人发17张牌,底牌3张给地主。
(5)要求输出时先按花色再按点数升序排序输出。

一、思路

1:首先,每一张扑克牌都有对应的花色和数值,因此应该先初始化好一个存放扑克牌的数组,到时候用于输出
2:为了发牌的随机性,需要打乱数组,可以考虑使用一些无顺序的集合,例如HashMap,其中键为第x张卡牌,值为卡牌对应的字符串。
3:通过上面建立好的卡牌数组,玩家类应该能接收这个数组,到时候输出这个随机的数组
4:留下三张底牌,以及随机化产生一个地主,地主拥有这三张底牌

扑克牌类

package pokerDemo;

import java.util.*;

public class CardClass {
    private boolean haveLandlord=false;
    TreeMap<Integer,String>allPoker=new TreeMap<Integer,String>();

//    public static void lookPoker(String name,TreeMap<Integer,String>pokers,TreeSet<Integer>indexs)//使用ArrayList没有排序的效果
//    {
//        System.out.print(name+"的手牌是:");
//        for(Integer i:indexs){
//            System.out.print(pokers.get(i)+"  ");
//        }
//        System.out.println();
//    }

    public void dealingPokers()
    {
        int i=0;
        Scanner in=new Scanner(System.in);
        ArrayList<Integer> indexs=new ArrayList<Integer>();
        String[] colors={"♥","♠","♦","♣"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for(String n:numbers){
            for(String c:colors){
                allPoker.put(i,c+n);
                indexs.add(i);
                i++;
            }
        }
        allPoker.put(i,"😀");
        indexs.add(i);
        i++;
        allPoker.put(i,"😔");
        indexs.add(i);
        Collections.shuffle(indexs); //打乱原先数组

        TreeSet<Integer> farmer1= new TreeSet<Integer>();
        TreeSet<Integer> farmer2 = new TreeSet<Integer>();
        TreeSet<Integer> landlord = new TreeSet<Integer>();
        for (int J = 0; J < indexs.size(); J++) {
            if(J >=indexs.size()-3){
                landlord.add(indexs.get(J));
            }else if(J %3==0){
                farmer1.add(indexs.get(J));
            }else if(J %3==1){
                farmer2.add(indexs.get(J));
            }else if(J %3==2){
                landlord.add(indexs.get(J));
            }
        }
        int whoisLandlord=(int)(Math.random()*3+1);
        if(whoisLandlord==1)
        {   //抽签 张三是地主
            PlayerClass Landlord=new PlayerClass("张三",true,landlord,allPoker);
            PlayerClass farmerone=new PlayerClass("李四",false,farmer1,allPoker);
            PlayerClass farmertwo=new PlayerClass("王五",false,farmer2,allPoker);
        }
        else if(whoisLandlord==2)
        {
            PlayerClass farmerone=new PlayerClass("张三",false,farmer1,allPoker);
            PlayerClass Landlord=new PlayerClass("李四",true,landlord,allPoker);
            PlayerClass farmertwo=new PlayerClass("王五",false,farmer2,allPoker);
        }
        else if(whoisLandlord==3)
        {
            PlayerClass farmerone=new PlayerClass("张三",false,farmer1,allPoker);
            PlayerClass farmertwo=new PlayerClass("李四",false,farmer2,allPoker);
            PlayerClass Landlord=new PlayerClass("王五",true,landlord,allPoker);
        }

    }  //初始化好了扑克牌堆

    public static void main(String[]args){
        CardClass c=new CardClass();
        c.dealingPokers();

    }

玩家类

package pokerDemo;

import java.util.TreeMap;
import java.util.TreeSet;
import pokerDemo.CardClass;
public class PlayerClass {
    private boolean isLandlord=false;
    private TreeSet<Integer> number=new TreeSet<Integer>();
    TreeMap<Integer,String> Poker=new TreeMap<Integer,String>();
    private String name;
    public boolean getID()
    {
        return isLandlord;
    }
    public void lookPoker(String name,TreeMap<Integer,String>pokers,TreeSet<Integer>indexs)//使用ArrayList没有排序的效果
    {
        if(this.getID()==true)
            System.out.print("地主是"+name+"他的手牌是:");
        else
            System.out.print("农民是"+name+"他的手牌是");
        for(Integer i:indexs){
            System.out.print(pokers.get(i)+"  ");
        }
        System.out.println();
    }

    PlayerClass(String name,boolean isLandlord,TreeSet<Integer> number,TreeMap<Integer,String>card)
    {
        this.isLandlord=isLandlord;
        this.name=name;
        this.number=number;
        lookPoker(name,card,number);
    }
}

结果

在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/34983.html

扑克牌  数组  地主  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1