洗牌游戏

实现洗牌游戏的一种算法是:遍历每个位置上的牌,然后与随机位置上的牌交换。

对于牌来讲,2个关键的因素是面值和类型(红桃、梅花等)。

    public class Card
    {
        private string mianzhi;
        private string leixin;

        public Card(string m, string l)
        {
            mianzhi = m;
            leixin = l;
        }

        public override string ToString()
        {
            return leixin + " " + mianzhi;
        }
    }

客户端程序有3个方法,一个是初始化牌的数组,一个是遍历所有牌并显示,还有一个是使用算法洗牌。

    class Program
    {
        private static Card[] allCards = new Card[52];
        private static string[] ms = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
        private  static string[] ls = { "红桃", "方块", "梅花", "黑桃" };

        static void Main(string[] args)
        {
            Init();
            ShowAllCards();
            Console.WriteLine("\r\n");
            Shuffle();
            ShowAllCards();
            Console.ReadKey();
        }

        private static void Shuffle()
        {
            Random r = new Random();
            Card tempCard;

            //依次遍历所有牌与随机位置上的牌交换位置
            for (int i = 0; i < allCards.Length; i++)
            {
                int ran = r.Next(52);
                tempCard = allCards[i];
                allCards[i] = allCards[ran];
                allCards[ran] = tempCard;
            }
        }

        private static void Init()
        {
            for (int i = 0; i < allCards.Length; i++)
            {
                allCards[i] = new Card(ms[i % 13],ls[i%4]);
            }
        }

        private static void ShowAllCards()
        {
            foreach (var item in allCards)
            {
                Console.Write(item.ToString() + " ");
            }
        }
    }


洗牌游戏

时间: 2024-08-08 12:13:18

洗牌游戏的相关文章

实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)

1.namedtuple:命名元组,可以创建一个没有方法只有属性的类 from collections import namedtuple card = namedtuple('card',['rank','suit']) # rank 牌面大小,suit牌面的花色 # card其实就是namedtuple创建的一个类,其属性就是rank和suit c1 = card(2,'红心 ') # c1是实例化的对象 print(c1) print(c1.suit) 运行结果: card(rank=2,

[JLOI2013]卡牌游戏

题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏.然后卡片将会被放回卡牌堆里并重新洗牌.被处决的人按顺时针的下一个人将会作为下一轮的庄家.那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者.现在你预先知道了总共有M张卡片,也知道每张卡片上的数字.现在你需要确定每个

算法之洗牌算法

洗牌算法是我们常见的随机问题,在玩游戏.随机排序时经常会碰到,一个最常用的地方就是组卷.它可以抽象成这样:M以内的所有自然数的随机顺序数组. package com.math; import java.util.Random; /** * @author summer * */ public class Shuffle { static final int[] a = new int[54]; static Random rnd = new Random(); static{ for(int i

1965: [Ahoi2005]SHUFFLE 洗牌

1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 408  Solved: 240[Submit][Status][Discuss] Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克

bzoj1965 [Ahoi2005]SHUFFLE 洗牌

Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克牌对于像他们这样的高智商人才来说太简单了.有人提出了扑克牌的一种新的玩法. 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠

JLOI 2013 卡牌游戏

问题描述: N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏.然后卡片将会被放回卡牌堆里并重新洗牌.被处决的人按顺时针的下一个人将会作为下一轮的庄家.那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者.现在你预先知道了总共有M张卡片,也知道每张卡片上的数字.现在你需要确定每

后互联网+时代来临按摩O2O洗牌加速

在很多人看来,互联网+才刚刚兴起:不过在刘旷看来,在很多传统行业领域,互联网+已经进入到了后时代.大家最熟悉的莫过于滴滴快的之间的疯狂烧钱大战,从开战到结合,也就是短短的2年多时间,就宣告了对整个互联网打车市场的垄断.而今天刘旷想跟大家探讨的按摩O2O,同样也在开始迎来一个后互联网+时代. 就在上个月,刘旷刚刚通过<按摩O2O,上门与到店的角逐>一文阐述了国内主要的几大按摩O2O模式.目前不管是上门还是到店,亦或是上门与到店并做,都已经开始呈现了少数几家独大的局面.按摩O2O经历了去年一年疯狂

一步一步写算法(之洗牌算法)

[ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 扑克牌洗牌是我们生活中比較喜欢玩的一个游戏.那么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c执行库其中有一个随机函数rand,它能够生成0~32767之间的随意数.那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢? 在这里我抛砖引玉一下,谈一谈自己眼下已经看到的两个算法.欢迎朋友们谈一谈其它的方法. (1)全局洗牌法 过程例如以下所看到的: a)首先生成一个数组,大小为54

【bzoj1965】 [Ahoi2005]SHUFFLE 洗牌 欧拉定理

题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克牌对于像他们这样的高智商人才来说太简单了.有人提出了扑克牌的一种新的玩法. 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二张,再取