gpt4 book ai didi

c - 有没有更好的方法来确保矩阵之外的元素不被访问?

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

我正在使用 Ncurses 库用 C 语言编写游戏跳棋程序,并且我将所有棋子存储在矩阵、g.board 中,并且在寻找可能的移动时,我需要确保程序不会尝试访问由于分割错误,元素位于矩阵之外。我有一个解决方案,但感觉相当粗糙,我感觉有一种更优雅的方法可以做到这一点,但我找不到或想到它。

int xint y引用该矩阵中的 x 和 y 位置,我想在该矩阵中寻找可能的移动。 char ck只是告诉我,如果这件作品是一种颜色的国王,那么正常的颜色只能向一个方向移动。 g.board[y][x].possible只是结构中的 bool 变量告诉我这是否是可能的移动。

void checkPossible(int y, int x, char ck);
{
bool left = false, right = false, top = false, bottem = false;

// Dertimes if a tile is out of bounds
if (y != 0)
{
top = true;
}
if (y != 8)
{
bottem = true;
}
if (x != 0)
}
left = true;
}
if (x != 8)
{
right = true;
{

// Sets g.board.possible to true if possible move
if ((top == true && left == true) && (ck == 'k' || ck == 'w'))
{
g.board[y - 1][x - 1].possible = true;
}
if ((top == true && right == true) && (ck == 'k' || ck == 'w'))
{
g.board[y - 1][x + 1].possible = true;
}
if ((bottem == true && left == true) && (ck == 'k' || ck == 'r'))
{
g.board[y + 1][x - 1].possible = true;
}
if ((bottem == true && right == true) && (ck == 'k' || ck == 'r'))
{
g.board[y + 1][x + 1].possible = true;
}
}

据我所知它有效,我没有对其进行太多测试,但感觉很粗糙。对于任何错误或不太理想的编码,我深表歉意,我对此很陌生。

最佳答案

有一件事看起来很可疑。 g.board[y - 1][x - 1].possible == true 应该是 g.board[y - 1][x - 1].possible = true >。当前代码不执行任何操作。

代码也非常复杂。看看这个:

void checkPossible(int y, int x, char ck);
{
bool left = x != 0,
right = x != 8,
top = y !=8,
bottem = y!=0;

// Sets g.board.possible to true if possible move
if(ck == 'k' || ck == 'w') {
g.board[y - 1][x - 1].possible = (top && left);
g.board[y - 1][x + 1].possible = (top && right);
g.board[y + 1][x - 1].possible = (bottem && left);
g.board[y + 1][x + 1].possible = (bottem && right);
}
}

一般情况下,不要将 bool 变量与 bool 常量 true 和 false 或其他值进行比较。直接按原样使用它们,并为它们指定描述性名称。

另外,我会(可能是因为我还没有看到代码的其余部分)对坐标和字符进行分开检查。在单个函数中放置的功能越少,它就越容易理解、维护和命名。像这样:

bool isValidCoordinate(int y, int x) {
return y>=0 && y<=8 && x>=0 && x<=8;
}

bool isValidCharacter(char ck) {
return ck == 'k' || ck == 'w';
}

我不知道这是否适合您的项目,但它提供了您如何做到这一点的想法。

关于c - 有没有更好的方法来确保矩阵之外的元素不被访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946497/

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