我怎么只交换一个而不是两个值?

时间:2016-07-09 09:32:42

标签: c multidimensional-array swap

我正在进行一项练习,我必须编写一个'平铺'游戏。该函数应该在多维数组中找到空白区块。然后,用户通过传入称为“tile”的整数来选择图块。如果用户输入的“图块”与空白图块相邻,则需要交换

然而,现在却没有发生这种情况。我被告知“问题在于你用可变瓦片交换单个物品的价值。变量瓦片可能与基板中的物品具有相同的值,但是它不是董事会中的项目。你需要在董事会上交换两个项目。“

另外,显然:“但我的if语句的第二部分只检查该牌是否位于棋盘的最右下方。你是不是更想知道是否{{{ 1}}小于零?

'd'是用户之前在程序开始时选择的板的大小。如果他们选择3,则d = 3,因此多维阵列将等于3x3(d * d)。 然而,我不能,因为我的生活解决了这意味着什么:

blankCol - 1

你能否就我应该从哪里开始提出一些建议?

谢谢

2 个答案:

答案 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)

太多问题:

  1. 假设d=5,检查磁贴超出范围,用户输入25,它将显示超出范围。
  2. 将代码更改为:

    if Tile>d*d
    
    1. 还请尝试以下步骤:

      1. 查找空白图块
      2. 查看用户是否输入了相邻的图块。不需要循环,只有4如果向上,向下,向右的stmta。
      3. 如果确实相邻,则交换值。