我正在进行一项练习,我必须编写一个'平铺'游戏。该函数应该在多维数组中找到空白区块。然后,用户通过传入称为“tile”的整数来选择图块。如果用户输入的“图块”与空白图块相邻,则需要交换
然而,现在却没有发生这种情况。我被告知“问题在于你用可变瓦片交换单个物品的价值。变量瓦片可能与基板中的物品具有相同的值,但是它不是董事会中的项目。你需要在董事会上交换两个项目。“
另外,显然:“但我的if
语句的第二部分只检查该牌是否位于棋盘的最右下方。你是不是更想知道是否{{{ 1}}小于零?
'd'是用户之前在程序开始时选择的板的大小。如果他们选择3,则d = 3,因此多维阵列将等于3x3(d * d)。 然而,我不能,因为我的生活解决了这意味着什么:
blankCol - 1
你能否就我应该从哪里开始提出一些建议?
谢谢
答案 0 :(得分:0)
基本上问题是你只设置一个电路板磁贴的值:在你的函数中只执行一个board[(row)][(col)] = (value)
语句。
例如:
if (tile == board[blankRow + 1][blankCol] &&
tile != board[d + 1][d]) {
temp = board[blankRow][blankCol];
board[blankRow][blankCol] = tile;
tile = temp;
didSwap = 1;
return true;
}
请注意,只有一个board[...][...] =
- 类型的声明?因此,它只在电路板上设置一个磁贴值。
tile = temp;
语句,您似乎认为应该更改第一个tile,从而完成交换操作,只是分配给局部变量。它没有更改board
数组中记录的值。
我相信您的代码中还有其他问题。您有两条评论说"搜索空白磁贴",但显然第一条评论是正确的,第二条是复制粘贴但现在不准确:代码是搜索要移动的磁贴。然而,在整个板上搜索必须紧邻特定区块的区块(最好)是低效的。为什么不直接搜索空白区域周围的方块?您还需要确保不要超出数组范围,请考虑:
else if (tile == board[blankRow - 1][blankCol] &&
tile != board[d - 1][d]) {
...如果blankRow
为0怎么办? - 然后您正在访问board[-1][blankCol]
,这将调用未定义的行为,并可能导致您的程序失败或表现出奇怪的行为。
答案 1 :(得分:-1)
太多问题:
d=5
,检查磁贴超出范围,用户输入25
,它将显示超出范围。将代码更改为:
if Tile>d*d
还请尝试以下步骤:
4
如果向上,向下,向右的stmta。