三子棋---基于C语言

本游戏利用了三个文件:

1.主函数文件:包含了游戏的主循环 

2.源函数文件:包含了所有函数的具体代码

3.函数集头文件:包含了所有函数的声明

主函数:

#include"函数集.h"


//char arr1[3][3] = { '0','0','0','0','0','0','0','0','0' };

char arr1[3][3] = { 32,32,32,32,32,32,32,32,32};//游戏数组

int main() {


	//此菜单用于启动游戏,退出游戏和选择模式

	manu();


	//此处是人机模式的启动监测点

	if (CPcheck == 1) //游戏主线,包含两个分支(模式选择),多个游戏子分支

	{

		system("cls");

		printf("\n**********开始人机模式**********\n");


		while (1) //人机模式循环

		{

			system("cls");

			printf("\n******第%d轮******\n", times);

			Chessboard(arr1);//刷新棋盘



			playermove_X(arr1);//玩家操作



			Chessboard(arr1);//刷新棋盘



			char ret = judge(arr1);//检测游戏进度

			if (ret == 'X') {

				printf("\n\n玩家-X-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'O') {

				printf("\n\n电脑获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'E') {

				printf("\n\n势均力敌!游戏结束!\n\n");

				break;

			}

			computermove_O(arr1);//电脑操作

			ret = judge(arr1);//检测游戏进度

			if (ret == 'X') {

				printf("\n\n玩家-X-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'O') {

				printf("\n\n电脑获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'E') {

				printf("\n\n势均力敌!游戏结束!\n\n");

				break;

			}

			times++;

		}

	}

	else if (PPcheck == 1) {

		system("cls");

		printf("\n**********开始双人对战模式**********\n");



		while (1) //双人模式循环

		{

			system("cls");

			printf("\n******第%d轮******\n", times);

			Chessboard(arr1);//刷新棋盘



			playermove_X(arr1);//玩家X操作



			Chessboard(arr1);//刷新棋盘



			char ret = judge(arr1);//检测游戏进度

			if (ret == 'X') {

				printf("\n\n玩家-X-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'O') {

				printf("\n\n玩家-O-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'E') {

				printf("\n\n势均力敌!游戏结束!\n\n");

				break;

			}

			playermove_O(arr1);//玩家O操作

			ret = judge(arr1);//检测游戏进度

			if (ret == 'X') {

				printf("\n\n玩家-X-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'O') {

				printf("\n\n玩家-O-获胜!游戏结束!\n\n");

				break;

			}

			else if (ret == 'E') {

				printf("\n\n势均力敌!游戏结束!\n\n");

				break;

			}

			times++;

		}

	}else {printf("已关闭游戏!\n");}



	return 0;

}

源函数:

#include"函数集.h"


int row = 3;

int col = 3;

int times = 1;

int CPcheck = 0;

int PPcheck = 0;



//一阶子菜单函数(用于选择游戏模式)

void manu_1() {

	printf("********************选择游戏模式********************\n输入1人机对战 \n输入2双人对战\n\n");

	printf("请输入:\n");

	int x = 0;

	while ((scanf_s("%d", &x)) != EOF) {

		if (x == 1) {

			CPcheck = 1;

			break;

		}

		else if (x == 2) {

			PPcheck = 1;

			break;

		}

		else {

			printf("无效字符,请重新输入:\n");

		}

	}

}


//主菜单函数

void manu() {

	printf("********************进入选项********************\n输入1开始游戏\n输入2退出游戏\n\n");

	printf("请输入:\n");

	int x = 0;

	while ((scanf_s("%d",&x)) != EOF) {

		if (x==1) {

			manu_1();

			break;

		}else if (x == 2) {

			break;

		}else { 

			printf("无效字符,请重新输入:\n"); 

		}

	}

}


//棋盘函数

void Chessboard(char arr1[3][3]) {

	printf("\n");

	for (int i = 0; i <= row- 1; i++) 

	{

		for (int j = 0; j <= col - 1; j++) 

		{

			printf(" %c ",arr1[i][j]);

			if (j != 2) {printf("|");}

		}

		printf("\n");

		if(i != 2){ printf("-----------\n"); }

	}

}



//玩家X下棋

void playermove_X(char arr1[3][3]) {

	int a, b;

	printf("玩家X下棋:");

	while (scanf_s("%d %d",&a,&b)!=EOF) {

		if ((arr1[a - 1][b - 1] == 32)&&(arr1[a-1][b-1]!='O')) {

			arr1[a - 1][b - 1] = 'X';

			break;

		}

		else {

			printf("*******无效位置重新下棋!********\n");

			printf("玩家X下棋:");

		}

	}



}



//玩家O下棋

void playermove_O(char arr1[3][3]) {

	int a, b;

	printf("玩家O下棋:");

	while (scanf_s("%d %d", &a, &b) != EOF) {

		if ((arr1[a - 1][b - 1] == 32) && (arr1[a - 1][b - 1] != 'X')) {

			arr1[a - 1][b - 1] = 'O';

			break;

		}

		else {

			printf("*******无效位置重新下棋!********\n");

			printf("玩家O下棋:");

		}

	}



}



//随机数生成函数

int generateRandomNumber() {

	srand((unsigned int)time(NULL)-1);

	return rand() % row + 1;

}



//电脑随机下棋

void computermove_O(char arr1[3][3]) {

	int a, b;

	printf("电脑下棋中...\n");

	//Sleep(1000);

	while (1) 

	{

		a = generateRandomNumber();

		b = generateRandomNumber();

		//printf("a=%d,b=%d\n", a, b);

		if ((arr1[a - 1][b - 1] == 32) && (arr1[a - 1][b - 1] != 'X')) 

		{

			arr1[a - 1][b - 1] = 'O';

			break;

		}

	}

}



bool isfull(char arr1[3][3]) {

	for (int i = 0; i <= 2; i++) {

		for (int j = 0; j <= 2; j++) {

			if (arr1[i][j] == 32) {

				return 0;

			}

		}

	}

	return 1;

}


//观察者

//X,玩家胜利;O,电脑胜利;E,平局;C,游戏继续;

char judge(char arr1[3][3]) {

	for (int i = 0; i <= 2; i++) {

		if (arr1[0][i] == arr1[1][i] && arr1[0][i] == arr1[2][i] && arr1[0][i]!=32) {

			return arr1[0][i];

		}

	}

	for (int i = 0; i <= 2; i++) {

		if (arr1[i][0] == arr1[i][1] && arr1[i][0] == arr1[i][2] && arr1[i][0] != 32) {

			return arr1[i][0];

		}

	}

	if (arr1[0][0] == arr1[1][1] && arr1[0][0] == arr1[2][2] && arr1[0][0] != 32) {

		return arr1[0][0];

	}

	if (arr1[0][2] == arr1[1][1] && arr1[0][2] == arr1[2][0] && arr1[1][1] != 32) {

		return arr1[0][2];

	}

	if (isfull(arr1)) {

		return 'E';

	}

	return 'C';

	

}

函数集:

#pragma once

#include<stdio.h>

#include<graphics.h>

#include<windows.h>

#include<stdlib.h>

#include<time.h>



extern int row;

extern int col;

extern int CPcheck;

extern int times;

extern int PPcheck;



void manu_1();

void manu();



void Chessboard(char arr1[3][3]);


void playermove_X(char arr1[3][3]);

void playermove_O(char arr1[3][3]);


int generateRandomNumber();

void computermove_O(char arr1[3][3]);


bool isfull(char arr1[3][3]);


char judge(char arr1[3][3]);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值