成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

【C語(yǔ)言】如何使用數(shù)組實(shí)現(xiàn)三子棋(電腦智能堵棋)-創(chuàng)新互聯(lián)

文章的目錄
  • 一、前言
  • 二、代碼的整體框架
  • 三、實(shí)現(xiàn)三子棋的各種功能和邏輯的串聯(lián)
    • 3.1創(chuàng)建初始界面(進(jìn)行玩家選擇)
    • 3.2棋盤(pán)的初始化和棋盤(pán)的搭建
    • 3.3玩家下棋
    • 3.4電腦下棋
    • 3.5電腦的智能下棋
    • 3.6判斷輸贏并打印
  • 四、完整代碼
  • 五、結(jié)語(yǔ)

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶(hù),是我們最起碼的底線(xiàn)! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶(hù)多一個(gè)朋友!專(zhuān)注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。一、前言

三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉棋、一條龍、井字棋等。游戲分為雙方對(duì)戰(zhàn),雙方依次在9宮格棋盤(pán)上擺放棋子,率先將自己的三個(gè)棋子走成一條線(xiàn)就視為勝利,而對(duì)方就算輸了,但是三子棋在很多時(shí)候會(huì)出現(xiàn)和棋的局面。

相信大家都玩過(guò)三子棋,那既然學(xué)習(xí)了C語(yǔ)言,有沒(méi)有想親手寫(xiě)一個(gè)呢?自己寫(xiě)的可能也會(huì)更有趣吧,快付出行動(dòng)吧,我們一起完成三子棋代碼的書(shū)寫(xiě)。

先讓我們看看完成的效果圖,來(lái)確定我們的目標(biāo)任務(wù)。
在這里插入圖片描述

?????????????

二、代碼的整體框架

我們完成一個(gè)程序前要建立一個(gè)框架,main函數(shù)放在test.c文件中并且對(duì)游戲需要的函數(shù)進(jìn)行引用,實(shí)現(xiàn)游戲的各種功能的函數(shù)全部在game.c文件中完成。game.h文件中包含了程序所需的各種頭文件并且包換對(duì)實(shí)現(xiàn)游戲功能的各種函數(shù)的聲明。

在本次游戲設(shè)計(jì)中,為什么使用了3個(gè)文件難道不能放在一個(gè)文件中呢?

三子棋的實(shí)現(xiàn)需要多個(gè)模塊的功能相互串聯(lián),多個(gè)文件可以分別處理各自模塊的功能,能更好處理各個(gè)模塊之間的邏輯并且便于后期調(diào)試,也使得代碼的可讀性提高。所以在寫(xiě)一個(gè)長(zhǎng)的代碼時(shí),我們要提前建立一個(gè)框架,不僅是為了別人讀懂,也是為了后面進(jìn)行維護(hù)和更新提供便利,還可以培養(yǎng)我們對(duì)日常生活中一些事情的由繁化簡(jiǎn)的思維。希望大家都養(yǎng)成這種良好的習(xí)慣。

三、實(shí)現(xiàn)三子棋的各種功能和邏輯的串聯(lián) 3.1創(chuàng)建初始界面(進(jìn)行玩家選擇)

打印菜單并且對(duì)游戲進(jìn)行難度選擇

void menu1()
{printf("*********************************\n");
	printf("******    1. 開(kāi)始游戲       *****\n");
	printf("******    0. 退出游戲       *****\n");
	printf("*********************************\n");
}
void menu2()
{printf("**************************************\n");
	printf("******    1.玩家vs電腦(傻瓜版)********\n");
	printf("******    2.玩家vs玩家        ********\n");
	printf("******    3.玩家vs電腦(智能版)********\n");
	printf("**************************************\n");
}

void game1()
{}
void game2()
{}
void game3()
{}
int main()
{int input1 = 0;
	int input2 = 0;
	srand((unsigned int)time(NULL));
	do
	{menu1();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input1);
		menu2();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input2);
		switch (input1)
		{case 1:
			if (1 == input2)
			{		game1();
			}
			else if (2 == input2)
			{		game2();
			}
			else if (3 == input2)
			{		game3();
			}
			break;
		case 0:
			printf("退出游戲\n");

			break;
		default:
			printf("選擇錯(cuò)誤,重新選擇\n");
			break;
		}
	} while (input1);
	return 0;
}

