| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2207 人关注过本帖
标题:如何将图片随机成对排列
只看楼主 加入收藏
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
偶有一实现方法,但是好像显得不是很好。。。先说来听听吧。。。楼主看看可行?

定义两个数组,a(36) 和 b(18)
第一次。。RND出来一个数就放入数组b中,然后随机抽个PICTURE出来LOAD b(1)所对应的图片,再随机抽个出来LOAD同样的PICTURE。。然后把这两个PICTURE的INDEX写入a数组。。这样第一次LOAD完成。。
第二次。。。再RND出来一个数,先判断数组b中是否有相同的数,有的话重新RND,直到产生一个新的数为止,再随机抽两个PICTURE出来,同样先判断数组a中是否已经存在随机产生的index数,若存在,重新rnd。。。直到不重复为止。。。然后执行loadpicture。。。

。。。。


这样是不是就可以达到你的要求了?

[此贴子已经被作者于2007-1-14 15:17:13编辑过]


这个社会太复杂。。。
2007-01-14 15:15
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
偶觉得可以。。。具体代码你自己写吧

这个社会太复杂。。。
2007-01-14 15:17
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 

行不?

[此贴子已经被作者于2007-1-14 15:22:58编辑过]


这个社会太复杂。。。
2007-01-14 15:21
b13690976754
Rank: 1
等 级:新手上路
威 望:2
帖 子:835
专家分:7
注 册:2006-11-9
收藏
得分:0 

谢谢 版主全力支持
这个方法我回去试一下 现在没有时间看了
网吧卡上余额不多了


If Dir(\"alive\") <> \"\" And Dir(\"ideal\") <> \" Then Print \"strive\" End If
2007-01-14 15:24
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
网吧里面学编程。。。PFPF

这个社会太复杂。。。
2007-01-14 16:46
b13690976754
Rank: 1
等 级:新手上路
威 望:2
帖 子:835
专家分:7
注 册:2006-11-9
收藏
得分:0 
网络到期了 快放假了 所以没有再续费 等大2下学期再续费
遇到一个问题 不知道怎么判断数组里面是否存放同样的数组
比如 Dim a (35) As Integer
Dim i As Integer
For i=0 to 35
a(i)=Int(Rnd*19)
If a(i)=...???
.
.
.
.
End If
我不懂哟 我只会判断和是不是和上一个赋相等,不知道怎么判断是不是和上上上一个赋相等或之前所赋是否有相等。

If Dir(\"alive\") <> \"\" And Dir(\"ideal\") <> \" Then Print \"strive\" End If
2007-01-15 16:17
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
以下是引用b13690976754在2007-1-15 16:17:15的发言:
网络到期了 快放假了 所以没有再续费 等大2下学期再续费
遇到一个问题 不知道怎么判断数组里面是否存放同样的数组
比如 Dim a (35) As Integer
Dim i As Integer
For i=0 to 35
a(i)=Int(Rnd*19)
If a(i)=...???
.
.
.
.
End If
我不懂哟 我只会判断和是不是和上一个赋相等,不知道怎么判断是不是和上上上一个赋相等或之前所赋是否有相等。

红色的部分是1而不是0。。。VB默认从1开始

蓝色部分不能这样写。。。。这样写的话每循环一次值都可以不一样。。。应该在循环外面设一个整形变量把rnd出来的数赋给变量,然后在循环里面把数组元素和这个变量进行比较,而不是你这样。。。
另外我说的把随机数写入数组并不是在这个时候写进去,而是等你找到一个合适的数后或LOADPICTURE执行后再写入数组。。。


这个社会太复杂。。。
2007-01-15 17:49
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
数组起到的作用是记录哪些数已经用过了

这个社会太复杂。。。
2007-01-15 17:51
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
For i = 1 To 18
Do
flag = True
Randomize()
j = Int((18* Rnd()) + 1)
If i = 1 Then
a(i) = j
Else
For k = 1 To i - 1
If a(k) = j Then
flag = False
Exit For
End If
Next
If flag = True Then
a(i) = j
End If
End If
Loop Until flag = True
Next

我用vb2005调试通过了 可能和vb6有细微的代码差别 比如数组的索引我这就只能从1开始 (前18个随机分配 后18个顺序分配 ),next 后面也没有 i (vb6好像有吧?)
但是这种方式不是最好的 每次代码运行的时间是不确定的!你想想如果程序每次随机都随不出来18的话就永远也不会结束运行了,虽然这种情况不可能发生. 我做的项目有现成的代码改改就贴过来了,我当时之所以用这种逻辑是因为我是从海量数据中抽样

我觉得更好的办法是 用b(18)存放18张图,然后
for i=1 to 18
j = Int(((19-i)* Rnd()) + 1)
a(i) = b(j)
然后用redim preserve把数组b减1,去掉刚才被随机出来的那个元素 可能会用到一个临时数组过渡
next i
这样的话代码运行的时间就是确定的了
没时间调试 已经下班了 改天再试试给出具体代码

2007-01-15 18:06
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
以下是引用Kendy123456在2007-1-15 18:06:02的发言:

我觉得更好的办法是 用b(18)存放18张图,然后
for i=1 to 18
j = Int(((19-i)* Rnd()) + 1)
a(i) = b(j)
然后用redim preserve把数组b减1,去掉刚才被随机出来的那个元素 可能会用到一个临时数组过渡
next i
这样的话代码运行的时间就是确定的了
没时间调试 已经下班了 改天再试试给出具体代码

这个方法不错的。。。。
其实偶还有一个方法,说起来可能比较麻烦,但是应该可以使运行时间大致每次差不多的。。。楼上方法比较好,我就不说了。。。

还有一个问题是。。。楼上说的RND出来的数可能很多次一样。。。其实VB不太会出现这样的问题。。。。RND随机抽数也不是乱抽的。。。要不你用循环抽10个数看看,平均数都在5左右。。。也就是说有个概率问题。。


这个社会太复杂。。。
2007-01-15 18:13
快速回复:如何将图片随机成对排列
数据加载中...
 
   



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

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