`
MrCrapBag
  • 浏览: 4495 次
  • 性别: 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());
    }

}
分享到:
评论

相关推荐

    jQuery+CSS3扑克洗牌和扑克牌翻转动画特效

    这个项目“jQuery+CSS3扑克洗牌和扑克牌翻转动画特效”提供了一种创新的方法来增强网站的交互性和趣味性。以下是对这个项目的详细解读: 首先,我们要了解jQuery。jQuery是一个流行的JavaScript库,它简化了HTML...

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

    在Java编程中,创建、洗牌、分组和排序扑克牌是一种常见的算法实践,它可以用于理解和掌握数据结构、集合操作以及随机数生成等基础知识。在这个场景中,我们通常会使用集合框架来实现扑克牌的逻辑,例如ArrayList...

    C经典算法之洗扑克牌(乱数排列)

    程序还包含了将数字转换成扑克牌花色和数字的逻辑。这个转换过程包括两个方面: - **花色转换**:通过`(poker[i]-1)/13`计算出牌的花色。由于一副标准扑克牌分为四种花色,每种花色有13张牌,因此可以通过除以13的...

    java 扑克牌程序

    在 Java 程序中,`Card` 类主要用于表示扑克牌,并且包含了洗牌 (`washCard`) 和发牌 (`sendCard`) 的功能。 #### 1.1 **属性** - `int[] poker`: 存储所有扑克牌的数组,长度为 104,包含了两副扑克牌。 - `Random...

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

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

    扑克牌图片高清+背图.rar

    这涉及到数据结构和算法的知识,例如使用数组或列表存储牌组,使用排序算法进行洗牌模拟。 4. **编程语言与框架**:开发扑克牌游戏可以使用多种编程语言,如Python、Java、C#、JavaScript等。不同的游戏引擎如Unity...

    扑克牌发牌程序

    - **洗牌算法**:在`random()`函数中,使用了随机数生成器`rand()`结合循环和条件判断实现了洗牌逻辑,确保每次运行程序时牌的顺序都是随机的。 - **排序算法**:在`zhengli()`函数中,通过嵌套循环实现了简单的冒泡...

    扑克牌源代码

    在本项目中,"扑克牌源代码"是一个基于Windows窗体程序实现的程序,主要功能是进行扑克牌的发牌和排序。这个程序对于学习面向对象编程、算法设计以及图形用户界面(GUI)的开发非常有帮助。接下来,我们将详细讨论...

    jquery扑克洗牌魔术变换.rar

    在这个效果中,我们将模拟真实的扑克牌洗牌过程,通过编程的方式,使一组扑克牌图像在页面上随机排序,呈现出类似洗牌的效果。这种效果主要依赖于jQuery库的强大功能,尤其是其提供的动画和事件处理机制。 jQuery库...

    数据结构课程设计之扑克牌

    除了基本的洗牌和发牌,可能还需要实现其他功能,如查看剩余牌的数量、比较两张牌的大小、排序牌组等。这些都需要利用到数据结构和算法的知识。 六、测试与优化 完成以上功能后,需要进行大量的测试以确保程序的...

    基于jQuery实现的类似扑克牌洗牌样式切换的图片特效.zip

    在本项目中,"基于jQuery实现的类似扑克牌洗牌样式切换的图片特效.zip" 提供了一个使用jQuery库创建的动态图片切换效果,类似于扑克牌的洗牌动作。这种效果可以为网页增添互动性和视觉吸引力,常用于各种游戏或者...

    2024CSP-J复赛真题题解-T1:扑克牌

    例如,题目可能会要求选手编写程序来模拟一副扑克牌的洗牌过程,或者是要求在某些规则下对扑克牌进行排序和抽取。这些任务需要选手有扎实的编程基础和对算法的深刻理解。 题解通常会从以下几个方面着手: 1. 问题...

    扑克牌程序

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个扑克牌程序,这涉及到扑克牌的构造、基本算法以及比较、搜索和排序等关键操作。首先,我们需要理解扑克牌的基本结构和规则,以便在代码中有效地模拟它们。 ...

    treeset 和 hashlist 实现的扑克牌游戏

    在具体实现时,我们可能会创建一个`Card`类表示扑克牌,包含花色和点数属性,并重写`Comparable`接口或提供`Comparator`来确定扑克牌的排序规则。然后,创建一个`TreeSet&lt;Card&gt;`实例来存储和管理所有的牌。当需要...

    C++扑克牌的洗牌发牌游戏设计

    在C++中设计扑克牌洗牌发牌游戏需要对面向对象编程有一定的了解,以及对类和对象的操作熟练掌握。以下将详细介绍与C++扑克牌洗牌发牌游戏设计相关的知识点。 **1. 类的定义和使用** 首先,我们需要定义扑克牌...

    整套扑克牌的图片

    2. **教学工具**:在教授概率论、统计学或算法等相关课程时,可视化扑克牌的示例有助于解释概念,如洗牌算法、组合和概率计算等。 3. **数据可视化**:在数据分析项目中,可以利用这些图片作为元素来展示数据,比如...

    扑克牌图片素材

    这样可以方便地进行排序、比较和操作,例如洗牌、发牌等。在Python中,可能会有如下定义: ```python class Card: def __init__(self, value, suit): self.value = value self.suit = suit # 创建示例扑克牌 ...

    扑克牌图标 (可用于编程)

    例如,在讲解排序算法如快速排序或归并排序时,用扑克牌图标模拟处理过程,既直观又生动。同样,它们也能用于模拟概率模型,如蒙特卡洛模拟,帮助理解随机事件的概率分布。 在设计移动应用或网站时,扑克牌图标可以...

    C语言扑克牌问题

    在IT领域,编程挑战是常见的学习和练习方式,其中“C语言扑克牌问题”是一个典型的问题,它涉及到了C语言的基础知识以及算法设计。在这个问题中,通常要求编写程序来模拟扑克牌游戏,如洗牌、发牌等操作。下面我们将...

Global site tag (gtag.js) - Google Analytics