前言
实现控制台下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);
}
}