VB 21 点游戏的问题

2015-10-12 13:43:52 +08:00
 BROWNURSIDAE
我是一个新手,想实现抽牌不重复,现在思路是做一个数组,然后每次随机抽到一张牌就放一张进去,然后再抽下一张和数组里面的数据比对,重复了就再随机抽取一张,现在挺乱的,想不出来怎么写,求指导

for i 1 to 52
t=Int(Rnd()*52+1)
p1=t
next i

然后怎么把 p1 存放到数组然后判断, p1 是用来做图片序号的,写的不好,希望调教
2173 次点击
所在节点    程序员
13 条回复
rock_cloud
2015-10-12 13:53:41 +08:00
每抽到一张就放到最后,然后在前边 n-1 张里随机选,再抽一张再放到倒数第二个,然后从前面 n-2 个里选。
BROWNURSIDAE
2015-10-12 14:03:07 +08:00
@rock_cloud 比如我 dim arr ( 0 to 51 )
然后我怎么把 p1 弄到这个 arr 里??不理解
rock_cloud
2015-10-12 14:33:40 +08:00
这个是 VB 的语法么?是这样:
弄一个数组,赋值为 1 到 n ,然后随机的在前 n 个里选一个,之后交换选出的值和第 n 个值,然后 n = n - 1 ,一共重复这个操作 n-1 次。最后得到的数组就是一个包含随机值的数组。
VB 语法不懂,你看看我这个描述能实现吗?
BROWNURSIDAE
2015-10-12 14:34:39 +08:00
@rock_cloud 我看看我第一次接触编程没啥基础
RitianZhao1988
2015-10-12 15:40:31 +08:00
@BROWNURSIDAE 不用弄,把选出的牌的值设置为-1 ,下次碰到-1 直接跳过重循环就好
也可以在生成的时候先随机排序,下次按序号抽就可以了 XD
maomaomao001
2015-10-12 15:51:28 +08:00
这样很麻烦吧,万一随机出来连续几个一样的,所以还是用表的结构吧,用完一个删一个
bingwenshi
2015-10-12 15:54:16 +08:00
直接把所有的牌做下随机序,然后从头取就行了
BROWNURSIDAE
2015-10-12 15:57:49 +08:00
@maomaomao001 用表是不是要数据库的意思?
BROWNURSIDAE
2015-10-12 15:58:31 +08:00
@bingwenshi 怎么把所有牌做随机序然后从头取?能贴个小代码块吗??
maomaomao001
2015-10-12 16:04:28 +08:00
@BROWNURSIDAE 不是那个表,是链表的表,数据结构
play78
2015-10-12 20:01:19 +08:00
其实这个不用那么复杂的,最简单的办法是 先按顺序写入,然后随机交换位置就可以了,这样就可以保证不重复了,对于几十个数来说,效率也不是很低,随机性也还可以。

Private Sub Command1_Click()
Randomize
Dim pk(55) As Integer
Dim ss As String
'52 张按顺序摆放
For i = 1 To 52
pk(i) = i
Next i
'随机打乱
For i = 1 To 1000
t1 = Int(Rnd() * 52 + 1)
t2 = Int(Rnd() * 52 + 1)
a = pk(t1)
pk(t1) = pk(t2)
pk(t2) = a
Next i
'输出
For i = 1 To 52
ss = ss + Str(pk(i)) + " "
Next i
Print ss
End Sub
这样是不是好理解多了。
firemiles
2015-10-12 20:38:28 +08:00
l = [i for i in range(1,53)]
for i in range(52):
card = random.choice(l)
l.remove(card)
print card

用 python 的 random.choice 就是随机抽取
自己实现也就是产生个剩下牌数的随机数,然后把牌取走
bsx1990
2015-10-13 07:27:05 +08:00
将楼上的两种方式还原成生活中的场景吧:
一种是拿一副扑克牌在手上,随机抽一张放在桌子上, 52 张都抽完了,也就结束了。
另一种是将这副扑克牌摊开在桌子上,然后像搓麻将一样的洗牌,洗完了也就结束了。
是不是好理解了呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/227367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX