Tag: gamekit

让我们每周一次洗牌

在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类来创建新的纸牌阵列。 然后我们可以调用实例方法“ […]

用Swift编写Dijkstra算法的正确方法

剧透警报:您根本不写! ⭐️⭐️⭐️️⭐️⭐ 嗨! 此帖已移至新博客! 来到Fivestars.blog以获得最新文章! ⭐️⭐️⭐️️⭐️⭐ 上周,我写了关于如何在Swift中编写著名的Dijkstra算法的代码:本文是其后续内容。 我的原因 我没有写上一篇文章,而是花时间做文章研究:我所有的Metro Metro应用程序都实现了类似的算法。 在本文中,我将向您展示为什么您不需要利用我的相同方法,即利用Apple提供的工具并以更少的努力获得相同的结果 (同时获得其他好处)。 介绍GameplayKit 在Apple的数十种框架中,有GameplayKit:无论您的应用程序是否为游戏,该框架始终可供您使用。 但是什么是GameplayKit? 我很高兴你问! 我将让Apple的GameplayKit指南为您解答: GameplayKit是用于在iOS,OS X和tvOS中构建游戏的基础工具和技术的集合。 构建,发展和维护复杂的游戏需要精心计划的设计-GameplayKit提供了一些架构工具,可帮助您以最小的努力设计模块化,可扩展的游戏架构。 哇,这个框架听起来很多东西! GameplayKit核心 让我们使用分而治之范例更好地理解此GameplayKit,以下是其主要核心(摘自Apple的GameplayKit指南): 随机化 。 使用标准算法的这些强大,灵活的实现方式作为多种游戏机制的构建块。 实体和组件 。 通过在此架构上构建,设计更多可重用的游戏代码。 状态机 。 使用此体系结构可以解开游戏设计中的复杂程序代码。 Minmax策略家 。 为基于回合的游戏和AI玩家对象创建模型,并使用该模型计划最佳移动。 寻路 。 用图形描述游戏世界,允许GameplayKit规划游戏角色遵循的最佳路线。 代理人,目标和行为 。 使用此模拟可以使游戏角色根据高级目标移动自己并对周围环境做出反应。 规则系统 。 将游戏设计与可执行代码分开以加快游戏开发周期,或实施模糊逻辑推理以向游戏中添加逼真的行为。 等等…又是什么第五点? 5.寻路 。 将[…]世界描述为图表 ,[…] 规划最佳路线 […] 这听起来很像我们正在尝试做的事情! 让我们深入研究。 GameplayKit 寻路 […]

我的GKMatch没有玩家…?

我成功地做了一个配对的屏幕出现。 我在我的iPhone和模拟器中运行我的游戏。 在这两种情况下,我都使用不同的Game Center帐户login。 我在两场比赛中都去参加比赛。 我按“现在玩”。 两场比赛都开始寻找比赛。 最后,两个游戏find一个匹配,并调用下面的函数: – (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match { self.myMatch = match; NSLog(@"%d",[[self.myMatch playerIDs]count]); } 但是我的控制台返回0.不是应该返回2吗?

发送数据错误?

typedef struct _protocol1 { int type; CGPoint pos; } Protocol1; -(void)sendData { NSError *error; Protocol1 msg; msg.pos = ccp(100,100); msg.type = 1; NSData *packet = [NSData dataWithBytes:&msg length:sizeof(Protocol1)]; [self.myMatch sendDataToAllPlayers: packet withDataMode: GKMatchSendDataReliable error:&error]; if (error != nil) { NSLog(@"error"]); } } 这是我的项目的一大块代码。 我得到一个错误。 但是,我不确定如何检索更多的信息来帮助我debugging。 有人能帮我吗? 对不起,我对iOS开发很新颖。 使用Cocos2d进行游戏。 编辑 我正在使用模拟器和我的iPhone来testing。 我怀疑这是问题,我已经得到了比赛的工作,一切…

默认游戏中心视图控制器中的成就顺序

有什么方法可以控制Game Center成就视图控制器(GKAchievementViewController)中显示的成就吗? 目前,它们是按照我在iTunes Connect中创build的顺序显示的。 我确实看到,也可以导入所有成就信息,以便在自定义成就查看器中使用,我可以自己设置顺序,但是如果可能的话,我宁愿使用已经存在的查看器。

如何实现使用Game Center的最佳分数今日排行榜?

我想在Game Center中创build一个排行榜来获得今天提交的最高分数,而且我希望每天午夜重置。 创build“最近得分”排行榜并不难,只需在应用程序中logging当天的得分并提交即可,但是我担心的是,第二天没有启动应用程序的用户将会得到一个旧分数仍然处于“今日最佳成绩”板,直到他们发布为止。 有没有办法让分数到期,或只在Game Center排行榜上显示当天的分数?

Game Center排行榜(Sandbox)中只显示一名玩家

在Game Center的沙箱环境中,我testing了两个不同的用户。 不幸的是,我只能在排行榜上看到一名球员。 只有login的玩家。 我认为它应该更新一段时间后,但现在(24小时后),我仍然只看到领先董事会中的一个用户。 这在沙箱环境中是否正确?

明确答案是什么playersToInvite是

游戏中心文件表明 当您的应用程序直接从Game Center应用程序启动以主持一个匹配时, playersToInvite参数不为零。 有几个人曾经问过这是如何工作的,也就是说,似乎没有办法从Game Center应用程序中select一个朋友,并邀请他们从 Game Center中玩游戏; 它只适用于你在游戏中邀请。 这个文档的date或者有没有一个秘密的方法来从Game Center开始一个特定于游戏的比赛? 我想testing我的inviteHandler但我一直无法确定如何将这个parameter passing给应用程序。 [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) { // clean up games in progress here if (acceptedInvite) { NSLog(@"acceptedInvite %@", acceptedInvite); // The acceptedInvite parameter is non-nil when the application receives an // invitation directly from another player. GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController […]

GKTurnBasedEventListener不能被设置为我的ViewController的委托?

在objC中, Rawendrich为GKTurnBasedEventListener编写的语法,当时是GKTurnBasedEventHandler ,现在由Apple改为如下。 if (!gameCenterAvailable) return; void (^setGKEventHandlerDelegate)(NSError *) = ^ (NSError *error) { GKTurnBasedEventHandler *ev = [GKTurnBasedEventHandler sharedTurnBasedEventHandler]; ev.delegate = self; }; NSLog(@"Authenticating local user…"); if ([GKLocalPlayer localPlayer].authenticated == NO) { [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler: setGKEventHandlerDelegate]; } else { NSLog(@"Already authenticated!"); setGKEventHandlerDelegate(nil); } 现在把这个转换成swift之后,写下GKTurnBasedEventListener而不是GKTurnBasedEventHandler ,这是以下方法。 // Converted with Swiftify v1.0.6381 – https://objectivec2swift.com/ if !gameCenterAvailable { […]

有没有办法调用saveCurrentTurnWithMatchData而不发送推送通知?

我有一个游戏中心游戏,让玩家每回合多次移动。 在iOS 6中,苹果公司在saveCurrentTurnWithMatchData中实现了一个很棒的function,它可以让你做到这一点 – 它将数据保存到游戏中心,防止通过反复重做移动来作弊,而不会前进到下一个玩家。 问题是,我发现这实际上触发了相同的推送通知,当玩家结束时发送。 所以游戏中的其他玩家会在应用程序的图标上看到一个徽章,并错误地认为这是轮到他们的时候。 有没有人find一个解决方法呢? 任何方式调用saveCurrentTurnWithMatchData而不发送推送通知? 如果不是,这似乎是一个应该引起苹果关注的devise缺陷。