gpt4 book ai didi

c++ - 西洋跳棋跳跃 Action (在 SFML 中)

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:23 28 4
gpt4 key购买 nike

我几周前开始编码,现在正在尝试跳棋游戏。我创建了一个名为“figure”的类,然后是一个数组(figure Figure [value])。我在 main.cpp 中创建了一个二维字段数组,并用每个 Figure[] 的数字填充它。例如:

(main.cpp)
figure Figure[33]; //Figure-array

for (int i = 0; i < 33; i++)
{
Figure[i].id = i;
}

int field[7][7] = { // (I messed the ID's up a little, just ignore it
{0, 0, 1, 2, 3, 0, 0},
{0, 0, 4, 5, 6, 0, 0},
{7, 8, 9, 10, 11, 12, 13}
{14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27},
{0, 0, 28, 29, 30, 0, 0},
{0, 0, 31, 32, 33, 0, 0}
};

for (int y = 0; y < 7; y++) //Field gets filled with figure-values {
for (int x = 0; x < 7; x++)
{
if (field[y][x] != 0)
{
Figure[field[y][x] - 1].setPosition(Vector2i(x + 1, y + 1));
}
}
}

现在我想做一个更新函数,让它们互相跳过等等。我的问题是我不知道如何正确地做到这一点,我不知道如何完整地编写这个函数。这就是我所拥有的已经:

(Updatefunction)
void figure::update(int (&field)[7][7], RenderWindow &window) {

Vector2i mouseCoords;
mouseCoords.x = int(Mouse::getPosition(window).x / 114);
mouseCoords.y = int(Mouse::getPosition(window).y / 85);

if ((field[mouseCoords.y][mouseCoords.x] != 0) && (Mouse::isButtonPressed(Mouse::Left)))
{
if ((field[mouseCoords.y][mouseCoords.x] != 0) && !(Mouse::isButtonPressed(Mouse::Left)))
{
selected = true; //selected defined in figure.h
}

}

Vector2i newMouseCoords;
newMouseCoords.x = int(Mouse::getPosition(window).x / 114);
newMouseCoords.y = int(Mouse::getPosition(window).y / 85);

if (selected = true)
{
if ((newMouseCoords.x == mouseCoords.x + 2) && (field[newMouseCoords.y][newMouseCoords.x + 2] != 0))
{

}
}

我不知道如何在这里继续,非常感谢提示!

最佳答案

你没有提供所有的代码,所以我不能给你一个确切的解决方案(而且你的完整列表可能太长,如果你包含它会使问题变得不可读,所以我不建议).

考虑到您现有的代码,我将如何解决它:

  1. 在此函数中做一些事情来处理适当的轮次。不要让玩家移动不属于他们的棋子。
  2. 在您的第一次点击检查中,不要只将非特定片段的 bool 值设置为 true。而是将“所选片段”存储在其他变量中。
  3. 在您第二次点击检查之前,查看是否设置了“selected piece”变量(也许检查它是否不是 null - 取决于您如何定义该变量)。
  4. 在第二次点击检查的主体内,查看所选棋子的目标位置是否构成有效移动。如果没有,则向用户显示错误。
  5. 如果第二次点击检查构成有效着法,则更新棋盘:
    1. 移动棋子,捕获它跳过的任何棋子,必要时为王
    2. 如果还有另一个可能的双跳 Action (他们可能有两个双跳 Action 可供选择),则允许玩家选择另一个 Action 。这意味着更多的“如果” block ...
    3. 如果有双跳,则允许此人退出移动,因为他们尚未完成。夺回他们的第一次跳跃。
    4. 根据您对规则的严格程度,不要让一个人选择不做二段跳。如果可能,一些跳棋规则强制要求捕获。
    5. 一旦所有移动都完成,然后切换跟踪轮到谁的变量,并取消设置“所选棋子”变量。
  6. 处理游戏结束检查和游戏结束状态。这可能应该在移动后完成。

关于c++ - 西洋跳棋跳跃 Action (在 SFML 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552124/

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