为了账号安全,请及时绑定邮箱和手机立即绑定

学习三季JAVA入门基础,完成的扑克牌课程代码

标签:
Java
    学习完JAVA入门三季,按课程要求完成扑克牌代码的编写。其中的游戏玩家的人数和可得到的手牌张数,均从键盘输入来确定。因为是初学JAVA,希望多指点。谢谢。

1、首先建一人物类。属性有姓名和 ID。用于游戏人物继承。

package cn.davisli.carddemo;
/**
 * 用于继承的人物类。
 * @author Administrator
 *
 */
public class Person {
    private String id;
    private String name;

    public Person() {

    }

    public Person(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

2、创建扑克牌类。属性有花色和数字字符。用于生成一副扑克牌。

package cn.davisli.carddemo;

/**
 * 扑克牌类。
 * 
 * @author Administrator
 * 
 */
public class Card {
    // 花色属性。
    private String suit;
    // 牌面点数属性。
    private String numberOfChar;

    public String getSuit() {
        return suit;
    }

    public String getNumberOfChar() {
        return numberOfChar;
    }

    // 构造方法。
    public Card(String suit, String numberOfChar) {
        this.suit = suit;
        this.numberOfChar = numberOfChar;
    }
}

3、创建游戏玩家类。继承自person类。其中增加手牌集合HashSet属性Hands,用于存放所得到的牌,游戏人物创建后加入HashMap集合中保存。
类中有创建玩家的方法,发牌的方法和打印玩家信息的方法。

package cn.davisli.carddemo;

/**
 * 游戏玩家类。
 */

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

//继承Person类.
public class PlayerGenerator extends Person {
    // 手牌属性。因为手牌不止一张,且不能重复,所以用HashSet集合来存放玩家的牌。
    private HashSet<Card> hands;
    // 玩家用HashMap集合存放,
    private static Map<String, PlayerGenerator> gamePlayer;

    public PlayerGenerator() {
        gamePlayer = new HashMap<String, PlayerGenerator>();
    }

    public PlayerGenerator(String id, String name) {
        super(id, name);
        this.hands = new HashSet<Card>();
    }

    public HashSet<Card> getHands() {
        return hands;
    }

    public static Map<String, PlayerGenerator> getGamePlayer() {
        return gamePlayer;
    }

    public void playCard() {
        // 取牌。
        ArrayList<Card> card = CardGenerator.getCard();
        // 键盘输入,确定玩家的手牌数量。
        Scanner input = new Scanner(System.in);
        System.out.println();
        System.out.print("请输入每个玩家可取得的手牌张数:");
        int count = input.nextInt();
        // 定位发牌指针。
        int cardNumber = 0;
        // 开始循环发牌。
        for (int i = 0; i < count; i++) {
            // 从HashMap中获得玩家信息。
            Collection<PlayerGenerator> person = gamePlayer.values();
            // 迭代玩家信息。
            Iterator<PlayerGenerator> it = person.iterator();
            while (it.hasNext()) {
                PlayerGenerator p = (PlayerGenerator) it.next();
                // 取出一张牌。
                Card c = card.get(cardNumber);
                // 玩家获得牌。
                p.hands.add(c);
                System.out.println("玩家:" + p.getName() + " 拿牌  ");
                // 发牌指针指向下一张。
                cardNumber++;

            }

        }
    }

    public void addPlayer() {
        System.out.println();
        // 自定义键盘输入玩家人数。
        Scanner input = new Scanner(System.in);
        System.out.print("请输入游戏人数:");
        int crew = input.nextInt();
        int i = 1;
        // 根据人数创建玩家对象属性。
        while (i <= crew) {
            System.out.print("请输入第" + i + "个人物的ID:");
            String userID = input.next();
            Person ID = gamePlayer.get(userID);
            // 判断输入的ID是否为空值。
            if (ID == null) {
                System.out.print("请输入游戏者姓名:");
                String userName = input.next();
                // 创建玩家对象。
                PlayerGenerator newPlayer = new PlayerGenerator(userID,
                        userName);
                // 将玩家对象加入HashMap集合。
                gamePlayer.put(userID, newPlayer);
                i++;
                // ID不为空,说明已有对象值,需要重新输入。
            } else {
                System.out.println("警告:该ID已经存在,请重新输入!");
                continue;
            }
        }
    }

    // 打印输出创建的游戏玩家信息。
    public static void printUser(Map<String, PlayerGenerator> gamePlayer) {
        System.out.println();
        // 从Map中取出玩家信息。
        Collection<PlayerGenerator> ps = gamePlayer.values();
        System.out.println("创建游戏人物如下:");
        // 循环输出信息。
        for (Person person : ps) {
            System.out.println("游戏者ID号:" + person.getId() + "  姓名:"
                    + person.getName());
        }
    }

    // 获取创建的游戏玩家Map集合方法。
    public static Map<String, PlayerGenerator> getPlayer() {
        return gamePlayer;
    }

}

4、创建生成一副扑克牌的类。扑克牌生成后,存放于Arraylist数组中。
类中有扑克牌的创建方法和洗牌方法。

package cn.davisli.carddemo;

/**
 * 扑克牌生成类。
 */

import java.util.ArrayList;
import java.util.Collections;

public class CardGenerator {
    // 此属性是为了扑克牌生成后,放入有序的ArrayList集合中。
    private static ArrayList<Card> setCard;

    // 初始化ArrayList.
    public CardGenerator() {
        setCard = new ArrayList<Card>();
    }

    // 生成扑克牌的方法。
    public void cardList() {
        String[] suit = { "黑桃", "红心", "梅花", "方块" };
        String[] numberOfChar = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
                "J", "Q", "K", "A" };
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 13; j++) {
                // 产生一张牌。
                Card c = new Card(suit[i], numberOfChar[j]);
                // 放入setCard集合中保存。
                setCard.add(c);
            }
        }
    }

    // 获取一副牌方法。
    public static ArrayList<Card> getCard() {
        return setCard;
    }

    // 打印一副牌中的所有张数。(共52张).
    public static void printCard(ArrayList<Card> setCard) {
        System.out.println();
        for (int i = 0; i < setCard.size(); i++) {
            System.out.print(setCard.get(i).getSuit() + " "
                    + setCard.get(i).getNumberOfChar() + " ");
            // 此处判断。每行输出13张牌后换行打印。
            if ((i + 1) % 13 == 0) {
                System.out.println();
            }
        }
    }

    // 洗牌方法。
    public static ArrayList<Card> shuffle(ArrayList<Card> setCard) {
        Collections.shuffle(setCard);
        return setCard;

    }
}

