如何简单编写斗地主发牌程序
我们先来看一看要求
* 纸牌管理类
* 斗地主游戏规则如下:
* 1.有三名玩家,可从控制台赋值玩家姓名,玩家中会有牌类集合的属性,还有是否是地主的状态
* 2.牌类有两个属性:花色和点数。花色有4种:黑红梅方(可用枚举)点数对应有13加上两张王牌(可用枚举)。
* 3.扑克牌管理类:用于产生54张随即顺序的牌堆(牌类集合,54张牌不变,变得是顺序),给玩家发牌,并随机产生地主,把剩余3张底牌给地主,并展示三位玩家的手牌。同时把手牌信息存入文件中
一,首先创建纸牌类
可以利用数组,也可以利用集合
先把花色和数字定义好,然后把大小王添加进去,接着利用递归的方法,将花色和数字一一对应,这里要注意下标的问题
public class Playcard {
public static void main(String[] args)throws IOException {
ArrayList<Integer> numCards = new ArrayList<>();//numcards为下标的集合
HashMap<Integer, String> cards = new HashMap<>();//cards为纸牌的集合,包括下标和纸牌数字花色
String[] num = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
String[] colour = {"♠", "♦", "♣", "♥"};
numCards.add(0);
numCards.add(1);
cards.put(0, "大王");
cards.put(1, "小王");
int a = 2;
for (String s : colour) {
for (String s1 : num) {
numCards.add(a);
cards.put(a, s + s1);
a++;
}
}
System.out.println("开始发牌");
二,下面把牌分成3份,先选出玩家和地主的牌,
for (int q = 0; q < 10; q++) {
String b = "第" + (q + 1) + "次展示玩家和牌";
StringBuilder s2 = new StringBuilder("");
StringBuilder s3 = new StringBuilder("");
StringBuilder s4 = new StringBuilder("");
StringBuilder s5 = new StringBuilder("");
System.out.println(b);
Collections.shuffle(numCards);//shuffle()方法是打乱顺序,这里打乱下标的顺序
ArrayList player1 = new ArrayList();
ArrayList player2 = new ArrayList();
ArrayList player3 = new ArrayList();
ArrayList master = new ArrayList();
for (int i = 0; i <= 53; i++) {//i为纸牌下标,遍历集合把牌分成三份
if (i <= 2) {
master.add(numCards.get(i));
} else if (i % 3 == 1) {
player1.add(numCards.get(i));
} else if (i % 3 == 2) {
player2.add(numCards.get(i));
} else {
player3.add(numCards.get(i));
}
}
三,展示玩家的牌和地主牌
String s6 = "1号玩家的牌为:";
System.out.println(s6);
for (int i = 0; i < player1.size(); i++) {
System.out.println(cards.get(player1.get(i)));//cards调用get方法
s2 = s2.append(cards.get(player1.get(i)));
}
String s7 = "2号玩家的牌为:";
System.out.println(s7);
for (int i = 0; i < player2.size(); i++) {
System.out.println(cards.get(player2.get(i)));
s3 = s3.append(cards.get(player2.get(i)));
}
String s8 = "3号玩家的牌为:";
System.out.println(s8);
for (int i = 0; i < player3.size(); i++) {
System.out.println(cards.get(player3.get(i)));
s4 = s4.append(cards.get(player3.get(i)));
}
String s9 = "地主玩家的牌为:";
System.out.println(s9);
for (int i = 0; i < master.size(); i++) {
System.out.println(cards.get(master.get(i)));
s5 = s5.append(cards.get(master.get(i)));
}
String s10 = b + "\n" + s6 + "\n" + s2 + "\n" + s7 + "\n" + s3 + "\n" + s8 + "\n" + s4 + "\n" + s9 + "\n" + s5 + "\n";//这里要注意换行,语句要注意一一对应
System.out.println("**************************");
System.out.println(s10);