Java简易扑克牌

代码分为四个类

  • 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;
}

@Override
public String toString() {
    return id + name;
}

@Override
public int hashCode() {
    return id;
}

@Override
public 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("----------------------------");
    }
}

}

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值