c语言三子棋

头文件
#pragma once

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>

#define ROW 3
#define LIN 3

void menu();
char initboard(char arr[][LIN], int row);
char checkerboard(char arr[][LIN], int row);
char manplay(char arr[][LIN], int row);
char complay(char arr[][LIN], int row);
int is_full(char arr[][LIN], int row);
char is_win(char arr[][LIN], int row, int lin);


main函数
#include "game.h"

int main()
{
	int input=0;
	do{
		menu();
		printf("请选择: \n");
		scanf_s("%d", &input);
		switch (input){
		case 1:game(); break;
		case 2:exit(0); break;
		default:printf("请重新输入\n"); break;
		}
	} while (1);


}
game函数
#include "game.h"

void menu()
{

	printf("#######################\n");
	printf("#######1.play   #######\n");
	printf("#######0.exit   #######\n");
	printf("#######################\n");
}
char initboard(char arr[ROW][LIN], int row,int lin)//初始化棋盘
{
	memset(arr, ' ', sizeof(arr[0][0])*lin*row);
}
void checkerboard(char arr[][LIN], int row)//打印棋盘
{
	int i = 0;
	for (; i < ROW; i++){
		printf("%c|%c|%c\n", arr[i][0], arr[i][1], arr[i][2]);
		if (i < ROW-1){
			printf("———\n");
		}
	}
	printf("\n");
}
char manplay(char arr[][LIN], int row)//玩家走
{
	int i, j;
	
	while(1){
		printf("请落子: \n");
		scanf_s("%d%d", &i, &j);
		if (i >=1 && i <= ROW&&j >=1 && j <= LIN){
			if (arr[i - 1][j - 1] ==' '){
				arr[i - 1][j - 1] = 'x';
				break;
			}
			else { 
				printf("有子\n");
				 }
		}
		else {
			printf("违法落子,请重新落子\n");
		}
	} 
}
char complay(char arr[][LIN], int row)//电脑走
{
	int i, j;
	do{
		i = rand() % ROW;
		j = rand() % LIN;
		if (arr[i][j] == ' '){
			arr[i][j] = 'o';
			break;
		}
	} while (1);
	system("cls");
}
int is_full(char arr[][LIN], int row)//判断棋盘是否为满
{
	int i=0, j=0;
	for (; i < ROW; i++){
		for (; j < LIN; j++){
			if (arr[i][j] == ' ')
				return 0;
			else{
				return 1;
			}
		}
	}
}
char is_win(char arr[][LIN], int row)//判断输赢
{
	int i = 0, j = 0;
	for (; i < ROW; i++){
		if ((arr[i][0] == arr[i][1])&&( arr[i][1] == arr[i][2] )&& arr[i][1] != ' ')
		{
			return arr[i][1];
		}
		
	}
	for (j = 0; j < LIN; j++) //判断列
	{
		if ((arr[0][j] == arr[1][j] )&&( arr[1][j] == arr[2][j]) && arr[1][j] != ' ')
		{
			return arr[1][j];
		}

	}
	if ((arr[0][0] == arr[1][1] )&& (arr[1][1] == arr[2][2]) && arr[1][1] != ' ') //判断斜列
		{
			return arr[1][1];
		}
	else if( (arr[0][2] == arr[1][1])&&( arr[1][1] == arr[2][0]) && arr[1][1] != ' ')
		{
			return arr[1][1];
		}
	else if (is_full(arr,row)== 1){
		return  'm';
	}
	else return  ' ';
}
void game()
{
	char ret;
	char arr[ROW][LIN] ;
	initboard(arr, ROW,LIN);
	checkerboard(arr, ROW);
	srand((unsigned int)time(NULL));
	do{
		//system("cls");
		manplay(arr, ROW);
		checkerboard(arr, ROW);
		ret = is_win(arr, ROW);//
		if (ret != ' '){
			break;
		}
		complay(arr, ROW);
		checkerboard(arr, ROW);
		ret = is_win(arr, ROW);
		if (ret != ' '){
			break;
		}
	} while (1);
	if (ret == 'x'){
		printf("winner\n");
	}
	else if (ret == 'o'){
		printf("loser\n");
	}
	else if (ret == 'm')
	{
		printf("draw\n");
	}
}

猜你喜欢

转载自blog.csdn.net/jiangxiaobai1995/article/details/79996359