- 在ChessData.h中添加棋子类型
typedef enum {
CHESS_WHITE = -1,
CHESS_BLACK = 1
} chess_kind_t;
- 在main.cpp封装“落子”代码
void chessDown(int row, int col, chess_kind_t kind) {
mciSendString("play res/down7.WAV", 0, 0, 0);
int x = margin_x col * BLOCK_SIZE - 0.5 * BLOCK_SIZE;
int y = margin_y row * BLOCK_SIZE - 0.5 * BLOCK_SIZE;
if (kind == CHESS_WHITE) {
drawPNG(&chessWhiteImg, x, y);
}
else {
drawPNG(&chessBlackImg, x, y);
}
}
- 落子
int main(void) {
init();
while (1) {
MOUSEMSG msg = GetMouseMsg();
if (msg.uMsg == WM_LBUTTONDOWN && clickBoard(msg)) {
chessDown(clickPosRow, clickPosCol, CHESS_BLACK);
}
}
system("pause");
return 0;
}
2.优化项目架构
bool checkOver() { // 检查游戏是否结束
return false;
}
void AI_GO() { //AI走棋
}
void manGo() { // 玩家走棋
chessDown(clickPosRow, clickPosCol, CHESS_BLACK);
}
int main(void) {
init();
while (1) {
MOUSEMSG msg = GetMouseMsg();
if (msg.uMsg == WM_LBUTTONDOWN) {
manGo();
if (checkOver()) {
init();
continue;
}
AI_GO();
if (checkOver()) {
init();
continue;
}
}
}
closegraph();
return 0;
}
9.更新游戏数据
人(黑方)落子后,还没有修改底层的游戏数据。
在ChessDatat.h添加接口:
void updateGameMap(ChessData* data, int row, int col);
在ChessData.cpp中添加实现。
void updateGameMap(ChessData* data, int row, int col)
{
if (!data)return;
if (data->playerFlag)
data->chessMap[row][col] = 1;
else
data->chessMap[row][col] = -1;
data->playerFlag = !data->playerFlag; // 换手
}
应用更新:
void manGo() { // 玩家走棋
chessDown(clickPosRow, clickPosCol, CHESS_BLACK);
updateGameMap(&game, clickPosRow, clickPosCol);
}
10.实现AI走棋五子棋入门
连2
活3