撲克牌的隨機發牌程式

來源:互聯網
上載者:User
一個撲克牌遊戲(準確的說就是“鬥地主”),本來是打算取0-53的隨機數,取過的就做一個標識,迴圈直至全部完。但是細想一下,效率實在是太低了,最後決定用亂序的方式,感覺還不錯。不知道還有沒有更好的辦法,請大家多多指教!

using System;
using System.Collections;
namespace ConsoleApplication11
{
    /// <summary>
    /// RandomTEST 的摘要說明。
    /// </summary>
    public class RandomTest
    {        
        //0-12表示黑桃A到K;
        //13-25表示紅桃A到K;
        //26-38表示梅花A到K;
        //39-51表示方塊A到K;
        //52表示小鬼,53表示大鬼;
        public string man_a;
        public string man_b;
        public string man_c;
        public string remnant;
        private    int[] array = new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53};
        //亂序演算法
        public void Random_Sequence()
        {
            int m,n;
            Random ram=new Random();
            for(int i=0;i<1000;i++)
            {
                m=ram.Next(0,54);
                n=ram.Next(0,54);
                if (m!=n)
                {
                    this.permute(m,n);
                }
            }
        }
        //兩個數置換
        public void permute(int a,int b)
        {
            array[a]=array[a]+array[b];
            array[b]=array[a]-array[b];
            array[a]=array[a]-array[b];
        }
        //發牌
        public void deal_cards()
        {
            for (int i=0;i<17;i++)
            {    
                man_a=man_a+" "+array[i*3].ToString();
                man_b=man_b+" "+array[i*3+1].ToString();
                man_c=man_c+" "+array[i*3+2].ToString();
            }
            remnant=array[51].ToString()+" "+array[52].ToString()+" "+array[53].ToString();
        }
    }
    public class GameStart
    {
        [STAThread]
        static void Main(string[] args)
        {
            RandomTest rt= new RandomTest();
            rt.Random_Sequence();
            rt.deal_cards();
            Console.WriteLine("玩家甲的牌型:"+rt.man_a.ToString());
            Console.WriteLine("玩家乙的牌型:"+rt.man_b.ToString());
            Console.WriteLine("玩家丙的牌型:"+rt.man_c.ToString());
            Console.WriteLine("剩餘的牌型:"+rt.remnant.ToString());
            Console.ReadLine();
        }
    }
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.