我又遇到了一个问题。我在编一个纸牌得游戏。一共有两副牌,也就是108张牌,我要随机的把牌全部发光,而且一张牌只能出现2次,必须是两次 Mailbomb(网络咖啡) 不是还有随机种子吗怎么会每次随机都一样呢还一星呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 54张牌,*2 搞一个数组,CardArray(54,2),对于每张牌编一个号码,1--108,在发了一张牌以后,编号减一,但必须对剩下的牌再编号然后在剩下的牌里再取随机发牌, 游戏图片不是动态连接库,我是用截图得笨方法做得。然后做到了一个资源文件里。要用得时候就从资源文件里调用。不过我有OCX的,我没有用,如果你想要的话,留E-MAIL地址给我。以下就是我的程序:Public Sub fapai() '这是一个过程函数Dim i As IntegerRandomize Timercardfilename = Array(123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 179, 180, 181, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 179, 180, 181) ’这个数组存放的是所有图片在资源文件中的代号,你们可以发现,所有的数字在数组中已经出现两次了。也就是说我只要随机的把数字分完,应该就可以了。For i = 0 To 107 Set cardini(i) = LoadResPicture(cardfilename(Int(Rnd() * 107)), vbResBitmap) image1(i).Picture = cardini(i)Next iEnd Sub 我给你提个建议 你说的 cardfilename 数组存放的是资源文件的编号,而你的 cardfilename(Int(Rnd() * 107))最多只能保证每次都能取回一张牌的资源号,但不能保证他没有重复。我觉得你可以建一个54个元素的1维数组,然后每个元素有三个状态0,1,2(0代表没有被抽取过,1代表抽取过1次,2代表已抽取过2次),这样当你产生随机数时比对相应位置上的值就可以了。 这说白了是一个取不重复随机数的问题啊,现给一种方法:定一个数组dim Card(107)在card(107)中存入你的108张牌。然后用随机数生取出0-107在的一个元数的下标.如:Card(12)就把Card(12)这张牌取出,然后再把Card()数组的最后一个元类填入Card(12)中下一会再用随机数生生存(0到107-1)中的一个数,再重复上边的方法。直到取完这应是最有效的一种算法了。for i=0 to 107 d=Int(Rnd() * 107-d) Img=Card(d) Card(d)=Card(107-d)next记得给分啊! 我给出一个想法,这个想法我在当时用C编的时候就用了,我一开始也把排做在2维数组里了,然后每次抽每次取随机。但是重新想一下真正的发排。排在理好的时候,几个人能发到的排就已经确定了。那么,你就可以做一个理排的过程,比方说,一个数组里,随机的数组元素和另一数组元素做对换,也就是排位对换,那让程序模拟一下,让它随机的对换几十次,循环就可以了,然后,它仍然是一个数组,那么我们就从第1个拿排的人开始,假如是4个人玩。那么他拿的是 排数组[N*4]的排。第2个就拿 排数组[N*4+1]的排。这样等到排发完,大家都是随机的排。另外,VB每次随机相同是因为,没用RANDOMIZE初始化VB种子,而不用的话,在别的语言中同样,随机数也是重复的。================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。 ★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! ★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ● 可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zipHttp://www.ChinaOK.net/csdn/csdn.rarHttp://www.ChinaOK.net/csdn/csdn.exe [自解压] 换一个思路:将108张牌顺序放入数组playcard(107)中。然后取若干次随机数(1-108,乘以107后要加1),例如第一次取,得58,将1与58对换,第二次取,得86,将2与86对换。足够多次后(试验一下),感觉足够乱序即可。最多108次,所有的牌都换过了。然后顺序发牌。 我的EMAIL是[email protected]谢谢, 优化代码求助各位高手,谢谢!!! 如何获取某个指定进程的标题 有关VsflexGrid数据更新后排序的问题(如解决,再追加50分,急!谢谢!!) 请问如和得到鼠标所在处的listview的行数和列数啊! 关于VB存储和隐藏问题~0~! 添加部件的属性和方法。 请教一日期计数方法: winsock通讯问题,有代码,欢迎访问 请教:mdi程序 如何设置某一子窗口置顶 vb6.0闪退 想问:关于如何直接对硬盘进行读写(WIN98下)望大家多多帮忙啊我弄了段程序但是不太清楚,希望大虾多多帮助。 请问如何在vb中调用outlook发送电子邮件,就像共享软件那样做的。
54张牌,*2 搞一个数组,CardArray(54,2),对于每张牌编一个号码,1--108,在发了一张牌以后,编号减一,但必须对剩下的牌再编号然后在剩下的牌里再取随机发牌,
以下就是我的程序:Public Sub fapai() '这是一个过程函数
Dim i As Integer
Randomize Timer
cardfilename = Array(123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 179, 180, 181, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 179, 180, 181)
’这个数组存放的是所有图片在资源文件中的代号,你们可以发现,所有的数字在数组中已经出现两次了。也就是说我只要随机的把数字分完,应该就可以了。
For i = 0 To 107
Set cardini(i) = LoadResPicture(cardfilename(Int(Rnd() * 107)), vbResBitmap)
image1(i).Picture = cardini(i)
Next i
End Sub
定一个数组dim Card(107)
在card(107)中存入你的108张牌。
然后用随机数生取出0-107在的一个元数的下标.如:Card(12)
就把Card(12)这张牌取出,然后再把Card()数组的最后一个元类填入Card(12)中
下一会再用随机数生生存(0到107-1)中的一个数,再重复上边的方法。
直到取完
这应是最有效的一种算法了。
for i=0 to 107
d=Int(Rnd() * 107-d)
Img=Card(d)
Card(d)=Card(107-d)
next
记得给分啊!
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
将108张牌顺序放入数组playcard(107)中。
然后取若干次随机数(1-108,乘以107后要加1),例如第一次取,得58,将1与58对换,第二次取,得86,将2与86对换。足够多次后(试验一下),感觉足够乱序即可。最多108次,所有的牌都换过了。
然后顺序发牌。
谢谢,