`
MrCrapBag
  • 浏览: 4227 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【扑克牌的洗牌和排序】

 
阅读更多
用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());
    }

}
分享到:
评论

相关推荐

    java扑克牌的创建、洗牌、分组、排序

    使用集合只是创建扑克和相关的洗牌、排序、分组等操作

    Java集合框架的一个扑克牌小程序

    * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌的集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、...

    扑克牌游戏

    简单程序设计题,编写一个扑克牌游戏,用计算机模拟洗牌,分发给四个玩家并将四个玩家的牌显示输出,并进一步设计,玩家的牌按照排序算法从小到大依次排序,并显示输出。 提示:用一维数组Card随机存放52张牌(不...

    Delphi 扑克牌界面源码

    Delphi源码在 Delphi XE7 下测试...自创 的扑克牌算法思想,从“洗牌”、“抽明牌”、“分牌”到“按点数排序”、“按花色排序”等,更进一步的编程就由各位去想象了,毕竟现在扑克牌游戏太多了,只为学习和交流用。

    java模拟斗地主洗牌发牌-可拓展

    2)、洗牌:将Map集合的键放在List中,在使用Collections.shuffle()进行洗牌 3)、发牌:发给三个人,就是三个List加一个底牌的List 4)、看牌:将三人的List和底牌List的值进行排序(从大到小)

    基于Python制作一副扑克牌过程详解

    整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王、小王之后的 52 张扑克牌,并实现随机抽牌、排序、洗牌等功能; 创建一个纸牌类 一副扑克除去大王小王之外,剩下的 52 张纸牌以花色为...

    javascript实例–教你实现扑克牌洗牌功能

    我们一般都会按照顺序把随机摸过来的牌从小到大的顺序在手上理整齐(记得小时候打牌两副牌手都抓不过来),这篇随笔就是想通过实现这个功能来熟悉下js中排序数组等相关知识。用到知识点:1.工厂方式创建对象2.js数组...

    基于Python实现扑克牌面试题

    这篇文章主要介绍了基于Python实现扑克牌面试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 据说是腾讯的面试题,以下是要求: 一副从1到n的牌,每次从牌堆...

    javascript实例--教你实现扑克牌洗牌功能

    我们一般都会按照顺序把随机摸过来的牌从小到大的顺序在手上理整齐(记得小时候打牌两副牌手都抓不过来),这篇随笔就是想通过实现这个功能来熟悉下js中排序数组等相关知识。

    基于C++实现的(控制台)扑克牌游戏【100013209】

    创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。 本程序新建了PerDeck和PlayDeck两个类,类PerDeck表示某个人拿的牌,类PlayDeck表示四个人玩牌的过程,对原程序的修改...

    C语言实现随机发扑克牌

    本文实例为大家分享了C语言实现随机发扑克牌的具体代码,供大家参考,具体内容如下 算法如下: 1、将1-10作为方块、2-20作为梅花,3-30作为红桃,4-40作为黑桃,JQK以及大小王分别排序共54张存放在一维数组中。 3、3...

    C语言编写洗牌发牌程序

    用C语言编写洗牌发牌程序,供大家参考,具体内容如下 题目 现在只有一套扑克牌中52张副牌(无大王小王),包含了4种花色的牌 现在打乱顺序后分给甲乙丙丁四人 全部分配完毕后,输出甲乙丙丁四人所获得的扑克大小及...

    C++实现洗牌发牌排序功能的示例代码

    在内存中模拟出一副牌,然后模拟洗牌,发牌等动作。 流程是这样的:构建一副牌保存到一个数组中—洗牌—创建玩家—向玩家发牌–输出每个玩家的牌。 #include #include #include //定义扑克的花色 enum Suit{ ...

    python实现斗地主分牌洗牌

    1、建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的。 2、编写一段代码完成洗牌功能,即将刚才的序列从有序的排列变成随机的无序排列。 3、编写一段代码完成切牌功能,即找到一个1-54的随机数,将...

    比比速算24点游戏 v0.0.1.3

    二、游戏过程1、洗牌 玩家用鼠标点击“洗牌”按钮,软件将自动完成52张扑克的随机排序,并均分给玩家与电脑。2、游戏 玩家用鼠标点击玩家的扑克牌背面,软件将发出2张扑克,同时,电脑也自动发出2张扑克,并开始...

    sr.rar_www.srpuke .com

    52张扑克牌类得实现,管理类得实现,实现对扑克牌的排序,洗牌,随即抽牌,随即发牌的实现。

    蓝桥杯信息学奥赛练习试题

    洗扑克牌(乱数排列) Craps赌博游戏 约瑟夫问题(Josephus Problem) 集合问题 排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序...

    经典算法大全,常用的算法都在这里

    洗扑克牌(乱数排列) Craps赌博游戏 约瑟夫问题(Josephus Problem) 集合问题 排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序...

    C语言经典算法大全(几十个经典案例,都有详尽代码)

    洗扑克牌(乱数排列) Craps赌博游戏 约瑟夫问题(Josephus Problem) 集合问题 排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序...

    利用Python序列实现斗地主操作中的洗牌,发牌,切牌,理牌,随即地主简单功能

    1、建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的。 2、编写一段代码完成洗牌功能,即将刚才的序列从有序的排列变成随机的无序排列。 3、编写一段代码完成切牌功能,即找到一个1-54的随机数,将...

Global site tag (gtag.js) - Google Analytics