扑克牌比较 (Java)

扑克牌比较 (Java)

描述:本程序主要实现52张扑克牌(除去大小王)的洗牌,发牌,比较功能。首先创建两个用户,输入用户名,各分发两张扑克牌,然后从两用户中各自拿出手中最大的扑克牌比较,大的获胜。

扑克牌的比较规则:先按数值比较:2>A>K>Q>J>10>9>8>7>6>5>4>3;若数值相同:则比较花色:红桃 > 黑桃 > 方片 > 梅花。

输入:两用户名,之后洗牌、发牌、比较自动执行。

输出:洗牌、发牌、比较过程。

说明:此问题是无意中看到的,写的时候比较随意,所以代码可能有些混乱,有疑问请留言^_^

代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 * 扑克牌
 * 
 * 分两个玩家,分别发两张牌,比较二者两牌中最大牌的大小,大的胜,
 * 2>A>K>Q>J>10>9>8>7>6>5>4>3
 * 
 * 若相同,则按花色大小比较:红桃 > 黑桃 > 方片 > 梅花
 *
 */

public class Card {
    static final String[] flo = {"梅花","方片","黑桃","红桃"};
    static final String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

    public int flower; // 花色
    public int number;  // 大小 

    public Card() {}

    public Card(int flower, int number) {
        super();
        this.flower = flower;
        this.number = number;
    }

    public static void main(String[] args) throws InterruptedException {
        Role[] role = new Role[2];

        // 按顺序存牌
        List<Card> list = new ArrayList<Card>();
        for (int i = 0; i < flo.length; i++) {
            for (int j = 0; j < num.length; j++) {
                list.add(new Card(i,j));
            }
        }

        // 创建角色
        for (int i = 0; i < 2; i++) {
            System.out.println("角色"+(i+1));
            System.out.print("姓名:");
            role[i] = new Role();
            role[i].setName(new Scanner(System.in).nextLine());
            System.out.println("******************************");
        }

        // 洗牌
        System.out.println("------------开始洗牌------------");
        washCard(list);
        Thread.sleep(2000);
        System.out.println("------------洗牌完毕------------");
        System.out.println();
        Thread.sleep(1000);

        // 发牌
        System.out.println("------------开始发牌------------");
        Thread.sleep(2000);
        for (int i = 0; i < 4; i++) {
            Card pos = list.remove((int)(Math.random()*list.size()));
            role[i/2].getCard()[i%2].flower = pos.flower;
            role[i/2].getCard()[i%2].number = pos.number;
        }
        System.out.println("------------发牌完毕------------");
        System.out.println();
        Thread.sleep(2000);

        // 比较
        System.out.println("------------开始比较------------");
        Thread.sleep(1000);
        for (int i = 0; i < role.length; i++) {
            role[i].setMaxCard(Role.compare(role[i].getCard()[0], role[i].getCard()[1]));
            Card c = role[i].getMaxCard();
            System.out.println("玩家"+role[i].getName()+"的最大牌为:"+flo[c.flower]+""+num[c.number]);
            Thread.sleep(3000);
        }

        Card card = Role.compare(role[0].getMaxCard(), role[1].getMaxCard());
        if(role[0].getMaxCard().flower==card.flower && role[0].getMaxCard().number==card.number){
            System.out.println("玩家"+role[0].getName()+"获胜");
        }else {System.out.println("玩家"+role[1].getName()+"获胜");}
        Thread.sleep(1000);
        System.out.println("------------比较完毕------------");
        System.out.println();
        Thread.sleep(2000);

        // 查看结果
        System.out.println("------------查看结果------------");
        Thread.sleep(1000);
        for (int i = 0; i < role.length; i++) {
            System.out.print("玩家"+role[i].getName()+":");
            System.out.print(flo[role[i].getCard()[0].flower]+""+num[role[i].getCard()[0].number]+",");
            System.out.println(flo[role[i].getCard()[1].flower]+""+num[role[i].getCard()[1].number]);
            Thread.sleep(1000);
        }
        System.out.println("剩余牌:");
        for (int i = 0; i < list.size(); i++) {
            Card c = list.get(i);
            System.out.print(flo[c.flower]+""+num[c.number]);
            if(i!=list.size()-1) System.out.print(",");
        }
        System.out.println();
    }

    // 洗牌
    public static void washCard(List<Card> list){
        int size = list.size();
        for (int i = size-1; i > 0; i--) {
            int random = Math.abs(new Random().nextInt(i));
            Card temp1 = list.get(random), temp2 = list.get(i);
            list.remove(random); list.add(random, temp2);
            list.remove(i); list.add(i, temp1);
        }
    }

}

// 玩家角色类
class Role{
    private String name;  // 姓名
    private Card[] card;  // 两张牌
    private Card maxCard; // 最大牌

    public Role() {
        card = new Card[2];
        for (int i = 0; i < card.length; i++) { card[i] = new Card(); }
    }

    // 比较最大张牌
    public static Card compare(Card c1, Card c2){
        if(c1.number == c2.number)
            return c1.flower > c2.flower ? c1 : c2;
        return c1.number > c2.number ? c1 : c2;
    }

    public Card getMaxCard(){
        return this.maxCard;
    }

    public void setMaxCard(Card c){
        this.maxCard = c;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Card[] getCard() {
        return card;
    }
    public void setCard(Card[] card) {
        this.card = card;
    }

}

结果截图:

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值