使用c语言制作可局域网对战的五子棋代码
时间: 2023-03-20 10:00:28 浏览: 57
好的,以下是一个简单的可在局域网内对战的五子棋代码,使用C语言编写:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define BUF_SIZE 100
#define BOARD_SIZE 15
#define EMPTY 0
#define BLACK 1
#define WHITE 2
// 棋盘和玩家信息
int board[BOARD_SIZE][BOARD_SIZE];
char player1[BUF_SIZE] = "Player1";
char player2[BUF_SIZE] = "Player2";
// 初始化棋盘
void init_board() {
memset(board, EMPTY, sizeof(board));
}
// 打印棋盘
void print_board() {
int i, j;
printf("\n");
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
switch(board[i][j]) {
case EMPTY:
printf("+ ");
break;
case BLACK:
printf("X ");
break;
case WHITE:
printf("O ");
break;
}
}
printf("\n");
}
}
// 判断胜负
int check_win(int color) {
int i, j, k, count;
// 横向检查
for(i = 0; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE - 4; j++) {
count = 0;
for(k = 0; k < 5; k++) {
if(board[i][j+k] == color) {
count++;
}
}
if(count == 5) {
return 1;
}
}
}
// 纵向检查
for(i = 0; i < BOARD_SIZE - 4; i++) {
for(j = 0; j < BOARD_SIZE; j++) {
count = 0;
for(k = 0; k < 5; k++) {
if(board[i+k][j] == color) {
count++;
}
}
if(count == 5) {
return 1;
}
}
}
// 左上到右下检查
for(i = 0; i < BOARD_SIZE - 4; i++) {
for(j = 0; j < BOARD_SIZE - 4; j++) {
count = 0;
for(k = 0; k < 5; k++) {
if(board[i+k][j+k] == color) {
count++;
}
}
if(count == 5) {
return 1;
}
}
}
// 右上到左下检查
for(i = 4; i < BOARD_SIZE; i++) {
for(j = 0; j < BOARD_SIZE - 4; j++) {
count = 0;
for(k = 0; k < 5; k++) {
if(board[i-k][j+k] == color) {
count++;
}
}
if(count == 5) {
return 1;
}
}
}
return 0;
}
// 玩家下棋
void play(int color) {
int x, y;
printf("\n%s's turn, please input coordinate(x,y):\n", color == BLACK ? player1 : player2);
scanf("%d%d", &x, &y);
while