Java简易扑克牌

来源:互联网 发布:网络直播在线观看 编辑:程序博客网 时间:2024/05/16 08:36

代码分为四个类

  • Card类:纸牌
  • Player类:玩家
  • CardsProvider类:简单的单例模式,只用于返回一副扑克牌
  • Test类:测试
    代码过于简单,直接上代码:
    `Card类

    package com.calf.puke;

    public class Card implements Comparable{
    //花色1234分别代表方块、梅花、红桃、黑桃
    private int huaSe; //花色 ♠♣♥♦

    //数字2-14分别代表12345678910JQKA
    private int num; // 数字

    public Card() {
    // TODO Auto-generated constructor stub
    }

    //调用这个函数前要判断huaSe和num是否在1-4和1-14范围
    public Card(int huaSe, int num) {
    super();
    this.huaSe = huaSe;
    this.num = num;
    }

    public int getHuaSe() {
    return huaSe;
    }

    public void setHuaSe(int huaSe) {
    this.huaSe = huaSe;
    }

    public int getNum() {
    return num;
    }

    public void setNum(int num) {
    this.num = num;
    }

    @Override
    public int hashCode() {
    return Integer.valueOf(this.huaSe + “” +this.huaSe);
    }

    @Override
    public boolean equals(Object obj) {
    if(this == obj)
    return true;
    if(null == obj)
    return false;
    if (obj instanceof Card) {
    Card card = (Card) obj;
    if(card.num == this.num && card.huaSe == this.huaSe)
    return true;
    }
    return false;
    }

    @Override
    public String toString() {
    String numStr = ” “; //数字转字符 即: 11->J 12-> Q 13->K 14->A

    String huaSeStr = " "; //花色转字符 花色1234分别代表方块、梅花、红桃、黑桃if(num <= 10 )     numStr = String.valueOf(num);else{    switch (num) {    case 11:        numStr = "J";        break;    case 12:        numStr = "Q";        break;    case 13:        numStr = "K";        break;    case 14:        numStr = "A";        break;    default:        numStr = "错误的数字";        break;    }}//花色转字符switch (huaSe) {case 1:    huaSeStr = "方块";    break;case 2: //♠♣♥♦    huaSeStr = "梅花";    break;case 3:    huaSeStr = "红桃";    break;case 4:    huaSeStr = "黑桃";    break;default:    huaSeStr = "错误的花色";    break;}return huaSeStr +" " + numStr;

    }

    @Override
    public int compareTo(Card o) {
    if(this.num > o.num)
    return 1;
    else if (this.num == o.num) {
    if(this.huaSe > o.huaSe){
    return 1;
    }else if (this.huaSe == o.huaSe) {
    return 0;
    }else {
    return -1;
    }
    }else
    return -1;
    }

}
`Player类

package com.calf.puke;import java.util.ArrayList;import java.util.Comparator;import java.util.List;public class Player{        private int id; //id        private String name; //姓名private List<Card> cards = new ArrayList<Card>(); //手中的牌public Player() {    // TODO Auto-generated constructor stub}public Player(int id, String name) {    super();    this.id = id;    this.name = name;}public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}@Overridepublic String toString() {    return id + name;}@Overridepublic int hashCode() {    return id;}@Overridepublic boolean equals(Object obj) {    if(obj == this)        return true;    if(null == obj)        return false;    if (obj instanceof Player) {        Player player = (Player) obj;        if(this.id == player.id && this.name == player.name)            return true;    }    return false;}public List<Card> getCards() {    return cards;}public void setCards(List<Card> cards) {    this.cards = cards;}

}


CardProvider类

    package com.calf.puke;    import java.util.ArrayList;    import java.util.List;//一副牌类,用单例模式public class CardProvider {    //牌    private static List<Card> cards;private CardProvider(){}public static List<Card> getSuitCards() {    if(null == cards)        createCards();    return cards;}/** * 洗牌 *    创建一副52张没有大小王的牌 * @return */private static void createCards() {    cards = new ArrayList<Card>();    //牌的数字从2-14    for(int i = 2; i <= 14; i++)    {        //牌的花色从1-4        for(int j = 1; j <= 4; j++)        {            Card card = new Card(j,i);            cards.add(card);        }    }}

}

Test类

package com.calf.puke;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Random;import java.util.Scanner;public class Test {public static void main(String[] args) {    //获取一副新牌    List<Card> cards = CardProvider.getSuitCards();    //打乱这副牌    Collections.shuffle(cards);    //玩家对象    List<Player> players = new ArrayList<Player>();    //创建两个玩家    String idString; //用来接收键盘输入    String name; //用来接收键盘输入    Scanner console = new Scanner(System.in); //获取控制台输入    while(players.size() < 2) {        System.out.println("请输入玩家 " + (players.size()+1) + "的id:");        idString = console.nextLine();        try {            int id = Integer.parseInt(idString);            System.out.println("请输入玩家姓名:");            name = console.nextLine();            Player player = new Player(id,name);            players.add(player);        }catch (NumberFormatException e) {            System.out.println("id必须是整数,请重新输入...");            continue;        }    }    //给两个玩家一人一张牌    int index = 0; //牌的标号,每取一张自增1    for(int i = 0; i < players.size();i++)    {        Player player = players.get(i);        Card tempCard;        tempCard =                 new Card(cards.get(index).getHuaSe(),cards.get(index).getNum());        index++;        players.get(i).getCards().add(tempCard);    }    Player player1 = players.get(0);    Player player2 = players.get(1);    int result = player1.getCards().get(0).compareTo(            player2.getCards().get(0));    switch (result) {    case 0:        System.out.println("平局");        break;    case 1:        System.out.println("玩家1胜");        break;    case -1:        System.out.println("玩家2胜");        break;    default:        System.out.println("出错");        break;    }    for (Iterator iterator = players.iterator(); iterator.hasNext();) {        System.out.println("----------玩家信息-----------");        Player player = (Player) iterator.next();        System.out.println(player);        System.out.println(player.getCards());        System.out.println("----------------------------");    }}

}

`