五子棋c语言
时间: 2023-06-22 15:31:06 浏览: 179
五子棋是一种非常经典的棋类游戏,以下是一个简单的五子棋C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 15
#define COL 15
void show_board(char board[][COL]);
int judge_win(char board[][COL], int row, int col);
int main(){
char board[ROW][COL];
memset(board, ' ', sizeof(board)); //初始化棋盘为空格
int row, col;
char symbol = 'X'; //X先手,O后手
while(1){
show_board(board);
printf("请 %c 方输入下棋的位置(e.g. 3,4):", symbol);
scanf("%d,%d", &row, &col);
if(row >= 1 && row <= ROW && col >= 1 && col <= COL && board[row-1][col-1] == ' '){
board[row-1][col-1] = symbol;
if(judge_win(board, row-1, col-1)){
show_board(board);
printf("%c 方胜利!\n", symbol);
break;
}
symbol = (symbol == 'X' ? 'O' : 'X'); //交换下棋方
}
else{
printf("输入有误,请重新输入!\n");
}
}
return 0;
}
//显示棋盘
void show_board(char board[][COL]){
printf(" ");
for(int i=1; i<=COL; i++){
printf("%d ", i);
}
printf("\n");
for(int i=0; i<ROW; i++){
printf("%d ", i+1);
for(int j=0; j<COL; j++){
printf("%c ", board[i][j]);
}
printf("\n");
}
}
//判断胜利
int judge_win(char board[][COL], int row, int col){
int i, j, count;
//判断横向五子连珠
count=1;
for(i=col-1; i>=0 && board[row][i]==board[row][col]; i--,count++);
for(i=col+1; i<COL && board[row][i]==board[row][col]; i++,count++);
if(count >= 5) return 1;
//判断纵向五子连珠
count=1;
for(i=row-1; i>=0 && board[i][col]==board[row][col]; i--,count++);
for(i=row+1; i<ROW && board[i][col]==board[row][col]; i++,count++);
if(count >= 5) return 1;
//判断右上斜向五子连珠
count=1;
for(i=row-1, j=col+1; i>=0 && j<COL && board[i][j]==board[row][col]; i--,j++,count++);
for(i=row+1, j=col-1; i<ROW && j>=0 && board[i][j]==board[row][col]; i++,j--,count++);
if(count >= 5) return 1;
//判断右下斜向五子连珠
count=1;
for(i=row-1, j=col-1; i>=0 && j>=0 && board[i][j]==board[row][col]; i--,j--,count++);
for(i=row+1, j=col+1; i<ROW && j<COL && board[i][j]==board[row][col]; i++,j++,count++);
if(count >= 5) return 1;
return 0;
}
```
运行后,会显示一个15x15的棋盘,玩家可以输入坐标下棋,程序会判断胜负并交换下棋方。注意,这只是一个简单的示例,还有很多需要完善的地方,例如输入错误时的处理、和AI对战等。
阅读全文