Tag: 随机播放

让我们每周一次洗牌

在Flatiron学校的第一周,他们给了我们二十一点实验室一个工作。 我慢慢地开始逐步研究它。 我创建了卡片,播放器,卡片组,引擎,并设置了所有实例,方法,初始化程序等。一切都以正常且良好的速度向前发展,直到实验室指示要求我对卡片组进行洗牌。 说明: 我的第一个想法是“这很容易。 因此,我开始在arc4random_uniform()周围键入各种不同的变体,但似乎无济于事。 在花了很多时间尝试解决这个问题之后,我决定发挥创造力,并提出了自己的解决方案,我将其称为“弗兰克·辛纳屈”。 第一周:弗兰克·辛纳屈 开始了。 让我们将其分为几步: 我们的任务是创建shuffle()方法,以获取包含52张随机洗牌的卡组。 这时的牌组“ undealtCards”是一副纸牌,看起来像这样: 我的第一个想法是创建一个名为“ cardsToShuffle ”的纸牌阵列,并确保我名为“ undealtCards ”(我的副牌)和“ DealtCards ”(另一副装有发牌的牌)的两个阵列是空的。 然后,我用一个for循环填充我的arraycardToShuffle阵列,使我的Card类中的所有西服和等级符合我的52张牌。 此时,问题是我有一副纸牌,但它们又重新排列好了,没有被洗掉。 最后一部分是创建一个新的for循环,在该循环中,我们以随机顺序将所有Cards从cardsToShuffle移至undealCards 。 并做了! 我们设法洗牌了。 如果一切顺利,我们应该有两个空数组( cardsToShuffle和DealtCards )来启动, undealtCards应该有52个Card元素被改组。 我不得不说,我为自己感到非常自豪。 尽管现在看来这很容易,但是在第一周想出这个解决方案对我来说感觉非常好,我做到了。 第二周:印第安纳·琼斯 一周后,当我们回顾二十一点实验室的工作时,一位同学(@ramamilaneha)向我展示了一种改组甲板的更好方法。 我们将其称为“印第安纳琼斯”。 解决方法如下: 我们将创建一个for循环,该循环将从0到几乎undealtCards计数运行。 然后,我们将使用arc4random方法获得randomIndex。 然后我们验证i值是否与randomIndex不同,并以良好的“ Indiana Jones”风格交换了每个元素的顺序 第三周:魔术技巧 然后,在熨斗学校的第三周开始了,随之而来的是更多的实验室。 我认为经过一两个实验室之后,我们又不得不改组阵列。 老实说,我回到了最初的“ Frank Sinatra”解决方案,因为那时我还不太了解“ Indiana Jones”的方式。 我输入了整个解决方案,几分钟后,我决定必须有一个更好的方法。 我用谷歌搜索,直到找到第三个最好的解决方案“魔术”。 这是逐步的: 带来GameKit框架。 现在,我们可以使用GameKit框架中的GKRandomSource类来创建新的纸牌阵列。 然后我们可以调用实例方法“ […]