一个扑克牌游戏(准确的说就是“斗地主”),本来是打算取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;
Randomram
=
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)
{
RandomTestrt
=
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();
}
}
}