📜  获取玩家棋子 - C++ (1)

📅  最后修改于: 2023-12-03 15:27:51.215000             🧑  作者: Mango

获取玩家棋子 - C++

在制作棋类游戏时需要获取玩家落棋的位置,本文介绍如何在 C++ 中获取玩家棋子的位置。

获取鼠标点击位置

首先需要获取鼠标点击的位置,可以使用以下代码:

HWND hwnd = GetForegroundWindow();
POINT cursorPos;
GetCursorPos(&cursorPos);
ScreenToClient(hwnd, &cursorPos);
int x = cursorPos.x;
int y = cursorPos.y;

前两行代码获取当前窗口句柄和鼠标位置,第三行代码将鼠标位置转化为窗口内坐标系的位置,这样就可以获取到在窗口内的鼠标点击位置 xy

判断点击位置是否在棋盘内

假设棋盘为一个二维数组 int board[8][8],每个棋子占据一个单元,单元大小为 cellSize,那么可以使用以下代码判断鼠标点击位置是否在棋盘内:

int cellSize = 50;  // 棋盘单元大小
int boardSize = 8 * cellSize;  // 棋盘大小
int offsetX = (windowWidth - boardSize) / 2;  // 棋盘相对窗口的 x 偏移量
int offsetY = (windowHeight - boardSize) / 2;  // 棋盘相对窗口的 y 偏移量

if (x >= offsetX && x < offsetX + boardSize && y >= offsetY && y < offsetY + boardSize) {
    int i = (y - offsetY) / cellSize;
    int j = (x - offsetX) / cellSize;
    // 点击位置在棋盘内,获取棋子落点位置 (i, j)
} else {
    // 点击位置在棋盘外,忽略该点击事件
}

上述代码中,windowWidthwindowHeight 分别为窗口宽度和高度,offsetXoffsetY 分别为棋盘相对窗口的 x 和 y 偏移量。

代码片段
HWND hwnd = GetForegroundWindow();
POINT cursorPos;
GetCursorPos(&cursorPos);
ScreenToClient(hwnd, &cursorPos);
int x = cursorPos.x;
int y = cursorPos.y;

int cellSize = 50;  // 棋盘单元大小
int boardSize = 8 * cellSize;  // 棋盘大小
int offsetX = (windowWidth - boardSize) / 2;  // 棋盘相对窗口的 x 偏移量
int offsetY = (windowHeight - boardSize) / 2;  // 棋盘相对窗口的 y 偏移量

if (x >= offsetX && x < offsetX + boardSize && y >= offsetY && y < offsetY + boardSize) {
    int i = (y - offsetY) / cellSize;
    int j = (x - offsetX) / cellSize;
    // 点击位置在棋盘内,获取棋子落点位置 (i, j)
} else {
    // 点击位置在棋盘外,忽略该点击事件
}

总结:在 C++ 中,获取玩家棋子的位置需要先获取鼠标点击位置,然后再判断点击位置是否在棋盘内。如果在棋盘内,则可以根据棋盘单元大小和坐标系计算得到棋子落点位置。