我正在实施填字游戏后端。
填字游戏由插槽组成,由单元组成。
让我们说(3,14)的单元格的值为" a" 我想要crossword.changeCellValueByCoordinate(3,14," x")来做" a" - >" x"
让我们说一些Slot插槽在坐标处有一个头部单元(3,14) 槽头可以通过(2,跨)== Cell(3,14)来识别 所以当我接下来调用slot.getCellValueByNumberAndDirection(2,across)时,它已经从" a"到" x"。
另一种方法(对于同一个单元格)crossword.getSlot(2,across).getHead也改变了" a"到" x"。
如何实现所有三种不同类型的对象(填字游戏,插槽,单元格)都有一个属性(可能是同名,让我们称之为#34;内容"),这是所有人共享/引用的类?
答案 0 :(得分:1)
有很多方法可以解决这个问题。这是一种方式:
我不太关心" Slot"类。这对线索之间的交叉没有任何帮助。
当你看一个填字游戏时,你看到了什么?我看到一块空方块。有些人在角落里的人数很少。我也看到了我知道我无法写入的暗块。我看到了一个" down"线索,以及"跨越#34;线索。
无论我做什么,我都写在那个空方块的板上。因此,我将制作一个类似网格的类,称为Board,允许我在其上书写。某些方块中的小数字将是特定单词的索引方式。如果正方形不可写,则每个单元格的内容可以是空格,字母或-1。
您可以选择实现Square(或Cell)类。它将包含一个标志,说明实例的写入能力。它可以包括一个数字,表示线索适用的单元格。有更优雅的方法来做到这一点。实现这一点,我们可以讨论更高级的类层次结构。
Board类将包含一个Cell实例的NxN结构(可能是一个数组)。
另一个课程会被称为" Clues"这对应于向下或跨越线索的列表。线索包括Clue实例列表。
最后,我有一个Clue类,其中每个实例都包含一个ID(例如15" 15 down"例如),以及要显示的线索文本。
我认为一旦你初始化了董事会,你就拥有了制作一个好的填字游戏计划所需的一切。