c语言井字棋源代码300
时间: 2023-09-19 10:05:46 浏览: 125
c语言井字棋
### 回答1:
以下是一个简单的 C 语言井字棋游戏的源代码,大约300行左右。代码中包含了游戏初始化、棋盘显示、绘制棋子、落子、判断胜负等功能,还包含了一些注释,方便理解。注:代码中使用了Windows API函数,因此只适用于Windows系统。
```c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define BOARD_WIDTH 30 //棋盘宽度
#define BOARD_HEIGHT 20 //棋盘高度
#define CELL_WIDTH 5 //每个格子的宽度
#define CELL_HEIGHT 3 //每个格子的高度
char board[3][3]; //定义一个3*3的棋盘
//初始化棋盘
void init_board() {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
//绘制棋盘
void draw_board() {
int i, j;
//清屏
system("cls");
//绘制棋盘
for (i = 0; i < BOARD_HEIGHT; i++) {
for (j = 0; j < BOARD_WIDTH; j++) {
if (i == 0 || i == BOARD_HEIGHT-1) {
printf("-");
} else if (j == 0 || j == BOARD_WIDTH-1) {
printf("|");
} else if (i % CELL_HEIGHT == 0 && j % CELL_WIDTH == 0) {
printf("+");
} else if (i % CELL_HEIGHT == 1 && j % CELL_WIDTH == 2) {
printf("%c", board[i/CELL_HEIGHT][j/CELL_WIDTH]);
} else {
printf(" ");
}
}
printf("\n");
}
}
//绘制棋子
void draw_piece(int row, int col, char piece) {
int x = col * CELL_WIDTH + CELL_WIDTH/2;
int y = row * CELL_HEIGHT + CELL_HEIGHT/2;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = {x, y};
SetConsoleCursorPosition(hConsole, pos);
printf("%c", piece);
}
//落子
int make_move(int row, int col, char piece) {
if (board[row][col] == ' ') {
board[row][col] = piece;
draw_piece(row, col, piece);
return 1;
} else {
return 0;
}
}
//检查胜负
int check_win() {
int i;
//检查每一行
for (i = 0; i < 3; i++) {
if (board[i][0] == board[i][1] && board[i][0] == board[i][2]) {
if (board[i][0] == 'X') {
return 1;
} else if (board[i][0] == 'O') {
return 2;
}
}
}
//检查每一列
for (i = 0; i < 3; i++) {
if (board[0][i] == board[1][i] && board[0][i] == board[2][i]) {
if (board[0][i] == 'X') {
return 1;
} else if (board[0][i] == 'O') {
return 2;
}
}
}
//检查对角线
if (board[0][0] == board[1][1] && board[0][0] == board[2][2]) {
if (board[0][0] == 'X') {
return 1;
} else if (board[0][0] == 'O') {
return 2;
}
}
if (board[0][2] == board[1][1] && board[0][2] == board[2][0]) {
if (board[0][2] == 'X') {
return 1;
} else if (board[0][2] == 'O') {
return 2;
}
}
//没有获胜者
return 0;
}
int main() {
int row, col;
int player = 1;
int winner = 0;
init_board();
draw_board();
printf("欢迎来玩井字棋游戏!\n");
while (1) {
printf("玩家 %d, 请输入行号和列号(例如:1 2):", player);
scanf("%d %d", &row, &col);
if (row < 1 || row > 3 || col < 1 || col > 3) {
printf("输入无效,请重新输入!\n");
continue;
}
if (!make_move(row-1, col-1, (player == 1) ? 'X' : 'O')) {
printf("这个位置已经有棋子了,请重新输入!\n");
continue;
}
winner = check_win();
if (winner != 0) {
break;
}
player = (player == 1) ? 2 : 1;
}
draw_board();
printf("恭喜玩家 %d 获胜!\n", winner);
return 0;
}
```
希望这个源代码对你有所帮助!
### 回答2:
下面是一段用C语言编写的井字棋游戏的源代码:
```
#include <stdio.h>
#include <stdlib.h>
char board[3][3]; // 井字棋棋盘
void initialize_board() {
// 初始化棋盘,使用空格表示空位
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
void print_board() {
// 打印棋盘
printf("-------------\n");
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
printf("| %c ", board[i][j]);
}
printf("|\n");
printf("-------------\n");
}
}
int check_winner() {
// 检查是否有玩家赢得比赛,返回1表示玩家1赢,返回2表示玩家2赢,返回0表示平局,返回-1表示比赛未结束
// 检查行
for(int i = 0; i < 3; i++) {
if(board[i][0] == board[i][1] && board[i][0] == board[i][2]) {
if(board[i][0] == 'X') {
return 1;
} else if(board[i][0] == 'O') {
return 2;
}
}
}
// 检查列
for(int i = 0; i < 3; i++) {
if(board[0][i] == board[1][i] && board[0][i] == board[2][i]) {
if(board[0][i] == 'X') {
return 1;
} else if(board[0][i] == 'O') {
return 2;
}
}
}
// 检查对角线
if(board[0][0] == board[1][1] && board[0][0] == board[2][2]) {
if(board[0][0] == 'X') {
return 1;
} else if(board[0][0] == 'O') {
return 2;
}
}
if(board[0][2] == board[1][1] && board[0][2] == board[2][0]) {
if(board[0][2] == 'X') {
return 1;
} else if(board[0][2] == 'O') {
return 2;
}
}
// 检查平局
int count = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(board[i][j] != ' ') {
count++;
}
}
}
if(count == 9) {
return 0;
}
// 比赛未结束
return -1;
}
int main() {
int player = 1; // 当前玩家,1表示玩家1,2表示玩家2
int row, col; // 用于存储玩家输入的行和列
int winner = -1; // 存储胜利者编号
initialize_board(); // 初始化棋盘
while(winner == -1) {
print_board(); // 打印当前棋盘
// 获取玩家输入
printf("玩家%d,请输入要下的行和列(用空格分隔):", player);
scanf("%d %d", &row, &col);
// 检查行和列的有效性,以及该位置是否已被占用
if(row < 0 || row >= 3 || col < 0 || col >= 3 || board[row][col] != ' ') {
printf("输入无效,请重新输入。\n");
continue;
}
// 根据当前玩家下棋
if(player == 1) {
board[row][col] = 'X';
} else {
board[row][col] = 'O';
}
winner = check_winner(); // 检查是否有玩家胜出
// 切换玩家
if(player == 1) {
player = 2;
} else {
player = 1;
}
}
print_board(); // 打印最终棋盘
// 输出比赛结果
if(winner == 0) {
printf("比赛结束,平局。\n");
} else {
printf("比赛结束,玩家%d获胜!\n", winner);
}
return 0;
}
```
这个源代码实现了一个简单的井字棋游戏,其中包括了棋盘初始化、打印棋盘、检查胜利者、玩家交替下棋等功能。玩家通过输入行和列的坐标来下棋,然后程序会检查是否有玩家胜出或者比赛是否平局,并最终输出比赛结果。
### 回答3:
下面是一个简单的C语言井字棋的源代码:
```c
#include <stdio.h>
char grid[3][3]; // 井字棋盘格
// 初始化井字棋盘
void init_grid() {
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
grid[i][j] = '-';
}
}
}
// 绘制井字棋盘
void draw_grid() {
printf(" 1 2 3\n");
for(int i=0; i<3; i++) {
printf("%d ", i+1);
for(int j=0; j<3; j++) {
printf("%c ", grid[i][j]);
}
printf("\n");
}
}
// 判断是否有胜者
int winner() {
// 检查每一行
for(int i=0; i<3; i++) {
if(grid[i][0] != '-' && grid[i][0] == grid[i][1] && grid[i][1] == grid[i][2]) {
return 1;
}
}
// 检查每一列
for(int j=0; j<3; j++) {
if(grid[0][j] != '-' && grid[0][j] == grid[1][j] && grid[1][j] == grid[2][j]) {
return 1;
}
}
// 检查对角线
if(grid[0][0] != '-' && grid[0][0] == grid[1][1] && grid[1][1] == grid[2][2]) {
return 1;
}
if(grid[0][2] != '-' && grid[0][2] == grid[1][1] && grid[1][1] == grid[2][0]) {
return 1;
}
return 0;
}
// 主程序
int main() {
int player = 1; // 当前玩家,1表示玩家1,2表示玩家2
int row, col; // 玩家输入的行和列
init_grid(); // 初始化井字棋盘
while(1) {
draw_grid(); // 绘制井字棋盘
printf("玩家%d,请输入行和列(用空格分隔):", player);
scanf("%d %d", &row, &col);
if(row < 1 || row > 3 || col < 1 || col > 3) {
printf("输入无效,请重新输入!\n");
continue; // 重新开始循环
}
if(grid[row-1][col-1] != '-') {
printf("该位置已经有棋子了,请重新输入!\n");
continue; // 重新开始循环
}
if(player == 1) {
grid[row-1][col-1] = 'X';
player = 2;
} else {
grid[row-1][col-1] = 'O';
player = 1;
}
if(winner()) {
printf("玩家%d获胜!\n", player==1 ? 2 : 1);
break; // 结束游戏
}
}
draw_grid(); // 绘制井字棋盘
return 0;
}
```
这是一个简单的井字棋游戏,玩家1使用X标记,玩家2使用O标记。每个玩家轮流输入行和列来下棋,直到有玩家获胜或者平局。游戏结束后,会显示胜利的玩家并打印最终的井字棋盘。
阅读全文