運(yùn)行效果圖

在這里插入圖片描述

3.2棋盤(pán)的初始化和棋盤(pán)的搭建
?
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;
	int j = 0;
	for (i = 0; i< row; i++)
	{for (j = 0; j< col; j++)
		{	board[i][j] = ' ';
		}
	}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	printf(" %c ", board[i][j]);
			if (j< col - 1)
				printf("|");
		}
		printf("\n");
		if (i< row - 1)
		{	int j = 0;
			for (j = 0; j< col; j++)
			{		printf("---");
				if (j< col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}
void game1()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
}
void game2()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
}
void game3()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
}

運(yùn)行效果圖

在這里插入圖片描述

3.3玩家下棋
?
void PlayerMove1(char board[][COL], int row, int col)
{int x = 0;
	int y = 0;
	printf("玩家走:>\n");
	while (1)
	{printf("請(qǐng)輸入下棋的坐標(biāo):>");
		scanf("%d %d", &x, &y);
		//判斷坐標(biāo)合法性
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{	//下棋
			//坐標(biāo)是否被占用
			if (board[x - 1][y - 1] == ' ')
			{		board[x - 1][y - 1] = '*';
				break;
			}
			else
			{		printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
			}
		}
		else
		{	printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
		}
	}
}

運(yùn)行效果圖

在這里插入圖片描述

3.4電腦下棋
?
void ComputerMove1(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
	int x = 0;
	int y = 0;
	while (1)
	{x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{	board[x][y] = '#';
			break;
		}
	}
}

運(yùn)行效果圖

在這里插入圖片描述

3.5電腦的智能下棋
?
int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch)//ch為'#'進(jìn)行下棋,ch為'*'進(jìn)行堵截
{//檢查電腦能否獲得勝利/堵截玩家
	int i = 0;
	//電腦對(duì)行的智能堵截
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	if (board[i][0] == board[i][1] && board[i][0] == ch && board[i][2] == ' ')
			{		board[i][2] = '#';
				return 1;
			}
			if (board[i][0] == board[i][2] && board[i][0] == ch && board[i][1] == ' ')
			{		board[i][1] = '#';
				return 1;
			}
			if (board[i][1] == board[i][2] && board[i][1] == ch && board[i][0] == ' ')
			{		board[i][0] = '#';
				return 1;
			}
		}
	}
	//電腦對(duì)列的智能堵截
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	if (board[0][j] == board[1][j] && board[0][j] == ch && board[2][j] == ' ')
			{		board[2][j] = '#';
				return 1;
			}
			if (board[0][j] == board[2][j] && board[0][j] == ch && board[1][j] == ' ')
			{		board[1][j] = '#';
				return 1;
			}
			if (board[1][j] == board[2][j] && board[1][j] == ch && board[0][j] == ' ')
			{		board[0][j] = '#';
				return 1;
			}
		}
	}
	//電腦對(duì)主對(duì)角線(xiàn)的智能堵截
	if (board[0][0] == board[1][1] && board[1][1] == ch && board[2][2] == ' ')
	{board[2][2] = '#';
		return 1;
	}
	if (board[0][0] == board[2][2] && board[0][0] == ch && board[1][1] == ' ')
	{board[1][1] = '#';
		return 1;
	}
	if (board[1][1] == board[2][2] && board[1][1] == ch && board[0][0] == ' ')
	{board[0][0] = '#';
		return 1;
	}
	//電腦對(duì)副對(duì)角線(xiàn)的智能堵截
	if (board[0][2] == board[1][1] && board[0][2] == ch && board[2][0] == ' ')
	{board[2][0] = '#';
		return 1;
	}
	if (board[0][2] == board[2][0] && board[0][2] == ch && board[1][1] == ' ')
	{board[1][1] = '#';
		return 1;
	}
	if (board[1][1] == board[2][0] && board[1][1] == ch && board[0][2] == ' ')
	{board[0][2] = '#';
		return 1;
	}
	return 0;//若電腦無(wú)法贏棋或無(wú)法自動(dòng),則返回0
}
void ComputerMove2(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
	int flag1 = 0;
	int flag2 = 0;
	flag1 = IntelligentComputerMove(board, ROW, COL, '#');//電腦智能贏棋
	if (flag1 == 0)//若電腦無(wú)法贏棋,則進(jìn)行阻攔
	{flag2 = IntelligentComputerMove(board, ROW, COL, '*');//電腦智能堵截
		if (flag2 == 0)//若贏棋和自動(dòng)都不滿(mǎn)足,電腦自動(dòng)下棋
		{	int x = 0;
			int y = 0;
			while (1)
			{		x = rand() % row;
				y = rand() % col;
				if (board[x][y] == ' ')
				{board[x][y] = '#';
					break;
				}
			}
		}
	}
}

