国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【三子棋(井字棋)】如何用C語言實現(xiàn)

jsbintask / 3053人閱讀

摘要:三子棋目錄一問題介紹三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。

三子棋

目錄

一、問題介紹


? ? ? ? 三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的“井”字,多稱為“井字棋”。

三子棋的游戲規(guī)則十分的簡單:

在3×3的棋盤雙方輪流下棋(先手一般的棋子為“X”,后手為“O”),當(dāng)有一方所下的棋子連成一條直線即為勝利!

?

二、實現(xiàn)思路


  1. ?創(chuàng)建游戲菜單
  2. 初始化棋盤
  3. 打印棋盤
  4. 玩家下棋(判斷是否勝利)
  5. 電腦下棋(判斷是否勝利)
  6. 游戲結(jié)束

三、實現(xiàn)流程


1.創(chuàng)建游戲菜單

//菜單函數(shù)void menu(void){	printf("|---------------|/n");	printf("|--- 1.START ---|/n"); 	printf("|--- 0.EXIT  ---|/n");	printf("|---------------|/n");}

1.開始游戲? ? ? 0.退出游戲

2.初始化棋盤

使用全局變量創(chuàng)建3×3的棋盤

使用全局變量的原因:

  1. 后續(xù)修改棋盤大小更為便捷
  2. 代碼可讀性加強(qiáng)
//定義行、列#define ROW 3#define COL 3
//初始化棋盤函數(shù)void InitChessBoard(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++)		{            //把數(shù)組中每個元素初始化為空格			Board[i][j] = " ";		}	}}

3.打印棋盤

在這里,為了后續(xù)棋盤的大小方便改變,將分割行分別打印

//打印棋盤函數(shù)void DisplayChessBoard(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++)		{            //打印“ 字符 | 字符 | 字符 ”			printf(" %c ", Board[i][j]);			if (j < col - 1)			{				printf("|");			}		}        //打印完一行之后換行		printf("/n");		if (i 

4.玩家下棋

玩家需通過輸入[1,3]區(qū)間內(nèi)的數(shù)字來落子“x”

  • 當(dāng)玩家輸入超出棋盤大小的坐標(biāo)時,提醒玩家輸入坐標(biāo)錯誤并重新輸入
  • 當(dāng)玩家輸入已被占用的棋盤坐標(biāo)時,提醒玩家輸入坐標(biāo)錯誤并重新輸入
//玩家下棋函數(shù)void PlayerMove(char Board[ROW][COL], int row, int col){	int x = 0;	int y = 0;	while (1)	{		printf("player(行 列):>");		//玩家輸入坐標(biāo)		scanf("%d %d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			//玩家輸入?yún)^(qū)間為[1, 3]			if (Board[x - 1][y - 1] == " ")			{				Board[x - 1][y - 1] = "x";				break;			}			else			{				printf("該坐標(biāo)已被占用,請重新輸入!/a/n/n");			}		}		else		{			printf("輸入坐標(biāo)非法,請重新輸入!/a/n/n");		}	}}

5.電腦下棋

電腦下棋需要使用生成隨機(jī)數(shù)種子,并且保證電腦在空的坐標(biāo)上落子

在主調(diào)函數(shù)中使用生成隨機(jī)數(shù)函數(shù),?確保生成的隨機(jī)數(shù)為隨機(jī):

srand((unsigned int)time(NULL));//time的函數(shù)返回類型是time_t//在這里使用強(qiáng)制轉(zhuǎn)換類型(unsigned int)
//電腦下棋函數(shù)void ComputerMove(char Board[ROW][COL], int row, int col){	int x = 0;	int y = 0;	printf("computer:/n");	while (1)	{		//獲取時間隨機(jī)數(shù)		x = rand() % row;		y = rand() % col;		if (Board[x][y] == " ")		{			Board[x][y] = "o";			break;		}	}	}

6.判斷游戲勝利

在這一步我們需要定義兩個函數(shù):

  • IsWin函數(shù)(判斷是否勝利)
  • IsFull函數(shù)(判斷棋盤是否下滿)

我們約定當(dāng)返回“x”時玩家勝利

返回“o”時電腦勝利

返回“q”時代表平局

返回“c”時代表棋盤未被填滿游戲繼續(xù)

