自己写了一个模拟扑克牌的小程序:- package cn.pengpan.card;
- /*
- * 需求:编写一个扑克牌的小程序,要求程序能够对扑克牌进行洗牌,并模拟发牌成4组,将发牌结果以log形式打印。
- * 思路:扑克牌有54张,包括从2到10,j,q,k,A共13种面值,每种面值有四种花色:黑桃,红桃,梅花,方块,外加
- * 两张王,大王和小王,共计有54张牌,可将每张牌都视为一个对象,需要建立Card类来描述牌这个类的属性,牌值和花色
- * 属性分别定义为value,suit,利用一个工具类DealCard对牌进行洗牌操作,并利用另一个工具类SendCard进行发牌操作。
- *
- * */
- public class Card {
- private String value;//牌的面值
- private String suit;//牌的花色
- public Card(String value,String suit)//对牌进行初始化
- {
- this.value=value;
- this.suit=suit;
- }
- public String toString()
- {
- return this.value+this.suit;//覆盖Object的toString方法,得到想要显示的字符串信息
- }
- }
复制代码- package cn.pengpan.card;
- import java.util.Random;
- /*
- * 此为洗牌工具类,主要包括shuffle方法用来洗牌,getCurrentCard用来得到当前牌的下一张牌
- * */
- public class DealCard {
- private final int NUM=52;//普通牌的常量
- public final int SUM=54;//牌的总量常量
- private Card[] cards=new Card[54];//定义一个数组容器装入牌的实例对象
- public int currentCard=0;
- public DealCard()//利用构造函数把牌存入数组
- {
- String[] values={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};//普通牌的13种面值
- String[] suits={"黑桃","红桃","梅花","方块"};
- for (int i = 0; i < NUM; i++) {
- cards[i]=new Card(values[i%13], suits[i%4]);
- }
- cards[52]=new Card("大王", "黑色");
- cards[53]=new Card("小王", "红色");
- }
- public void shuffle()//洗牌
- {
- for (int i = 0; i < cards.length; i++) {
- Card temp=cards[i];
- int randomnum=new Random().nextInt(SUM);//利用随机数随机交换牌的位置
- cards[i]=cards[randomnum];
- cards[randomnum]=temp;
- }
- }
- public Card getCurrentCard()
- {
- if (currentCard<SUM) {
- return cards[currentCard++];//得到当前的牌
- }
- return null;
- }
- }
- package cn.pengpan.card;
- /*
- 发牌并打印
- */
- public class SendCard {
- public static void main(String[] args) {
- DealCard dealCard=new DealCard();
- dealCard.shuffle();
- for(int i=0;i<13;i++){
-
- System.out.printf("%-20s%-20s%-20s%-20s\n",
- dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString(),
- dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
- }
-
- System.out.printf("%-20s%-20s\n",dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
- }
- }
复制代码 这个程序是用数组去装入牌的对象,如果用枚举实现这个程序,一共有54张牌,
挨个创建太麻烦,能否把枚举与for循环结合起来实现这个程序,我试了几次,
都不行,枚举常量不能有其他代码,哪位高手能否利用枚举快速简便实现这个程序,
还有程序最后的一句要打印输出4组的牌,因为多了两个大小王,不得不另外又写
一句打印,请帮忙改进下最后这几句,让输出更加简便,谢谢 |
|