井子棋c++ easyx
时间: 2023-11-27 13:47:27 浏览: 167
C++五子棋以Easyx实现
以下是使用EasyX图形库实现井字棋游戏的C++代码,具体实现过程请参考注释:
```c++
#include <graphics.h> // 引入EasyX图形库
#include <conio.h> // 引入控制台输入输出库
#include <stdio.h> // 引入标准输入输出库
#define ROW 3 // 定义行数
#define COL 3 // 定义列数
#define SIZE 100 // 定义每个格子的大小
// 初始化棋盘
void initBoard(int board[][COL]) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
board[i][j] = 0;
}
}
}
// 绘制棋盘
void drawBoard() {
setbkcolor(WHITE); // 设置背景颜色为白色
cleardevice(); // 清空屏幕
setlinecolor(BLACK); // 设置线条颜色为黑色
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为5
for (int i = 1; i < ROW; i++) {
line(0, i * SIZE, COL * SIZE, i * SIZE); // 绘制横线
}
for (int i = 1; i < COL; i++) {
line(i * SIZE, 0, i * SIZE, ROW * SIZE); // 绘制竖线
}
}
// 绘制棋子
void drawPiece(int x, int y, int player) {
if (player == 1) {
setfillcolor(RED); // 设置填充颜色为红色
} else {
setfillcolor(BLUE); // 设置填充颜色为蓝色
}
fillellipse(x * SIZE + SIZE / 2, y * SIZE + SIZE / 2, SIZE / 2, SIZE / 2); // 绘制圆形棋子
}
// 判断是否胜利
bool isWin(int board[][COL], int player) {
// 判断行是否相同
for (int i = 0; i < ROW; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return true;
}
}
// 判断列是否相同
for (int i = 0; i < COL; i++) {
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return true;
}
}
// 判断对角线是否相同
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
return true;
}
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
return true;
}
return false;
}
int main() {
initgraph(COL * SIZE, ROW * SIZE); // 初始化图形界面
int board[ROW][COL]; // 定义棋盘
int player = 1; // 定义当前玩家
initBoard(board); // 初始化棋盘
drawBoard(); // 绘制棋盘
while (true) {
if (_kbhit()) { // 判断是否有键盘输入
int key = _getch(); // 获取键盘输入
if (key == 27) { // 如果是ESC键,退出游戏
break;
}
if (key == ' ') { // 如果是空格键,落子
int x = mousex() / SIZE; // 获取鼠标点击的x坐标
int y = mousey() / SIZE; // 获取鼠标点击的y坐标
if (board[y][x] == 0) { // 判断该位置是否已经有棋子
board[y][x] = player; // 在该位置落子
drawPiece(x, y, player); // 绘制棋子
if (isWin(board, player)) { // 判断是否胜利
char msg[20];
sprintf(msg, "Player %d win!", player);
outtextxy(0, ROW * SIZE + 10, msg); // 输出胜利信息
Sleep(2000); // 等待2秒
break;
}
player = player == 1 ? 2 : 1; // 切换玩家
}
}
}
}
closegraph(); // 关闭图形界面
return 0;
}
```
阅读全文