2011-07-21 67 views
6

我目前正在用C#编写一个类似拼字游戏的游戏。我可以让计算机找到可以使用当前机架制作的最高点值字,但我不知道如何检查该字是否为15 * 15 Gameboard上的“可放置”(2D Array:string [,] )。拼字游戏放置C#

在它的默认状态(与董事会并无任何Letters)上的所有元素都设置为0。

是允许

--------------- 
-------H------- 
-------E------- 
-----FILL------ 
-------L------- 
-------O------- 
--------------- 

如何检查,如果这个词是不是例如:

不是允许

--------------- 
-H------------- 
-E------------- 
FILL------------ <-- F is out of bounds 
-L------------- 
-O------------- 
--------------- 

不是允许

--------------- 
-H------------- 
-E-W----------- 
-L-O----------- 
-L-R----------- 
FOLL----------- <-- Fill is overlapping with O 
---D----------- 
+0

我想你必须为自己弄清楚这一点 - 检查范围并检查现有的字母。没有明显的算法,所以我们需要看你的代码告诉你该做什么。但它不可能*难*。在边界检查:你不知道这一点,因为你需要查找三字母分数瓷砖等? – Rup

+4

另外“2D数组:字符串[,]” - 你有一个字符串为每个方块?不是char? – Rup

+0

只是一个建议:如果不是首先查看机架中的瓷砖,而是确定了电路板上可能出现的所有位置?我意识到这说起来容易做起来难,但以不同的方式思考问题可能会导致突破。 – FishBasketGordo

回答

18

论文“The worlds fastest Scrabble engine”(PDF)是1988年出版的,描述了一个高效的Scrabble引擎。它简短且令人惊讶的可读性!

+0

伟大的小发现!我将不得不把它看作是一个竞争性的拼字游戏玩家和试图在J2ME中实现它的人。 – demongolem

+0

@Jeff +1对于一个很好的答案和一些非常有趣的阅读额外的奖励。谢谢! –

0

我学会了如何根据F#SharpScrabble项目来做到这一点。即使你不知道F#(和我一样),你也会感受到作者是如何决定这么做的。

大东西给我了:

  • 使用Coordinate系统找到
  • 填充BoardSquares,可容纳一瓦(字母),但也认为比分信息
  • Tile代表一个字母,既在玩家的信件银行也在棋盘上
  • Move表示玩家放置字母
  • 实施上的坐标和瓷砖IComparable使分拣容易
  • 计算Runs这表示此举的地方,计算的话得分

总体而言,开始一个真正好的底漆绕到你的头拼字游戏引擎。我能够将大部分代码移植到C#中,而不需要知道F#的舔,所以对其他人来说不应该太糟糕。