【游戏】扑克牌

mac2026-08-14  7

创建一副扑克牌,四种花色,每种花色13张牌A~K,有三个玩家,每人手中五张牌,实现随机发牌的功能。

设计思路:一张牌中包含两个要素,点数(rank)和花色(suit),创建数组SUITS包含四种花色即: {"♥","♠","♣","♦"},在点数中除去'A'、'J'、'Q'、'K'这四种特殊的点数单另罗列以外,其余点数使用循环遍历即可。创建好一副扑克牌后,要打乱这副牌的的顺序,java中有现成的方法Collections.shuffle();其实质是调用swap方法从llist的最后一位与前面的随机交换。接下来依次给三个玩家发放手牌,最终打印输出各个玩家的手牌即可。

shuffle()源码:

public static void shuffle(List<?> list) { Random rnd = r; if (rnd == null) r = rnd = new Random(); shuffle(list, rnd); } @SuppressWarnings({"rawtypes", "unchecked"}) public static void shuffle(List<?> list, Random rnd) { int size = list.size(); if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) { for (int i=size; i>1; i--) swap(list, i-1, rnd.nextInt(i)); } else { Object arr[] = list.toArray(); for (int i=size; i>1; i--) swap(arr, i-1, rnd.nextInt(i)); ListIterator it = list.listIterator(); for (int i=0; i<arr.length; i++) { it.next(); it.set(arr[i]); } } }

扑克牌游戏代码:

import java.util.ArrayList; import java.util.Collections; import java.util.List; 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 + ")"; } } public class CardDemo { public static final String[] SUITS= {"♥","♠","♣","♦"}; public static List<Card> buyPoker() { List<Card> poker = new ArrayList<>(); //构建四种花色 for(int i = 0;i<4;i++) { for(int j = 2;j<=10;j++) { //j+""即把int类型转换为String类型 poker.add(new Card(SUITS[i],j+"")); } poker.add(new Card(SUITS[i], "J")); poker.add(new Card(SUITS[i], "Q")); poker.add(new Card(SUITS[i], "K")); poker.add(new Card(SUITS[i], "A")); } return poker; } public static void main(String[] args) { //1.创建一副牌 System.out.println("创建一副牌"); List<Card> poker = buyPoker(); //2.洗牌,打乱顺序,java中有现成的方式 Collections.shuffle(poker); System.out.println(poker); //3.发牌(三个人,每人5张牌) List<List<Card>>players = new ArrayList<>(); //三个新增列表表示三个玩家的三幅手牌 players.add(new ArrayList<Card>()); players.add(new ArrayList<Card>()); players.add(new ArrayList<Card>()); //依次给三个玩家发牌 for(int cardIndex = 0;cardIndex<5;cardIndex++) { for(int playerIndex = 0;playerIndex<3;playerIndex++) { //players.get(playerIndex).add(poker.remove(0)); //详细实现方法如下所示: //①.玩家抽取一张牌 List<Card> playerCards = players.get(playerIndex); //②.获取最上方的一张牌 Card curCard = poker.remove(0); //③.把最上方的牌交给当前玩家 playerCards.add(curCard); } } //4.输出玩家手牌 System.out.println("1号:"); System.out.println(players.get(0)); System.out.println("2号:"); System.out.println(players.get(1)); System.out.println("3号:"); System.out.println(players.get(2)); } }

运行结果:

最新回复(0)