【扑克牌的洗牌和排序】

用java实现扑克牌的洗牌和排序功能:创建抽象类Card 其中有一个方法showhand()用来输出牌的信息。

新建Card的子类 squard、heart 、diamond、club 其中要有数组包含牌号;然后建立一个game类main在其中,建立char数组包含13张牌,然后生成52张牌 ;然后编写一个washcard() 然后根据花色和数字排序



具体实现如下:

/*
 * 文件名:CardColor.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: CardColor.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 牌的花色,枚举型
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public enum CardColor
{
    SPADE("spade", 4), HEART("heart", 3), DIAMOND("diamond", 2), CLUB("club", 1);

    private String colorname;

    private int priority;

    private CardColor(String name, int a)
    {
        this.colorname = name;
        this.priority = a;
    }

    public String getColorname()
    {
        return colorname;
    }

    public int getPriority()
    {
        return priority;
    }

}


/*
 * 文件名:Card.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Card.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 牌,抽象类
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public abstract class Card
{
    public CardColor cardColor;

    public int cardNumber;

    private static String[] no;

    public CardColor getCardColor()
    {
        return cardColor;
    }

    public int getCardNumber()
    {
        return cardNumber;
    }

    public void setCardNumber(int cardNumber)
    {
        this.cardNumber = cardNumber;
    }

    public void showhand()
    {

        System.out.println("The Card is:" + cardColor.getColorname()
                + no[cardNumber - 1]);
    }

    static
    {
        no = new String[13];
        no[0] = "A";
        no[1] = "2";
        no[2] = "3";
        no[3] = "4";
        no[4] = "5";
        no[5] = "6";
        no[6] = "7";
        no[7] = "8";
        no[8] = "9";
        no[9] = "10";
        no[10] = "J";
        no[11] = "Q";
        no[12] = "K";
    }

}


/*
 * 文件名:Squard.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Squard.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 黑桃
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class Spade extends Card
{
    public Spade(int number)
    {
        if (number > 0 && number < 14)
        {
            this.cardColor = CardColor.SPADE;
            this.cardNumber = number;
        }

    }
}


/*
 * 文件名:Heart.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Heart.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 红心
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class Heart extends Card
{
    public Heart(int number)
    {
        if (number > 0 && number < 14)
        {
            this.cardNumber = number;
            this.cardColor = CardColor.HEART;
        }

    }
}


/*
 * 文件名:Diamond.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Diamond.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 方片
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class Diamond extends Card
{
    public Diamond(int number)
    {
        if (number > 0 && number < 14)
        {
            this.cardNumber = number;
            this.cardColor = CardColor.DIAMOND;
        }

    }
}


/*
 * 文件名:Club.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Club.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.card;

/**
 * 梅花牌
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class Club extends Card
{
    public Club(int number)
    {
        if (number > 0 && number < 14)
        {
            this.cardNumber = number;
            this.cardColor = CardColor.CLUB;
        }

    }
}


/*
 * 文件名:CardComparator.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: CardComparator.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game.compare;

import java.util.Comparator;

import com.wx.game.card.Card;

/**
 * 比较器
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class CardComparator implements Comparator<Object>
{

    @Override
    public int compare(Object o1, Object o2)
    {
        Card cardA = (Card) o1;
        Card cardB = (Card) o2;

        if (cardA.getCardColor().getPriority() > cardB.getCardColor()
                .getPriority())
        {
            return 1;
        }

        else if (cardA.getCardColor().getPriority() == cardB.getCardColor()
                .getPriority())
        {
            if (cardA.getCardNumber() < cardB.getCardNumber())
            {
                return -1;
            }
            return 1;
        }
        else
        {
            return -1;
        }
    }
}


/*
 * 文件名:InitCards.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: InitCards.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game;

import com.wx.game.card.Card;
import com.wx.game.card.Club;
import com.wx.game.card.Diamond;
import com.wx.game.card.Heart;
import com.wx.game.card.Spade;

/**
 * 初始化牌的线程
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class InitCards implements Runnable
{
    private int number;

    private Game game;

    public InitCards(int no, Game g)
    {
        this.number = no;
        this.game = g;
    }

    @Override
    public void run()
    {
        Card squard = new Spade(number);
        Card heart = new Heart(number);
        Card diamond = new Diamond(number);
        Card club = new Club(number);

        synchronized (game)
        {
            game.getCards()[game.getIndex()] = squard;
            game.getCards()[game.getIndex()] = heart;
            game.getCards()[game.getIndex()] = diamond;
            game.getCards()[game.getIndex()] = club;
        }
    }
}


/*
 * 文件名:Game.java
 * 版权:Copyright All Rights Reserved. 
 * 描述: Game.java
 * 修改人:WX
 * 修改时间:2013-3-26
 * 修改内容:新增
 */
package com.wx.game;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import com.wx.game.card.Card;
import com.wx.game.compare.CardComparator;

/**
 * 游戏入口
 * 
 * <pre>
 * </pre>
 * 
 * @author WX
 * @version 1.0
 * @since 1.0
 */
public class Game
{
    private Card[] cards = new Card[52];

    private int fullIndx = 0;

    public Card[] getCards()
    {
        return cards;
    }

    public int getIndex()
    {
        return fullIndx++ % 52;
    }

    /**
     * 程序入口
     * 
     * @param args
     */
    public static void main(String[] args)
    {
        Game game = new Game();
        System.out.println("======wash  card=======");
        game.washcard(game);
        game.sortcard(game);
        System.out.println("======after sort=======");
        game.washcard(game);
    }

    /**
     * 洗牌
     * 
     * @param game
     */
    public void washcard(Game game)
    {
        InitCards[] init = new InitCards[13];
        for (int i = 0; i < 13; i++)
        {
            init[i] = new InitCards(i + 1, game);
        }
        for (int i = 0; i < 13; i++)
        {
            new Thread(init[i]).start();
        }

        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        for (Card c : game.getCards())
        {
            c.showhand();
        }
    }

    /**
     * 排序
     * 
     * @param game
     */
    public void sortcard(Game game)
    {
        List<Card> templist = Arrays.asList(game.getCards());
        Collections.sort(templist, new CardComparator());
        templist.toArray(game.getCards());
    }

}

你可能感兴趣的:(排序)