我在二十多年前就开始开发这款应用了。(那时候它们还不叫“应用”。)我想要一款能显示所有可能移动(无需按下提示键)的克朗代克(Klondike)纸牌游戏。因此,我设计了一款克朗代克应用,其中所有可能的移动都以小旗帜的形式显示在可移动的卡牌上。要执行移动,只需点击旗帜即可。 接着,我开始解决另一个让我头疼的问题。所有的克朗代克程序都让你每次从牌堆(talon)中翻出三张牌。如果你是一名认真的玩家,你需要看到所有的牌。为什么不将它们全部显示在一个漂亮的 3-by-x 阵列中呢?并且附上可能的移动旗帜!这很容易做到。 我很高兴。我的程序玩起来更加有趣。但过了一段时间,我对有时难以找到给定卡牌(即你需要的卡牌)的位置感到困扰。…
我在二十多年前就开始开发这款应用了。(那时候它们还不叫“应用”。)我想要一款能显示所有可能移动(无需按下提示键)的克朗代克(Klondike)纸牌游戏。因此,我设计了一款克朗代克应用,其中所有可能的移动都以小旗帜的形式显示在可移动的卡牌上。要执行移动,只需点击旗帜即可。
接着,我开始解决另一个让我头疼的问题。所有的克朗代克程序都让你每次从牌堆(talon)中翻出三张牌。如果你是一名认真的玩家,你需要看到所有的牌。为什么不将它们全部显示在一个漂亮的 3-by-x 阵列中呢?并且附上可能的移动旗帜!这很容易做到。
我很高兴。我的程序玩起来更加有趣。但过了一段时间,我对有时难以找到给定卡牌(即你需要的卡牌)的位置感到困扰。因此,我在旁边添加了一个卡牌地图(Card-Map),显示所有卡牌的图标,并按位置进行颜色编码:灰色表示背面朝上的卡牌,蓝色表示 tableau 中正面朝上的卡牌,绿色表示已构建到基础堆(foundation)的卡牌,橙色表示牌堆(Talon)中的卡牌。此外,如果你点击卡牌地图图标,对应的卡牌会被高亮显示(当然,背面朝上的卡牌除外)。
多年后,我想知道卡牌地图是否能在出现可以翻转背面朝上卡牌的构建情况时通知我。经过大量工作,我完成了算法。当这种可能性出现时,卡牌地图会高亮显示所需的构建。太酷了。
是否可以对堆叠移动做同样的事情——如果从牌堆中抽出某些卡牌可以促进翻转背面朝上的卡牌,我能否高亮显示它们?这需要一对新的卡牌地图,即堆叠地图(Stacking Maps),以堆叠顺序显示所有卡牌的图标(颜色编码与构建地图相同)。经过数月的工作,我完成了算法。这真的很棒。堆叠地图迅速成为制定策略的核心。
有一天在洗澡时,我突然灵光一现。我可以将牌堆显示两次,一次按当前状态,另一次显示下一次循环时的状态,并在两个版本上都附上可能的移动旗帜。因此,当你在牌堆中进行设置移动时,你真正想要执行的移动会立即出现在(第二个牌堆中)供你选择。这使得回收牌堆(Recycle Talon)按钮基本上变得多余。
但玩克朗代克纸牌还有一个非常麻烦的方面——在不可能获胜的情况下继续游戏。我能否提出一个完全准确的算法,让你知道继续游戏是否徒劳无功?并且使其速度足够快,以便在移动之间的后台执行?好吧,这个问题花了我三年的思考时间,然后又花了几个月进行编程。但它运行得非常出色。这真的、真的很好!不再浪费时间在注定失败的游戏上。
我真的很喜欢克朗代克纸牌。(我已经游玩了超过 20,000 局。)而这款重新构想的克朗代克极大地改善了游戏体验。这让玩家可以专注于克朗代克的策略(顺便说一句,这非常有趣且深奥)。我将我的平均胜率提高到了 43%。(在其他应用中,我只能达到 33%。)而且游玩过程充满乐趣且无烦恼。
如果你有类似的想法,不妨试试这个程序。我花了二十多年的时间来构建它。