我正在设计一个程序,以尽可能高分的方式解决纸牌游戏。比赛按以下计分系统计分:
10 points for moving Aces to top
9 points for moving 2s to top
8 points for moving 3s to top
7 points for moving 4s to top
6 points for moving 5s to top
5 points for moving 6s to top
4 points for moving 7s to top
3 points for moving 8s to top
2 points for moving 9s to top
1 points for moving 10s or face-cards to top
2 points for freeing a "downcard" (face-down card on the table)
2 points for moving a card from the deck to the table
-2 points deducted for moving a card from the top to the table
-20 points deducted for flipping over the deck
Putting a card back to the top after moving it from the top to the table does not give double points.
牌组中的牌一次翻转一张,玩家可以无限次翻转牌组(但是,-20 分扣除仍然适用)。
我找到了各种策略指南,例如Windows Solitaire Game 的 Klondike 策略指南,但这些指南适用于桌牌未知的真实纸牌游戏。
我正在寻找一种算法来解决我所谓的“面朝上”纸牌游戏,在这种游戏中,我在发牌之前就已经了解了套牌。编辑:从下面答案中给出的论文来看,这个游戏似乎被称为“深思熟虑的纸牌”。
到目前为止,我的想法是:某种蛮力,尝试所有可能的动作并得分;一个简单的算法,单独查看每一列并尝试它可以的“最佳”移动;最后是某种类似于寻路的算法,对每一步进行评分并找到最佳“路径”。
蛮力的问题在于它会永远(字面意思)因为你可以无限地重复移动。使用简单的算法,我不能做一些棘手的事情,比如重新排列两列来放置所有的红心和梅花(例如)来释放一个单独的 8 个红心。从我所见,寻路将起作用,但我对这种实现如何工作感到迷茫。