用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());
}
}