📅  最后修改于: 2023-12-03 15:27:51.215000             🧑  作者: Mango
在制作棋类游戏时需要获取玩家落棋的位置,本文介绍如何在 C++ 中获取玩家棋子的位置。
首先需要获取鼠标点击的位置,可以使用以下代码:
HWND hwnd = GetForegroundWindow();
POINT cursorPos;
GetCursorPos(&cursorPos);
ScreenToClient(hwnd, &cursorPos);
int x = cursorPos.x;
int y = cursorPos.y;
前两行代码获取当前窗口句柄和鼠标位置,第三行代码将鼠标位置转化为窗口内坐标系的位置,这样就可以获取到在窗口内的鼠标点击位置 x
和 y
。
假设棋盘为一个二维数组 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 {
// 点击位置在棋盘外,忽略该点击事件
}
上述代码中,windowWidth
和 windowHeight
分别为窗口宽度和高度,offsetX
和 offsetY
分别为棋盘相对窗口的 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++ 中,获取玩家棋子的位置需要先获取鼠标点击位置,然后再判断点击位置是否在棋盘内。如果在棋盘内,则可以根据棋盘单元大小和坐标系计算得到棋子落点位置。