while (true) { // 获取一条鼠标或按键消息 m = getmessage(EX_MOUSE | EX_KEY); switch (m.message) { case WM_MOUSEMOVE: break; case WM_LBUTTONDOWN: { if (750 <= m.x && m.x <= 850 && 50 <= m.y && m.y <= 100) { // outtextxy(20, 10, "reset"); chess.clear(); for_(i, 0, 14) { chess.push_back(ivec(15, 0)); } drawboard(); gameover = false; num = 1; break; } //750, 150, 850, 200 if (750 <= m.x && m.x <= 850 && 150 <= m.y && m.y <= 200) { // char s[20]; // sprintf(s, "%d", chess[0].size()); // outtextxy(20, 10, s); ofstream out("chessdata.dat", ios::trunc | ios::binary); for_(i, 0, 14) { for_(j, 0, 14) { out.write((char*)&chess(i, j), 4); } } for_(i, 0, 14) { for_(j, 0, 14) { out.write((char*)&nums(i, j), 4); } } break; } //750, 150, 850, 200 if (750 <= m.x && m.x <= 850 && 250 <= m.y && m.y <= 300) { // char s[20]; // sprintf(s, "%d", chess[0].size()); // outtextxy(20, 10, "read"); ifstream in("chessdata.dat", ios::in | ios::binary); for_(i, 0, 14) { for_(j, 0, 14) { in.read((char*)&chess(i, j), 4); } } for_(i, 0, 14) { for_(j, 0, 14) { in.read((char*)&nums(i, j), 4); } } // char s[20]; // sprintf(s, "%d", chess[0][0]); // outtextxy(20, 10, s); drawchess(); settextcolor(RED); if (isfive(chess)) { outtextxy(20, 10, "black wins!"); gameover = true; } else if (isfive(chess, 2)) { outtextxy(20, 10, "white wins!"); gameover = true; } break; }
时间: 2024-04-26 07:23:51 浏览: 138
这段代码应该是在一个消息循环中,不断地获取鼠标和按键消息,根据不同的消息类型来执行不同的操作。
其中,如果是鼠标左键按下的消息,会判断鼠标的位置,如果在(750, 50)到(850, 100)的范围内,就会清空棋盘、重新绘制棋盘、重置游戏状态等操作;如果在(750, 150)到(850, 200)的范围内,就会将当前的棋局数据写入文件;如果在(750, 250)到(850, 300)的范围内,就会从文件中读取之前保存的棋局数据,并重新绘制棋盘。在读取完数据后,还会判断是否有五子连珠的情况出现,如果出现就会显示对应的胜利信息,并将游戏状态设置为结束。
这段代码只是一个消息循环中的一部分,要理解清楚它的具体作用,还需要看整个程序的代码实现。
阅读全文