用C语言基于EASYCX制作井字棋小游戏,1.人和人对弈,黑白双方用不同图形表示,轮流落子; 2.3*3棋盘; 3.Asdf键控制方向,高亮显示当前位置,回车确认落子; 4.首先将三个棋子连成一条直线的获胜
时间: 2024-02-22 18:56:27 浏览: 122
好的,以下是一个简单的基于EASYCX的井字棋小游戏实现,满足你的要求:
```
#include <graphics.h>
#include <conio.h>
#define BLACK 1
#define WHITE 2
int board[3][3] = {0};
int currentPlayer = BLACK;
void drawBoard();
void drawPiece(int x, int y, int player);
int getRowCol(int x, int y, int *row, int *col);
int checkWin(int player);
int main()
{
initgraph(400, 400);
drawBoard();
while (true) {
// 获取键盘输入
int ch = getch();
if (ch == 27) { // ESC键退出游戏
break;
}
int x = getx(), y = gety();
int row, col;
if (getRowCol(x, y, &row, &col)) {
// 高亮显示当前位置
setfillcolor(YELLOW);
solidrectangle(col * 100 + 5, row * 100 + 5, col * 100 + 95, row * 100 + 95);
// 等待回车确认落子
while (getch() != 13) {}
// 绘制棋子
drawPiece(col, row, currentPlayer);
// 判断胜负
if (checkWin(currentPlayer)) {
setbkmode(TRANSPARENT);
settextstyle(40, 0, _T("宋体"));
outtextxy(100, 150, currentPlayer == BLACK ? _T("黑棋胜利!") : _T("白棋胜利!"));
break;
}
// 切换下棋玩家
currentPlayer = currentPlayer == BLACK ? WHITE : BLACK;
}
}
closegraph();
return 0;
}
// 绘制棋盘
void drawBoard()
{
setbkcolor(LIGHTGRAY);
cleardevice();
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 5);
line(100, 0, 100, 300);
line(200, 0, 200, 300);
line(0, 100, 300, 100);
line(0, 200, 300, 200);
}
// 绘制棋子
void drawPiece(int x, int y, int player)
{
int px = x * 100 + 50, py = y * 100 + 50;
setfillcolor(player == BLACK ? BLACK : WHITE);
setlinecolor(player == BLACK ? BLACK : WHITE);
setlinestyle(PS_SOLID, 3);
fillellipse(px, py, 40, 40);
}
// 根据鼠标位置计算对应的行列
int getRowCol(int x, int y, int *row, int *col)
{
if (x < 0 || x >= 300 || y < 0 || y >= 300) {
return 0;
}
*row = y / 100;
*col = x / 100;
if (board[*row][*col] != 0) {
return 0;
}
return 1;
}
// 判断是否胜利
int checkWin(int player)
{
int i, j;
// 检查行
for (i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
}
// 检查列
for (j = 0; j < 3; j++) {
if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
return 1;
}
}
// 检查对角线
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
return 1;
}
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
return 1;
}
return 0;
}
```
这个程序使用了EASYCX提供的图形库函数和键盘输入函数,可以通过ASDF键控制方向,高亮显示当前位置,回车确认落子。程序中使用一个二维数组来表示棋盘,用1表示黑子,用2表示白子,用0表示空位。每次下完子后,程序会检查当前玩家是否已经获胜,如果是则显示胜利信息并退出游戏。
阅读全文