一個撲克牌遊戲(準確的說就是“鬥地主”),本來是打算取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();
}
}
}