【扑克牌的洗牌和排序】

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值