//判斷是否勝利函數(shù)char IsWin(char Board[ROW][COL], int row, int col){	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];		}	}	//判斷對角線"/"	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];	}	//檢查棋盤是否填滿	if (IsFull == 1)	{		//返回平局		return "q";	}	//返回繼續(xù)	return "c";}
//判斷棋盤是否被填滿函數(shù)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;		}	}	return 1;}

7.游戲函數(shù)和主調(diào)函數(shù)

//游戲?qū)崿F(xiàn)函數(shù)void Game(char Board[ROW][COL], int row, int col){	InitChessBoard(Board, ROW, COL);	DisplayChessBoard(Board, ROW, COL);	while (1)	{		PlayerMove(Board, ROW, COL);		DisplayChessBoard(Board, ROW, COL);		if (IsWin(Board, ROW, COL) != "c")			break;		ComputerMove(Board, ROW, COL);		DisplayChessBoard(Board, ROW, COL);		if (IsWin(Board, ROW, COL) != "c")			break;	}	if (IsWin(Board, ROW, COL) == "x")		printf("PLAYER WIN!/n/n");	else if (IsWin(Board, ROW, COL) == "o")		printf("COMPUTER WIN!/n/n");	else		printf("平局!/n/n");}
//主調(diào)函數(shù)int main(void){	srand((unsigned int)time(NULL));	char Board[ROW][COL] = { 0 };	int input = 0;	do	{		menu();		printf("please enter:>");		scanf("%d", &input);		switch (input)		{		case 1:			printf("GAME START/n");			Game(Board, ROW, COL);			break;		case 0:			printf("GAME EXIT/n/a");			break;		default:			printf("ERROR!/n/a");		}	} while (input);	return 0;}




四、代碼總覽


#define _CRT_SECURE_NO_WARNINGS 1//程序所需頭文件#include #include #include //定義行、列#define ROW 3#define COL 3//菜單函數(shù)void menu(void){	printf("|---------------|/n");	printf("|--- 1.START ---|/n"); 	printf("|--- 0.EXIT  ---|/n");	printf("|---------------|/n");}//初始化棋盤函數(shù)void InitChessBoard(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] = " ";		}	}}//打印棋盤函數(shù)void DisplayChessBoard(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++)		{			printf(" %c ", Board[i][j]);			if (j < col - 1)			{				printf("|");			}		}		printf("/n");//打印完一行之后換行		if (i ");		//玩家輸入坐標(biāo)		scanf("%d %d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			//玩家輸入?yún)^(qū)間為[1, 3]			if (Board[x - 1][y - 1] == " ")			{				Board[x - 1][y - 1] = "x";				break;			}			else			{				printf("該坐標(biāo)已被占用,請重新輸入!/a/n/n");			}		}		else		{			printf("輸入坐標(biāo)非法,請重新輸入!/a/n/n");		}	}}//電腦下棋函數(shù)void ComputerMove(char Board[ROW][COL], int row, int col){	int x = 0;	int y = 0;	printf("computer:/n");	while (1)	{		//獲取時間隨機(jī)數(shù)		x = rand() % row;		y = rand() % col;		if (Board[x][y] == " ")		{			Board[x][y] = "o";			break;		}	}	}//判斷棋盤是否被填滿函數(shù)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;		}	}	return 1;}//判斷是否勝利函數(shù)char IsWin(char Board[ROW][COL], int row, int col){	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];		}	}	//判斷對角線"/"	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];	}	//檢查棋盤是否填滿	if (IsFull == 1)	{		//返回平局		return "q";	}	//返回繼續(xù)	return "c";}//游戲?qū)崿F(xiàn)函數(shù)void Game(char Board[ROW][COL], int row, int col){	InitChessBoard(Board, ROW, COL);	DisplayChessBoard(Board, ROW, COL);	while (1)	{		PlayerMove(Board, ROW, COL);		DisplayChessBoard(Board, ROW, COL);		if (IsWin(Board, ROW, COL) != "c")			break;		ComputerMove(Board, ROW, COL);		DisplayChessBoard(Board, ROW, COL);		if (IsWin(Board, ROW, COL) != "c")			break;	}	if (IsWin(Board, ROW, COL) == "x")		printf("PLAYER WIN!/n/n");	else if (IsWin(Board, ROW, COL) == "o")		printf("COMPUTER WIN!/n/n");	else		printf("平局!/n/n");}//主調(diào)函數(shù)int main(void){	srand((unsigned int)time(NULL));	char Board[ROW][COL] = { 0 };	int input = 0;	do	{		menu();		printf("please enter:>");		scanf("%d", &input);		switch (input)		{		case 1:			printf("GAME START/n");			Game(Board, ROW, COL);			break;		case 0:			printf("GAME EXIT/n/a");			break;		default:			printf("ERROR!/n/a");		}	} while (input);	return 0;}



