开发环境C#,想了解实现随机发牌的思路..思路就好 新注册没什么分..

fjzqdwx 2009-03-28 03:11:24
我自己的思路:
1,2...,10 顺序存入ArrayList....

然后随机生成0~9的数..
在ArrayList中取索引..
取完将此数从ArrayList中Remove()掉
存入新的ArrayList....

随机生成0~8的数..取索引..Remove()掉..存入集合
以此类推..

发牌的时候读那个新建的ArrayList就等于随机发牌


/////////////////////////////////////////
大侠路过指点下 有好的思路请留言告诉我 谢谢
...全文
143 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
study_cn 2009-12-20
  • 打赏
  • 举报
回复
以下为c#语言实现的,自动发牌的代码,其中for循环保证52张牌互不重复。仅供参考。
Random ra=new Random();
int[] a=new int[52];
int m,t=1;
bool flag;
while(t<=52)
{
m=ra.Next(1,52);
for(int i=0,flag=true;i<=t&&flag=True;i++)
if(m==a[i]) flag=false;
if(flag)
a[t++]=m;

}
fjzqdwx 2009-03-28
  • 打赏
  • 举报
回复
to l376278721:
恩谢谢指点,随机数产生我略知一二.

申明一个随机数ran(我只知道需要时间种子是最简单的种子)
ran%4 -->是随机生成0~3
ran%4+1 -->是随机生成1~4
然后根据你到底需要生成怎样的随机数来写算法,小弟理解就是算区间.

不知道上面的方法会不会对需要的朋友有点帮助.

to liujiayu10 :
恩 还是谢谢指点,我大概了解你的思路了.发牌的总数不大还好说,
如果我要实现随机选择题号,题库里有好多题那最后算法会耗资源的说..


大侠路过请踩踩.小弟学习中

java_renyusheng 2009-03-28
  • 打赏
  • 举报
回复
发一次牌就向数据库中保存数据,这样的思路不太好吧
liujiayu10 2009-03-28
  • 打赏
  • 举报
回复
建立一个库保存已经发过牌的号,每次随机生成的号,都在数据库里找一遍,没有就可以发牌了,有的话,就表示存在,另换一个
l376278721 2009-03-28
  • 打赏
  • 举报
回复
当然不一定离散数学里面才有
l376278721 2009-03-28
  • 打赏
  • 举报
回复
看看《离散数学》
这本书中有说到产生随机数的算法
fjzqdwx 2009-03-28
  • 打赏
  • 举报
回复
小弟不才...不知道C#封装了这么神奇的方法还有类...

// 声明一个随机数生成变量用当前时间做为种子
// poker[]为顺序数组....
// .Next是Random的一个方法.....神啊....


Random rnd = new Random((int)DateTime.Now.Ticks);

int j = 0;
for(int i = 1; i < 53; i++)
{
j = rnd.Next(53-i);
poker[0]=poker[53-i];
poker[53-i]=poker[j];
poker[j]=poker[0];
}





不过小弟真想了解达人们有什么思路(不使用系统方法)
spmzfz 2009-03-28
  • 打赏
  • 举报
回复
你怎么这么早就结贴呢?多等待一阵不好些,说不定还有更好的方法。

我想补一下:加载图片时一每个PIC控件一次只能加载一张图片。如何判断已经随机生成数字没被使用,你可看一下
这个:
http://topic.csdn.net/u/20081110/19/25378f79-5f1d-4287-8642-3823db047717.html
如何向一个长度为100的数组随机不重复插入一到一百

但愿对你有帮助。
fjzqdwx 2009-03-28
  • 打赏
  • 举报
回复
突然想到还有结贴这回事...小弟新手
回来结个贴给 杰克 兄台分吧..

高手路过分享点好思路也会给分..只是分不多..小弟不才.谢谢
fjzqdwx 2009-03-28
  • 打赏
  • 举报
回复
好主意...bool值

我想到声明结构体了
把bool isLoad和Value值绑定在一起会很不错

非常感谢楼上朋友.这个算法听上去不错,我去试试看了
spmzfz 2009-03-28
  • 打赏
  • 举报
回复
要是我会这样做:
1 定义PictureBox 数组,PictureBox[] Puke= new PictureBox[52];
2 定义一个布尔数组,用于标识对应的扑克是否生成。Bool[52] IsLoad;
3 作52次循环,先RandOmize 随机生成一个1-52内的数字,判断该数字对应的布尔值IsLoad[数字]是否
为False,若为False,则此次生成的数字有效,然后Puke[循环数值]加载相应于对应数字的图片,同时
标识此IsLoad[数字]为True,同时使用Tag属性存储其相应的扑克分值。
若为True,则重新生成数字,使用Goto语句跳到前面的代码。
4 发放扑克,移动Puke控件。

因为我不会使用<int>...,所以我只能这么做,算供参考吧。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