简单的扑克牌类

mac2024-12-07  54

设计要求

结合面向对象设计原则,分析和设计模拟扑克游戏的洗牌过程。

编程定义一个表示扑克牌的类 Poke,用 suit 来表示扑克牌的花色,用 face 来表示扑克牌的牌面值,每副牌为 52 张,不考虑包含大小王。假设扑克牌游戏需要 2 副(或2副以上)的牌,实现 Poke 类中的静态方法,模拟备牌、洗牌、发牌,以及将这些扑克牌分给参加游戏的所有人,并将参加扑克牌游戏的所有人的扑克牌输出。

设计思路

备牌: 获取牌的副数 n,新建一个 52n大小的空字符串数组 cards来保存 52n张扑克牌。通过给数组赋值的形式将牌面信息加入到字符串数组中。

cards初始化长度为 52n。

对于赋值,找到数组序号与对应牌面关系,即可利用 for 循环简单赋值。

令 suit = {"♠","♦","♥","♣"},face = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"},则有cards[i] = suit[(i/13)%4]+face[(i%13)]

洗牌: 随机生成两个 52n内的整数 i和 j,交换 cards[i]和 cards[j],这个过程要重复多次。 发牌: 获取参与人数 m,找出某人与牌序列的数值关系,将该张牌抽出,放进一个新的字符串数组 card中并打印即可。

card的初始化长度为 牌数/人数,并向上取整。

(int)Math.ceil((double)cards.length/m)

第i位玩家分得的第k张牌为card[k] = cards[i + m * k]。

示牌: 利用 for 循环将字符串数组内容输出即可。

Poke类代码

Poke.java

import java.util.Random; public class Poke { public static String[] suit = {"♠","♦","♥","♣"}; public static String[] face = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; //备牌 public static String[] createCard(int number) { String[] cards =new String[number * 52]; for(int i= 0; i < number * 52; i++) { cards[i] = suit[(i/13)%4]+face[(i%13)]; } return cards; } //示牌 public static void display(String[] cards) { for(int i = 0; i<cards.length;i++) { if(i%52 == 0 && i > 0) System.out.print("\n"); System.out.print(cards[i]+" "); } System.out.print("\n"); } //交换两张牌位置 public static void swap(String[] cards,int i, int j) { String temp = new String(); temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } //洗牌 public static void shuffle(String[] cards) { for(int i = 0; i < 10000; i++) { Random ran = new Random(); int r1 = ran.nextInt(cards.length); int r2 = ran.nextInt(cards.length); swap(cards,r1,r2); } } //分牌 public static void distribute(String[] cards, int player) { for(int i = 0;i < player; i++) { String[] card = new String[(int)Math.ceil((double)cards.length/player)]; for(int k = 0; k < card.length && player * k+i < cards.length; k++) { card[k] = cards[player * k+i]; } System.out.print("第"+(i+1)+"位玩家的牌:"); display(card); } } @SuppressWarnings("resource") public static void main(String[] args) { System.out.println("该扑克游戏需要几付扑克牌?"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); String[] cards = Poke.createCard(num); System.out.println("该扑克游戏有几个玩家?"); Scanner sp = new Scanner(System.in); int per = sp.nextInt(); System.out.println("显示所有的牌:"); Poke.display(cards); Poke.shuffle(cards); System.out.println("显示分配给每个人的牌:"); Poke.distribute(cards,per); sc.close(); } }

输出结果

该扑克游戏需要几付扑克牌? 3 该扑克游戏有几个玩家? 8 显示所有的牌: ♠A ♠2345678910 ♠J ♠Q ♠K ♦A ♦2345678910 ♦J ♦Q ♦K ♥A ♥2345678910 ♥J ♥Q ♥K ♣A ♣2345678910 ♣J ♣Q ♣K ♠A ♠2345678910 ♠J ♠Q ♠K ♦A ♦2345678910 ♦J ♦Q ♦K ♥A ♥2345678910 ♥J ♥Q ♥K ♣A ♣2345678910 ♣J ♣Q ♣K ♠A ♠2345678910 ♠J ♠Q ♠K ♦A ♦2345678910 ♦J ♦Q ♦K ♥A ♥2345678910 ♥J ♥Q ♥K ♣A ♣2345678910 ♣J ♣Q ♣K 显示分配给每个人的牌:1位玩家的牌:♦794 ♥A ♥A ♥34524844 ♥J ♦J ♦Q ♦J ♣9722位玩家的牌:♣635879 ♦A ♣10997 ♦K ♣26 ♦A ♣J ♦44853位玩家的牌:♠Q ♥A ♥Q ♣K ♣9 ♥K ♥K ♠K ♠25 ♠J ♥Q ♣A ♠39 ♠K ♥875 ♥Q 第4位玩家的牌:♥77543 ♦J ♠Q ♠A ♣Q ♥910 ♣A ♥10361072 ♥J ♠A 第5位玩家的牌:♥28106 ♦K ♦8 ♣K ♣A ♣23 ♣J ♣43 ♠K ♦Q ♦10268 null 第6位玩家的牌:♦106575953267235384 ♦K ♥2 null 第7位玩家的牌:♠9241086 ♠Q ♦Q ♦A ♠1010 ♥J ♥58 ♠J ♦8 ♠J ♠4 ♠A null 第8位玩家的牌:♣Q ♦610 ♥K ♠673 ♣J ♥610758 ♣K ♣3 ♣Q ♦996 null
最新回复(0)