5、创建一个手牌比较排序类,并输出。实现Comparator接口。

package cn.davisli.carddemo;
/**
 * 排序类。
 */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ComparatorCard implements Comparator<Card> {

    public static void compare() {
        System.out.println();
        // 获取玩家。
        Map<String, PlayerGenerator> person = new HashMap<String, PlayerGenerator>();
        person = PlayerGenerator.getPlayer();
        Collection<PlayerGenerator> p = person.values();
        List<Card> listcard = new ArrayList<Card>();
        for (PlayerGenerator playerGenerator : p) {
            Set<Card> c = playerGenerator.getHands();
            for (Card card : c) {
                listcard.add(card);
                System.out.println(playerGenerator.getName() + " "
                        + card.getSuit() + card.getNumberOfChar());
            }
        }
        // 各玩家手牌排序后输出。
        System.out.println();
        Collections.sort(listcard, new ComparatorCard());
        for (int i = 0; i < listcard.size(); i++) {
            System.out.println(listcard.get(i).getSuit() + " "
                    + listcard.get(i).getNumberOfChar());
        }

    }

    // 定义的排序规则。
    @Override
    public int compare(Card o1, Card o2) {
        String suit = "黑桃  红心  梅花  方块";
        String numberOfChar = "2  3  4  5  6  7  8  9  10  J  Q  K   A";

        int resultNum = numberOfChar.indexOf(o1.getNumberOfChar())
                - numberOfChar.indexOf(o2.getNumberOfChar());

        if (resultNum > 0) {
            return -1;
        } else if (resultNum < 0) {
            return 1;
        } else {
            int resultSuit = suit.indexOf(o1.getSuit())
                    - suit.indexOf(o2.getSuit());
            if (resultSuit > 0) {
                return 1;
            } else if (resultSuit < 0) {
                return -1;
            } else {
                return 0;
            }
        }

    }

}

6、执行程序,Main方法。

package cn.davisli.carddemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class GameTest {
    public static void main(String[] args) {
        //创建一副牌。
        CardGenerator creatCard = new CardGenerator();
        creatCard.cardList();
        //获取创建的牌并打印输出。
        ArrayList<Card> pairCard = new ArrayList<Card>();
        pairCard = CardGenerator.getCard();
        CardGenerator.printCard(pairCard);
        //洗牌。
        CardGenerator.shuffle(pairCard);
        //创建游戏玩家.
        PlayerGenerator creatPlayer=new PlayerGenerator();
        creatPlayer.addPlayer();
        //获取并打印输出创建的游戏玩家。
        Map<String,PlayerGenerator> playerInfo=new HashMap<String,PlayerGenerator>();
        playerInfo=PlayerGenerator.getPlayer();
        PlayerGenerator.printUser(playerInfo);
        //开始发牌。
        creatPlayer.playCard();
        //排序输出玩家手牌.
        ComparatorCard.compare();

    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消