運(yùn)行效果圖

在這里插入圖片描述

3.6判斷輸贏并打印
?
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0;	int j = 0;	for (i = 0; i< row; i++)
	{for (j = 0; j< col; j++)
		{	if (board[i][j] == ' ')
			{		return 0;
				//棋盤(pán)沒(méi)滿(mǎn)
			}
		}
	}
	return 1;
	//棋盤(pán)滿(mǎn)了
}
char IsWin(char board[ROW][COL], int row, int col)//1. 玩家贏了 - *//2. 電腦贏了 - #//3. 平局 - Q//4. 游戲繼續(xù) - C
{int i = 0;
	//判斷三行
	for (i = 0; i< row; i++)
	{if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
		{	return  board[i][1];
			//		
		}
	}
	//判斷三列
	for (i = 0; i< col; i++)
	{if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
		{	return board[1][i];
		}
	}
	//判斷對(duì)角線(xiàn)
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{return board[1][1];
	}	//判斷平局
//如果棋盤(pán)滿(mǎn)了返回1, 不滿(mǎn)返回0	
	int ret = IsFull(board, row, col);	
	if (ret == 1)
	{return 'Q';
	}
	return 'C';
}

運(yùn)行效果圖

在這里插入圖片描述

建議大家也像這樣寫(xiě)完一個(gè)函數(shù)的功能運(yùn)行一下,能及時(shí)發(fā)現(xiàn)程序是否可以完成我們的目的,別等到代碼寫(xiě)完再找就難了。

四、完整代碼

game.h —— 包含了程序所需的各種頭文件并且包換對(duì)實(shí)現(xiàn)游戲功能的各種函數(shù)的聲明

?
//頭文件的包含
#include#include#include//符號(hào)的定義
#define ROW 3
#define COL 3
//函數(shù)的聲明

//初始化棋盤(pán)的
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盤(pán)的函數(shù)
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove1(char board[ROW][COL], int row, int col);
void PlayerMove2(char board[ROW][COL], int row, int col);
//電腦下棋
void ComputerMove1(char board[ROW][COL], int row, int col);
void ComputerMove2(char board[ROW][COL], int row, int col);
智能電腦下棋
static int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch);
//判斷游戲是否有輸贏
char IsWin(char board[ROW][COL], int row, int col);
?

test.c —— 對(duì)游戲需要的函數(shù)進(jìn)行引用

