用C语言基于EASYX制作井字棋小游戏,1.人和人对弈,双方用O和X表示,轮流落子; 2.3*3棋盘; 3.Asdf键控制方向,高亮显示当前位置,回车确认落子; 4.首先将三个棋子连成一条直线的获胜 代码
时间: 2024-02-22 11:57:00 浏览: 44
好的,这里提供一份代码供你参考:
```c
#include <graphics.h>
#include <conio.h>
int board[3][3] = {0}; // 定义3*3的棋盘,用0表示空格,1表示O,2表示X
int player = 1; // 定义当前玩家,用1表示O,2表示X
void drawBoard() // 绘制棋盘
{
setcolor(WHITE);
for(int i = 1; i <= 2; i++)
{
line(100 * i, 0, 100 * i, 300); // 绘制竖线
line(0, 100 * i, 300, 100 * i); // 绘制横线
}
}
void drawPiece(int x, int y) // 绘制棋子
{
if(player == 1) // 绘制O
{
setcolor(YELLOW);
circle(x, y, 40);
}
else if(player == 2) // 绘制X
{
setcolor(RED);
line(x - 40, y - 40, x + 40, y + 40);
line(x + 40, y - 40, x - 40, y + 40);
}
}
void movePiece(int x, int y) // 移动棋子
{
int i = x / 100;
int j = y / 100;
if(board[i][j] == 0) // 如果该位置为空格,才能落子
{
board[i][j] = player; // 在该位置落子
drawPiece(i * 100 + 50, j * 100 + 50); // 绘制棋子
player = 3 - player; // 切换玩家
}
}
bool checkWin() // 判断胜负
{
for(int i = 0; i < 3; i++)
{
if(board[i][0] != 0 && board[i][0] == board[i][1] && board[i][1] == board[i][2]) // 横向判断
return true;
if(board[0][i] != 0 && board[0][i] == board[1][i] && board[1][i] == board[2][i]) // 竖向判断
return true;
}
if(board[1][1] != 0 && board[0][0] == board[1][1] && board[1][1] == board[2][2]) // 对角线判断
return true;
if(board[1][1] != 0 && board[0][2] == board[1][1] && board[1][1] == board[2][0]) // 对角线判断
return true;
return false;
}
int main()
{
initgraph(300, 300);
drawBoard(); // 绘制棋盘
while(true)
{
int x = -1, y = -1; // 初始化落子位置
if(GetAsyncKeyState(0x41) & 0x8000) // 检测A键
x = 0;
if(GetAsyncKeyState(0x53) & 0x8000) // 检测S键
y = 2;
if(GetAsyncKeyState(0x44) & 0x8000) // 检测D键
x = 2;
if(GetAsyncKeyState(0x57) & 0x8000) // 检测W键
y = 0;
if(GetAsyncKeyState(VK_RETURN) & 0x8000) // 检测回车键
{
movePiece(x * 100 + 50, y * 100 + 50); // 移动棋子
if(checkWin()) // 判断胜负
{
if(player == 1)
outtextxy(120, 120, "O wins!");
else if(player == 2)
outtextxy(120, 120, "X wins!");
break;
}
}
if(x != -1 || y != -1) // 高亮显示当前位置
{
setcolor(GREEN);
rectangle(x * 100, y * 100, x * 100 + 100, y * 100 + 100);
}
delay(50); // 延迟50毫秒
cleardevice(); // 清空画布
drawBoard(); // 重新绘制棋盘和棋子
}
getch();
closegraph();
return 0;
}
```
这份代码实现了人人对弈的井字棋小游戏,支持使用Asdf键控制方向高亮显示当前位置,并使用回车键确认落子。首先将三个棋子连成一条直线的玩家获胜,可以显示胜利信息并提供重新开始游戏的选项。