标题:利用随机产生器rand
只看楼主
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
 问题点数:0 回复次数:15 
利用随机产生器rand
希望和大家一起讨论,c#代码如何编写
多谢!

利用随机产生器rand,
设计一个程序由计算机发桥牌给4位玩家,
并输出每位玩家所分得的花色和点数。
梅花用C,方块用D,红心用H,黑桃用S,
牌点以A,2,3,4,5,6,7,8,9,10,J,Q,K表示。
如:
C2 C4 c7 DA D4 D10 DQ HA HJ HK S2 S6 S10
搜索更多相关主题的帖子: 产生器 rand 随机 
2005-12-04 14:26
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
得分:0 
如:
C2 C4 c7

应该是大写的 C7
不好意思,打错了!

感谢有大家的陪伴!!! E-mail:bjdcbltx@
2005-12-04 14:41
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
难度不底啊

估计写出来可以卖钱了


2005-12-04 14:54
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
你要不?我写卖给你

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-12-04 15:22
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
得分:0 
过两天应该可以贴上,还希望和大家一起分享.

感谢有大家的陪伴!!! E-mail:bjdcbltx@
2005-12-04 21:55
jaryx
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-11-21
得分:0 

挺好做吗


2005-12-04 22:17
jidegang
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2005-5-14
得分:0 
很简单啊,想要产生随机数就使用Random类
比如你所要求的
string[] DianShu=new string[]{"A","1","2","3","4","5","6","7","8","9","10","Q","K"};
string[] HuaSe=new string[]{"C","D","H","S"};
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
string JieGuo=HuaSe[ra.Next(0,12)];
Random rb=new Random(unchecked((int)DateTime.Now.Ticks));
JieGuo+=Dianshu[rb.Next(0,3)];//本人英语很烂,就用拼音了
此时JieGuo里保存的就是发出来的一张牌了,当然如果保证不发重复的话就应该使用一些保护机制了.
如上边这样写的时候,随便每次的种子都不一样了,但很容易出现重复和连续两个值是数组中连续两个元素,建议将随机数的取值范围扩大,然后在取MOD,比如上边改为:
int i=ra.Next(0,130);
string JieGuo=HuaSe[i%13];//这样同样就不容易出现连续两个取值是连续的情况了
如果想要保证不会发出重复的牌,就需要其他的算法来保证了,我不会打桥牌,也不会算分,不过既然能够知道每张牌都是什么了,想算分应该不困难吧.
2005-12-04 23:08
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
得分:0 

看到了,多谢提醒!!!
我只写了一点就遇到困难了:
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//定义变量
int n,m,i,j,k;
//输出提示
Console.WriteLine("输入花色数组的个数(4):");
int huaase=int.Parse(Console.ReadLine());//数组的个数
Console.WriteLine("输入牌点数组的个数(13):");
int paidian=int.Parse(Console.ReadLine());
Console.WriteLine("输入玩家数组的个数(4):");
int wanjia=int.Parse(Console.ReadLine());
//初始数组
char[] hs =new char[] { ’C’,’D’,’H’,’S’};
char[] pd =new char[] {'A','1','2','3','4','5','6','7','8','9','J','Q','K'};
//定义玩家数组
//产生随机数
m=13;
Random r=new Random();
for(n=0;n<=m;n++)
{
m=r.Next(0,13);
pf[m];

}
}
}
}


感谢有大家的陪伴!!! E-mail:bjdcbltx@
2005-12-05 08:20
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
得分:0 
我的思路是:

思路:

定义三个数组,分别存放:梅花C,方块D,红心H,黑桃S和牌点A,2,3,4,5,6,7,8,9,10,J,Q,K和4个玩家。

再产生(1+1)*13*4组随机数,分别从前两个数组里取花色和牌点,总共取出13张牌,取出的每13为一组存入第三个数组分发给其中的一个玩家,再从新循环3次,将4个玩家的13张牌发放完毕。

现在看来有些不好,我会继续改进的,
代码这周应该能出来了,我继续努力啊!

感谢有大家的陪伴!!! E-mail:bjdcbltx@
2005-12-05 08:23
bjdcbltx
Rank: 1
等 级:新手上路
帖 子:167
专家分:0
注 册:2005-12-4
得分:0 

using System;
using System.Text;
using System.Collections

namespace ConsoleApplication7
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//定义变量
int i,j,m,n;
//输出提示
Console.WriteLine("please input the number of 花色array(4):");
int huaase=int.Parse(Console.ReadLine());//数组的个数
Console.WriteLine("please input the number of 牌点array(13):");
int paidian=int.Parse(Console.ReadLine());
Console.WriteLine("please input the number of 玩家array(4):");
int wanjia=int.Parse(Console.ReadLine());
//初始数组
char[] hs =new char[] { ' C’,’D’,’H’,’S’};
char[] pd =new char[] {'A','1','2','3','4','5','6','7','8','9','J','Q','K'};
//定义玩家数组
string[] wj=new string[] { " ", " ", " ", " "};
//产生随机数
for(i=0;i<wanjia;i++)
{ for(j=0;j<paidian;j++)//产生一组
{
Random r1=new Random();
m=r1.Next(0,3);
wj[i]=wj[i]+hs[m];//产生花色

Random r2=new Random();
n=r2.Next(0,12);
wj[i]=wj[i]+pf[n];//产生牌点

}//end for j
//输出结果
Console.WriteLine("玩家{0}:{1}",i+1,wj[i]);

}//end for i


}
}
}


感谢有大家的陪伴!!! E-mail:bjdcbltx@
2005-12-05 19:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-36589-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.409485 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved