扑克牌发牌程序

慌什么呢 2020-06-08 09:26:42
首先牌数为52张,按照梅花0到12,方块13到25,红桃26到38,黑桃39到51,于是建立包含0到51的列表当作52张牌(自始至终一定要注意列表从0开始)。 对于洗牌的理解: 列表中是从0到51按顺序排列的,利用random库中的randint()函数可以随机从0到51选取出2个数,然后交换2张牌,进行100次左右的交换后,此时列表中从0到51的位置上不再是按顺序的0到51.(其实就是原来是pai[0]==0,pai[1]==1,现在pai[0]等于0到51中的任意值) 对于花色的理解: 0到12为梅花,所以x/13等于0,13到25为方块,所以x/13为1.依次类推y
...全文
5018 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
123工艺品 2020-07-22
  • 打赏
  • 举报
回复

Public Function setyfpai(ByVal paijuNUM As Integer) As Integer() '得到0-53一个不重复的数组,一付牌
Dim cards(53) As Integer
Dim orderL As New List(Of Integer)
Dim qupaiweizhi As Integer
Dim fangpaiweizhi As Integer = 0
For i As Integer = 0 To 53
orderL.Add(i)
Next
For j As Integer = 0 To 53
cards(j) = -1
Next
Dim RANDOM As New Random(paijuNUM)
For k As Integer = 1 To 52
qupaiweizhi = RANDOM.Next Mod (53 - k)
cards(k - 1) = orderL.Item(qupaiweizhi)
orderL.RemoveAt(qupaiweizhi)
Next
cards(52) = 52
cards(53) = 53
my_paijuNUM = paijuNUM
Return cards
End Function


仅供参考
gangAndgang 2020-06-29
  • 打赏
  • 举报
回复
Random r = new Random(); int[] array = new int[52]; for (int i=0; i<52; i++) swap(array[i], array[r.next(52)]);
threenewbee 2020-06-28
  • 打赏
  • 举报
回复
洗牌算法有很多种,交换只是其中一种。
还可以每次从集合里面取随机下标,然后从集合删除,添加到发牌的集合,重复这个过程。
华芸智森 2020-06-28
  • 打赏
  • 举报
回复
DIM A(51) AS Int32 '//原牌 dim B(51) as int32‘//洗后的牌 B = A.OrderBy(Function(c) Guid.NewGuid()).ToArray()
wanghui0380 2020-06-08
  • 打赏
  • 举报
回复
你讨论的其实就是快排 Aarry.Sort 或者 linq的orderby
github_36000833 2020-06-08
  • 打赏
  • 举报
回复
换个角度理解,就是 就是0~51共52张牌中任意一张,放到牌尾, 剩下的51张牌,任选一张,叠到牌尾上, 剩下的50张牌,任选一张,叠到牌尾上, ...
github_36000833 2020-06-08
  • 打赏
  • 举报
回复
其实最多51次交换就够了。 最后一张,和0~51中的任意一张交换 (是的,可以也应该包括和自己交换)。 倒数二张,和0~50中的任意一张交换。 倒数三张,和0~49中的任意一张交换。 ...

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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