五、代碼注意事項


  • 程序中哪里需要使用循環(huán),哪里不需要使用循環(huán)應(yīng)仔細(xì)分清
  • Game()函數(shù)中,每當(dāng)玩家下棋或是電腦下棋都需要判斷是否勝利

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123083.html

相關(guān)文章

  • C語言實現(xiàn)入門級小游戲——三子(萬字長篇)

    摘要:今天博主將為大家?guī)碚Z言入門級小游戲三子棋井字棋的詳細(xì)介紹,希望這篇文章對大家能有幫助。在這里,我們使用函數(shù)來實現(xiàn)這一功能。 ?? ? ??今天博主將為大家?guī)鞢語言入門級小游戲——三子棋(井字棋)的詳細(xì)介紹,希望這篇文章對大家能有幫助?。?? ? ? 在編程的學(xué)習(xí)過程中,編寫一些中這樣...

    meteor199 評論0 收藏0
  • 三子游戲設(shè)計及代碼實現(xiàn)

    摘要:三子棋三子棋游戲介紹規(guī)則游戲設(shè)計思路代碼分析文件代碼分析。玩家下棋實現(xiàn)。三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋圈圈叉叉一條龍井字棋等。落子后打印棋盤以顯示。假設(shè)平局時判定輸贏的函數(shù)返回后面代碼實現(xiàn)時詳細(xì)講。 ...

    Ku_Andrew 評論0 收藏0
  • Minimax 和 Alpha-beta 剪枝算法簡介,以及以此實現(xiàn)井字游戲(Tic-tac-t

    摘要:我們在前文中考慮的那張圖就來自這篇文章,之后我們會用剪枝算法來改進(jìn)之前的解決方案。剪枝算法的實現(xiàn)接下來討論如何修改前面實現(xiàn)的算法,使其變?yōu)榧糁λ惴ā,F(xiàn)在我們已經(jīng)有了現(xiàn)成的和剪枝算法,只要加上一點兒細(xì)節(jié)就能完成這個游戲了。 前段時間用 React 寫了個2048 游戲來練練手,準(zhǔn)備用來回顧下 React 相關(guān)的各種技術(shù),以及試驗一下新技術(shù)。在寫這個2048的過程中,我考慮是否可以在其中加...

    wemall 評論0 收藏0
  • Minimax 和 Alpha-beta 剪枝算法簡介,以及以此實現(xiàn)井字游戲(Tic-tac-t

    摘要:我們在前文中考慮的那張圖就來自這篇文章,之后我們會用剪枝算法來改進(jìn)之前的解決方案。剪枝算法的實現(xiàn)接下來討論如何修改前面實現(xiàn)的算法,使其變?yōu)榧糁λ惴ā,F(xiàn)在我們已經(jīng)有了現(xiàn)成的和剪枝算法,只要加上一點兒細(xì)節(jié)就能完成這個游戲了。 前段時間用 React 寫了個2048 游戲來練練手,準(zhǔn)備用來回顧下 React 相關(guān)的各種技術(shù),以及試驗一下新技術(shù)。在寫這個2048的過程中,我考慮是否可以在其中加...

    Eirunye 評論0 收藏0
  • C語言入門》三子C語言實現(xiàn)(詳細(xì)版)

    摘要:簡單介紹了三子棋原理后接下來為大家講解分步目標(biāo)及代碼如何實現(xiàn)。電腦下棋我們實現(xiàn)了玩家和電腦的下棋后,我們需要編寫一個函數(shù)來判斷雙方的輸贏。我們使用函數(shù)來實現(xiàn)這一目標(biāo)。 目錄 1.三子棋原理 2.分塊代碼實現(xiàn) 3.總結(jié) 1.首先向大家介紹一下三子棋的原理 首先我們需要有一個棋盤,初始時棋...

    妤鋒シ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<