源码链接:https://github.com/zhangdididi/CardGame
《赌神》相信很多人都看过,也都见过电影中各种花里胡哨的搓牌发牌的经典场面,这种赌博的玩法就叫做梭哈。下面我们就用Java语言来实现梭哈游戏这个小项目,在代码中也带有详细的注解以表达代码的思路。
首先我们需要提供一个扑克牌的类,在使用时就可以根据点数和花色来构造一整副牌,梭哈玩法中不包括大王小王,这里就只考虑点数和花色。
//扑克牌类
class Card {
public String suit;//花色
public String rank;//点数
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
}
@Override
public String toString() {
return "(" + suit + " " + rank + ")";
}
}
这里为了保证方法的封装性,将他们都用 private 来修饰了,所以就在public 类的内部来进行测试。当然如果想要在其他类中去调用方法,也可以去修改他的访问权限。
public class CardDemo {
public static void main(String[] args) {
//创建一副牌
System.out.println("创建一副牌");
List<Card> poker = newPoker();
//洗牌 (这里使用Collection类的shuffle方法来进行随机洗牌)
Collections.shuffle(poker);
System.out.println(poker);
//创建玩家数组列表
List<List<Card>> players = new ArrayList<>();
//新增两个数组列表 表示两个玩家的两副牌
players.add(new ArrayList<Card>());
players.add(new ArrayList<Card>());
//依次发牌
//将刚才重新洗好的牌的最上面开始交替给玩家发牌
for (int cardIndex = 0; cardIndex < 5; cardIndex++) {
for (int playerIndex = 0; playerIndex < 2; playerIndex++) {
List<Card> playerCards = players.get(playerIndex);//先得到一个玩家数组
Card curCard = poker.remove(0);//拿到这副牌最上面的一张
playerCards.add(curCard);//将拿到的牌给到玩家手中
}
}
//新建两个玩家的点数表和花色表
int[] RankOfPlayer1 = getRankArray(players.get(0));
int[] SuitOfPlayer1 = getSuitArray(players.get(0));
int[] RankOfPlayer2 = getRankArray(players.get(1));
int[] SuitOfPlayer2 = getSuitArray(players.get(1));
int typeOfPlayer1 = pokerType(RankOfPlayer1, SuitOfPlayer1);
int typeOfPlayer2 = pokerType(RankOfPlayer2, SuitOfPlayer2);