c语言实现三字棋

三子棋:行,列,正负对角线率先到达三个的胜利。我在vs studio2019分了三个文件game.h;

game.c;test.c;

game.h//存放相关头文件和声明

#include<stdlib.h>
#include<time.h>
#include<Windows.h>
#define row 3
#define col 3
void menu();
void board_init(char arr[row][col]);
void board_show(char arr[row][col]);
int playgame();
void people_play(char arr[row][col]);
void computer_play(char arr[row][col]);
int isfull(char arr[row][col]);
int win(char arr[row][col]);

game.c//存放关键信息

#include "game.h"
void menu() {//打印菜单
	printf("****************\n");
	printf("1.玩游戏  0.退出\n");
	printf("****************\n");
}
void board_init(char arr[row][col]){//初始化数组
	int i = 0, j = 0;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			arr[i][j] = ' ';
		}
	}

}
void board_show(char arr[row][col]) {//打印棋盘
	int i = 0, j = 0;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			printf(" %c ", arr[i][j]);
			if (j < col-1) {
				printf("|");
			}
		}
		printf("\n");
		if (i < row - 1) {
			for (j = 0; j < col; j++) {
				printf("---");
				if (j < col - 1) {
					printf("|");
				}
			}
			printf("\n");
		}
	}
}
void people_play(char arr[row][col]) {//玩家下棋
	int x = 0, y = 0;
	printf("请输入您要下的坐标\n");
	scanf("%d %d", &x, &y);
	if (x <= row && y <= col&&arr[x-1][y-1]==' ') {
		arr[x - 1][y - 1] = '*';
	}
	else {
		printf("输入不合法请重新输入\n");
		people_play(arr);
	}

}
void computer_play(char arr[row][col]) {//电脑下棋
	int x=rand() % row;
	int y=rand() % col;
	if (arr[x][y] == ' ') {
		arr[x][y] = '#';
	}
	else {
		computer_play(arr);
	}
}
int win(char arr[row][col]) {//输赢判断
	int i = 0; int j;
	for (i = 0; i < row; i++) {
		if (arr[i][0] == arr[i][1] && arr[i][2] == arr[i][1]&& arr[i][1]!=' ') {
			return 0;
		}
	}
	for (j = 0; j < col; j++) {
		if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j]&& arr[2][j]!=' ') {
			return 0;
		}
	}
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]&& arr[2][2]!=' ') {
		return 0;
	}
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]&& arr[2][0]!=' ') {
		return 0;
	}
	return 1;
}
int isfull(char arr[row][col]) {//判断棋盘是否满
	int i = 0, j = 0;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			if (arr[i][j] == ' ')
				return 1;
		}
	}
	return 0;
}
int playgame(){
	    srand((unsigned)time(NULL));
	    char arr[row][col] = { 0 };
		board_init(arr);
		board_show(arr);
		while (isfull(arr)) {
			if (isfull(arr)) {
				people_play(arr);
				system("CLS");
				board_show(arr);
				if (!win(arr)) {
					printf("玩家赢\n");
					return 0;
				}
			}
		
			if (isfull(arr)) {
				computer_play(arr);
				system("CLS");
				board_show(arr);
				if (!win(arr)) {
					printf("电脑赢\n");
					return 0;
				} 
			}
		}
		printf("平局\n");
			
	}

test.c//控制游戏开始和结束

#include "game.h"
int main() {
	int input = 1;
	do {
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input) {
		case 1:
			playgame();
			break;
		case 0:
			return;
		default:
			printf("输入错误请重新输入");
			break;
		}

	} while (1);

}

运行截图太麻烦录了个视频主页里有想看可以看,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值