?
#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"
void menu1()
{printf("*********************************\n");
	printf("******    1. 開(kāi)始游戲       *****\n");
	printf("******    0. 退出游戲       *****\n");
	printf("*********************************\n");
}
void menu2()
{printf("**************************************\n");
	printf("******    1.玩家vs電腦(傻瓜版)********\n");
	printf("******    2.玩家vs玩家        ********\n");
	printf("******    3.玩家vs電腦(智能版)********\n");
	printf("**************************************\n");
}
void game1()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
	char ret = 0;
	//接受游戲狀態(tài)
	while (1)
	{//玩家下棋
		PlayerMove1(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷玩家是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;		
		//電腦下棋
		ComputerMove1(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷電腦是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{printf("玩家贏了\n");
	}
	else if(ret == '#')
	{printf("電腦贏了\n");
	}
	else
	{printf("平局\n");
	}
	DisplayBoard(board, ROW, COL);
}
void game2()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
	char ret = 0;
	//接受游戲狀態(tài)
	while (1)
	{//玩家下棋
		PlayerMove1(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷玩家是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
		//玩家2下棋
		PlayerMove2(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{printf("玩家1贏了\n");
	}
	else if (ret == '#')
	{printf("玩家2贏了\n");
	}
	else
	{printf("平局\n");
	}
	DisplayBoard(board, ROW, COL);
}
void game3()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
	char board[ROW][COL];
	//初始化棋盤(pán) - 初始化空格
	InitBoard(board, ROW, COL);
	//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
	DisplayBoard(board, ROW, COL);
	char ret = 0;
	//接受游戲狀態(tài)
	while (1)
	{//玩家1下棋
		PlayerMove1(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷玩家是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
		//電腦下棋
		ComputerMove2(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//判斷電腦是否贏得游戲
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{printf("玩家贏了\n");
	}
	else if (ret == '#')
	{printf("電腦贏了\n");
	}
	else
	{printf("平局\n");
	}
	DisplayBoard(board, ROW, COL);
}
int main()
{int input1 = 0;
	int input2 = 0;
	srand((unsigned int)time(NULL));
	do
	{menu1();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input1);
		menu2();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input2);
		switch (input1)
		{case 1:
			if (1 == input2)
			{		game1();
			}
			else if(2 == input2)
			{		game2();
			}
			else if (3 == input2)
			{		game3();
			}
		break;
		case 0:
			printf("退出游戲\n");

			break;
		default:
			printf("選擇錯(cuò)誤,重新選擇\n");
			break;
		}
	} while (input1);
	return 0;
}

game.c —— 實(shí)現(xiàn)游戲的各種功能的函數(shù)

?
#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;
	int j = 0;
	for (i = 0; i< row; i++)
	{for (j = 0; j< col; j++)
		{	board[i][j] = ' ';
		}
	}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{	int i = 0;
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	printf(" %c ", board[i][j]);
		if(j	int j = 0;
			for (j = 0; j< col; j++)
			{		printf("---");
			if(jint x = 0;
	int y = 0;
	printf("玩家走:>\n");
	while (1)
	{printf("請(qǐng)輸入下棋的坐標(biāo):>");
		scanf("%d %d", &x, &y);
		//判斷坐標(biāo)合法性
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{	//下棋
			//坐標(biāo)是否被占用
			if (board[x - 1][y - 1] == ' ')
			{		board[x - 1][y - 1] = '*';
				break;
			}
			else
			{		printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
			}
		}
		else
		{	printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
		}
	}
}
void PlayerMove2(char board[][COL], int row, int col)
{int x = 0;
	int y = 0;
	printf("玩家2走:>\n");
	while (1)
	{printf("請(qǐng)輸入下棋的坐標(biāo):>");
		scanf("%d %d", &x, &y);
		//判斷坐標(biāo)合法性
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{	//下棋
			//坐標(biāo)是否被占用
			if (board[x - 1][y - 1] == ' ')
			{		board[x - 1][y - 1] = '#';
				break;
			}
			else
			{		printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
			}
		}
		else
		{	printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
		}
	}
}
void ComputerMove1(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
	int x = 0;
	int y = 0;
	while (1)
	{x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{	board[x][y] = '#';
			break;
		}
	}
}
int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch)//ch為'#'進(jìn)行下棋,ch為'*'進(jìn)行堵截
{//檢查電腦能否獲得勝利/堵截玩家
	int i = 0;
	//電腦對(duì)行的智能堵截
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	if (board[i][0] == board[i][1] && board[i][0] == ch && board[i][2] == ' ')
			{		board[i][2] = '#';
				return 1;
			}
			if (board[i][0] == board[i][2] && board[i][0] == ch && board[i][1] == ' ')
			{		board[i][1] = '#';
				return 1;
			}
			if (board[i][1] == board[i][2] && board[i][1] == ch && board[i][0] == ' ')
			{		board[i][0] = '#';
				return 1;
			}
		}
	}
	//電腦對(duì)列的智能堵截
	for (i = 0; i< row; i++)
	{int j = 0;
		for (j = 0; j< col; j++)
		{	if (board[0][j] == board[1][j] && board[0][j] == ch && board[2][j] == ' ')
			{		board[2][j] = '#';
				return 1;
			}
			if (board[0][j] == board[2][j] && board[0][j] == ch && board[1][j] == ' ')
			{		board[1][j] = '#';
				return 1;
			}
			if (board[1][j] == board[2][j] && board[1][j] == ch && board[0][j] == ' ')
			{		board[0][j] = '#';
				return 1;
			}
		}
	}
	//電腦對(duì)主對(duì)角線(xiàn)的智能堵截
	if (board[0][0] == board[1][1] && board[1][1] == ch && board[2][2] == ' ')
	{board[2][2] = '#';
		return 1;
	}
	if (board[0][0] == board[2][2] && board[0][0] == ch && board[1][1] == ' ')
	{board[1][1] = '#';
		return 1;
	}
	if (board[1][1] == board[2][2] && board[1][1] == ch && board[0][0] == ' ')
	{board[0][0] = '#';
		return 1;
	}
	//電腦對(duì)副對(duì)角線(xiàn)的智能堵截
	if (board[0][2] == board[1][1] && board[0][2] == ch && board[2][0] == ' ')
	{board[2][0] = '#';
		return 1;
	}
	if (board[0][2] == board[2][0] && board[0][2] == ch && board[1][1] == ' ')
	{board[1][1] = '#';
		return 1;
	}
	if (board[1][1] == board[2][0] && board[1][1] == ch && board[0][2] == ' ')
	{board[0][2] = '#';
		return 1;
	}
	return 0;//若電腦無(wú)法贏棋或無(wú)法自動(dòng),則返回0
}
void ComputerMove2(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
	int flag1 = 0;
	int flag2 = 0;
	flag1 = IntelligentComputerMove(board, ROW, COL, '#');//電腦智能贏棋
	if (flag1 == 0)//若電腦無(wú)法贏棋,則進(jìn)行阻攔
	{flag2 = IntelligentComputerMove(board, ROW, COL, '*');//電腦智能堵截
		if (flag2 == 0)//若贏棋和自動(dòng)都不滿(mǎn)足,電腦自動(dòng)下棋
		{	int x = 0;
			int y = 0;
			while (1)
			{		x = rand() % row;
				y = rand() % col;
				if (board[x][y] == ' ')
				{board[x][y] = '#';
					break;
				}
			}
		}
	}
}
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0;	int j = 0;	for (i = 0; i< row; i++)
	{for (j = 0; j< col; j++)
		{	if (board[i][j] == ' ')
			{		return 0;
				//棋盤(pán)沒(méi)滿(mǎn)
			}
		}
	}
	return 1;
	//棋盤(pán)滿(mǎn)了
}
char IsWin(char board[ROW][COL], int row, int col)//1. 玩家贏了 - *//2. 電腦贏了 - #//3. 平局 - Q//4. 游戲繼續(xù) - C
{int i = 0;
	//判斷三行
	for (i = 0; i< row; i++)
	{if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
		{	return  board[i][1];
			//		
		}
	}
	//判斷三列
	for (i = 0; i< col; i++)
	{if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
		{	return board[1][i];
		}
	}
	//判斷對(duì)角線(xiàn)
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{return board[1][1];
	}	//判斷平局
//如果棋盤(pán)滿(mǎn)了返回1, 不滿(mǎn)返回0	
	int ret = IsFull(board, row, col);	
	if (ret == 1)
	{return 'Q';
	}
	return 'C';
}
五、結(jié)語(yǔ)

以上是我對(duì)三子棋游戲的實(shí)現(xiàn),如果時(shí)間充足還是要從前到尾看一遍,肯定會(huì)有收獲的,盡量不要直接跳轉(zhuǎn)到完整代碼直接復(fù)制?。?如果有大佬感興趣可以進(jìn)一步優(yōu)化。
因本人能力還有待提高,如有錯(cuò)誤可以及時(shí)指出。感謝大家觀(guān)看和支持。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱(chēng):【C語(yǔ)言】如何使用數(shù)組實(shí)現(xiàn)三子棋(電腦智能堵棋)-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article20/djegjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、虛擬主機(jī)移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器ChatGPT、用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
四平市| 阳泉市| 乳源| 喜德县| 泗水县| 旬邑县| 延长县| 克东县| 绍兴县| 宁德市| 嘉荫县| 汾西县| 扎囊县| 上饶县| 彰武县| 林周县| 绥宁县| 张北县| 石首市| 九龙城区| 四会市| 肥东县| 大洼县| 霍山县| 江阴市| 电白县| 余姚市| 赫章县| 尖扎县| 霍城县| 达尔| 拉萨市| 治多县| 龙里县| 大同市| 邢台市| 瓦房店市| 井冈山市| 松溪县| 阳高县| 天等县|