gpt4 book ai didi

c - 十五人游戏中移动方 block 的问题

转载 作者:行者123 更新时间:2023-11-30 20:02:11 25 4
gpt4 key购买 nike

下面是十五人游戏中的一个函数,它应该搜索“0”图 block ,一旦找到,就允许相邻的图 block 移动到它的位置。它适用于前几次移动,但随后不允许当零图 block 位于顶行(它从右下角开始)时应允许的移动。请注意,下面的“0”图 block 被绘制为下划线。例如:

8  7  6 
5 4 3
2 1 _
Tile to move: 3

8 7 6
5 4 _
2 1 3
Tile to move: 6

8 7 _
5 4 6
2 1 3
Tile to move: 7

Illegal move.

这是代码:

bool move(int tile)
{
int blankrow;
int blankcol;
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
if (board[i][j] == 0)
{
blankrow = i;
blankcol = j;
}

}
}

for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
if ((board[i][j] == tile) && ((board[i+1][j] == 0 || board[i-1][j] == 0) &&
(board[i][j+1] == 0 || board[i][j-1] == 0)))
{
int swapped = board[i][j];
board[blankrow][blankcol] = swapped;
board[i][j] = 0;
return true;
}
}
}
return false;
}

最佳答案

只要看看,我就很确定你需要改变:

((board[i+1][j] == 0 || board[i-1][j] == 0) &&
(board[i][j+1] == 0 || board[i][j-1] == 0))

致:

(board[i+1][j] == 0 || board[i-1][j] == 0 ||
board[i][j+1] == 0 || board[i][j-1] == 0)

编辑:我同意下面的用户评论。更好的代码看起来像这样:

bool move(int tile)
{
int blankrow, blankcol, tilerow, tilecol;
for (int i = 0; i < d; i++) {
for (int j = 0; j < d; j++) {
if (board[i][j] == 0) {
blankrow = i;
blankcol = j;
}
else if (board[i][j] == tile) {
tilerow = i;
tilecol = j;
}
}
}

if( (blankrow == tilerow && abs(blankcol - tilecol) == 1) ||
(blankcol == tilecol && abs(blankrow - tilerow) == 1) ) {
board[blankrow][blankcol] = board[tilerow][tilecol];
board[tilerow][tilecol] = 0;
return true;
}
return false;
}

关于c - 十五人游戏中移动方 block 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com