- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我正在实现我自己的拼字游戏版本。我目前有一个包含大量 Squares
的 Board
类。 Square
又由 IBonus
和 Piece
组成。奖励实现实际上是拼字游戏的常见奖励,但我可能会尝试添加一些新的和扭曲的奖励来为游戏增添趣味——这里的灵 active 是最重要的!
经过一段时间的思考,我得出的结论是,要让 IBonus
实现正常工作,他们需要知道整个 Board
及其当前位置(在Board
,所以它知道它在哪里,它可以检查与奖金在同一个方格中的棋子)。这让我印象深刻,因为它基本上需要了解大量信息。
所以,我天真的实现是将 Board
作为参数传递给 IBonus.calculate()
方法,IBonus.calculate(Board board, Point position )
,即。
此外,它似乎创建了一个循环引用。还是我错了?
我不是特别喜欢这种方法,所以我正在寻找其他可能的方法。我知道我可以让 calculate
接受一个接口(interface)而不是一个具体的类,即 calculate(IBoard board)
但我认为这并不比第一种情况好.
我担心过于专注于我当前的实现,以至于无法想到至少适合这个问题的完全不同的设计以及解决方案。也许我可以重新设计整个游戏并将奖金放在其他地方,以便于计算?也许我太专注于让他们进入 Board
?我当然希望有其他方法可以解决这个问题!
谢谢
最佳答案
我假设 Board 具有游戏的可见状态,并且会有其他对象,例如 Rack(每个玩家一个)和 DrawPile。
“如果单词包含真实(非空白)Z,则双倍得分”- 需要您输入单词或棋盘和单词的位置。
“如果单词在棋盘上最长,则加倍得分”需要整个棋盘。
“如果单词的第一个字母与从 DrawPile 中随机选择的字母相匹配,则获得双倍分数”当然需要 DrawPile。
所以对我来说,这仅取决于您实现的规则。我愿意将 Board 传递给 IBonus score() 实现。
编辑 - 更多想法。
所以一 block 棋盘有 17x17 个正方形,或其他任何东西。我会为棋盘的每个方 block 分配一个 IBonus 实现(会有一个名为 PlainEmptySquare 的惰性实现。)您只需要实例化 IBonus 的每个实现一次——它可以被多次引用。我可能会走低调的道路,明确地实例化每一个,传递所需的参数。如果一种类型需要 Board,则将其传入。如果另一种类型需要 DrawPile,则将其传入。在您的实现中,您可能会有 12 行丑陋代码。/耸肩
关于c# - 为拼字游戏的游戏实现设计灵活且可扩展的奖励系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019234/
我喜欢我正在设计的网站的徽章和成就的概念。它们已被证明可以提高使用率/利用率,我认为这可能是我想要开发的应用程序的一大动力。 在高层次上,我可以想到 3 种方法来做到这一点。 检查满足作为 cron
我正在用ARKit做一些实验,并试图在iPhone 5S中运行,只是想看看会发生什么: 我在Xcode 9.0 beta 6中收到此错误: “ARDemo”需要iPhone不支持的“ARKit”功能
我们在 OptaPlanner 的 XML 文件中为类(class)问题添加负软约束,例如 0 但是
不知何故,从一个应用程序发布到另一个,org.json 库的内部结构崩溃了。它无法再将键的内容作为字符串读取。下面是一个代码示例,该代码在启用 minify/R8/proguard 时可以正常工作并且
我们有一个场景,我们希望允许用户将图像上传到网站。我们在 ASP.Net 上运行。 快速搜索并没有找到任何好的结果。如果该控件是免费/开源的,那就太好了,但我们不介意支付一点费用。 最佳答案 我强烈推
我正在尝试使用 Electron 框架在 macOS 上创建通知。我已经从 GitHub 克隆了开源快速入门,我的 renderer.js 进程中的唯一代码如下: var myNoti
我想知道 Google Pay 如何在“您的奖励”页面的 GridView 中显示不同类型的卡片。我正在尝试开发像 Google Pay 这样的卡 最佳答案 有许多库可用于开发 Google Pay
我觉得是时候从Webforms升级到MVC了。我已经编写了Webforms和jquery很长时间了。 你们都可以建议您喜欢的资源来学习这项技术吗? 奖励:我对使用ViewModel(不一定是MVVM框
我是一名优秀的程序员,十分优秀!