跳棋跳跃动作(SFML)

时间:2015-12-31 22:32:18

标签: c++ sfml

几个星期前我开始编码,现在正在尝试检查游戏。我创建了一个名为“figure”的类,然后是一个数组(图图[value])。 我在main.cpp中创建了一个2D字段数组,并用每个Figure []的数字填充它。 E.G:

(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 个答案:

答案 0 :(得分:2)

您尚未提供所有代码,因此我无法为您提供准确的解决方案(并且您的完整列表可能会太长,并且如果您将其包含在内,则会使问题无法读取,因此我不建议您)。

鉴于您现有的代码如下所示,我将如何解决它:

  1. 在此功能中执行某些操作以处理适当的转弯。不要让玩家移动不属于他们的棋子。
  2. 在第一次单击检查时,不要只将非片段特定的布尔值设置为true。将“选定的作品”存储在其他变量中。
  3. 在第二次单击检查之前,查看是否设置了“选定的片段”变量(可能检查它是否不是null - 取决于您如何定义该变量)。
  4. 在第二次点击检查的正文中,查看所选作品的目标位置是否构成有效移动。如果没有,则向用户显示错误。
  5. 如果第二次点击检查构成有效的移动,则更新电路板:
    1. 移动棋子,捕捉它跳过的任何棋子,必要时为王
    2. 如果有可能进行另一次双跳动作(他们可以选择两次双跳),则让玩家选择另一个动作。这意味着更多的“if”块......
    3. 如果有双跳,则允许此人退出移动,因为他们还没有完成。取消他们的第一次跳跃。
    4. 根据您对规则的严格程度,不要让某人选择不进行双跳。如果可能的话,一些跳棋规则会强制捕获。
    5. 一旦所有动作完成,然后切换跟踪转动的变量,并取消设置“选定的部分”变量。
  6. 处理游戏结束检查,游戏结束状态。这可能应该在搬家后完成。