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

資訊專欄INFORMATION COLUMN

《C語(yǔ)言入門》三子棋C語(yǔ)言實(shí)現(xiàn)(詳細(xì)版)

妤鋒シ / 3271人閱讀

摘要:簡(jiǎn)單介紹了三子棋原理后接下來(lái)為大家講解分步目標(biāo)及代碼如何實(shí)現(xiàn)。電腦下棋我們實(shí)現(xiàn)了玩家和電腦的下棋后,我們需要編寫一個(gè)函數(shù)來(lái)判斷雙方的輸贏。我們使用函數(shù)來(lái)實(shí)現(xiàn)這一目標(biāo)。

目錄

1.三子棋原理

2.分塊代碼實(shí)現(xiàn)

3.總結(jié)

1.首先向大家介紹一下三子棋的原理

首先我們需要有一個(gè)棋盤,初始時(shí)棋盤全為空,我們可以通過(guò)數(shù)組的方式,將空格改為一定的符號(hào),當(dāng)有任一行或一列或?qū)蔷€為相同符號(hào)時(shí)則有一方勝出。簡(jiǎn)單介紹了三子棋原理后接下來(lái)為大家講解分步目標(biāo)及代碼如何實(shí)現(xiàn)。

2.分塊代碼實(shí)現(xiàn)

1>首先我們需要打印一個(gè)菜單,引導(dǎo)用戶輸入決定玩游戲或是退出游戲,我們使用函數(shù)實(shí)現(xiàn)這一步驟

void menu(){	printf("************************/n");	printf("*****   1. play   ******/n");	printf("*****   0. exit   ******/n");	printf("************************/n");}

我們將此函數(shù)嵌套在設(shè)定的一個(gè)test函數(shù)中,這樣做的好處可以讓我們主函數(shù)盡可能的簡(jiǎn)介,主函數(shù)只需調(diào)用test函數(shù)就可實(shí)現(xiàn)整個(gè)工程,我們使用switch case來(lái)接受用戶的輸入值并給出相應(yīng)結(jié)果

void test(){?? ?int input = 0;?? ?srand((unsigned int)time(NULL));?? ?do?? ?{?? ??? ?menu();?? ??? ?printf("請(qǐng)選擇:>");?? ??? ?scanf("%d", &input);?? ??? ?switch (input)?? ??? ?{?? ??? ?case 1:?? ??? ??? ?game();?? ??? ??? ?break;?? ??? ?case 0:?? ??? ??? ?printf("退出游戲/n");?? ??? ??? ?break;?? ??? ?default:?? ??? ??? ?printf("選擇錯(cuò)誤/n");?? ??? ??? ?break;?? ??? ?}?? ?} while (input);}

?在這一段中srand的使用我們后面再說(shuō),接下來(lái)為大家介紹game函數(shù)中游戲的實(shí)現(xiàn)。

2>game函數(shù)的實(shí)現(xiàn)

前文說(shuō)到我們需要使用數(shù)組來(lái)實(shí)現(xiàn)三子棋

所以我們首先要初始化一個(gè)數(shù)組,既然是三子棋,我們需要一個(gè)三行三列的二維數(shù)組,為了后續(xù)維護(hù)代碼方便,我們首先新建一個(gè)頭文件,在頭文件中定義一個(gè)ROW和COL,將這兩個(gè)值作為行和列,值均為三。

#define ROW 3#define COL 3

這時(shí)候我們就可以很方便的創(chuàng)建一個(gè)二位數(shù)組

char board[ROW][COL] = { 0 };

如在前文提到的,我們需要讓打印出來(lái)的棋盤在游戲開始時(shí)時(shí)空的,所以衛(wèi)門將數(shù)組初始化為空格,我們使用InitBoard函數(shù)實(shí)現(xiàn)這一目標(biāo)。

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] = " ";		}	}}

在將數(shù)組初始化后我們需要將棋盤打印出來(lái),要打印如前文所示有分割的鍵盤,我們可以利用兩次循環(huán),外循環(huán)每次循環(huán)打印一行,內(nèi)循環(huán)打印一列,要注意到棋盤的右邊和下面是沒有分割的,我們加入一個(gè)if判斷來(lái)控制分割只在棋盤中間,我們使用DisplayBoard函數(shù)來(lái)實(shí)現(xiàn)這一目標(biāo)。

void DisplayBoard(char board[ROW][COL], int row, int col){	int i = 0;	int j = 0;	for (i = 0; i < row; i++)	{		//數(shù)據(jù)		for (j = 0; j < col; j++)		{			printf(" %c ", board[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");	}}

在test函數(shù)中調(diào)用上述兩個(gè)函數(shù)后,我們可以打印出一個(gè)空氣盤,接下來(lái)為大家講解玩家和電腦分別如何下棋。

首先在下棋前,我們需要判斷一下棋盤中是否還有空位,若棋盤已滿,則無(wú)法繼續(xù)下棋。在判斷完之后,我們假定玩家下棋符號(hào)為*,電腦下棋符號(hào)為#,我們使用符號(hào)替換相應(yīng)坐標(biāo)中數(shù)組的空格。我們使用player_move函數(shù)來(lái)實(shí)現(xiàn)玩家下棋。

void player_move(char board[ROW][COL], int row, int col){	printf("玩家下棋:>");	int x = 0;	int y = 0;	while (1)	{		scanf("%d %d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			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");		}	}}

在玩家下棋后,電腦同樣需要下棋,這時(shí)候我們給出一個(gè)隨機(jī)值,上文提到的srand就在這用到了,我們用rand()%ROW或COL就會(huì)的到一個(gè)0~2的數(shù)字,再判斷相應(yīng)位置是否為空,若不為空則將相應(yīng)數(shù)組中的空格替換為#,若為空則給出其他隨機(jī)數(shù)字。

void computer_move(char board[ROW][COL], int row, int col){	int x = 0;	int y = 0;	printf("電腦下棋>/n");	while (1)	{		x = rand() % ROW;//0~2		y = rand() % COL;//0~2		if (board[x][y] == " ")		{			board[x][y] = "#";			break;		}	}}

我們實(shí)現(xiàn)了玩家和電腦的下棋后,我們需要編寫一個(gè)函數(shù)來(lái)判斷雙方的輸贏。我們使用Iis_win函數(shù)來(lái)實(shí)現(xiàn)這一目標(biāo)。(這里簡(jiǎn)單介紹一下is_win函數(shù)原理,我們判斷是否有7一行或一列或?qū)蔷€為同一符號(hào),若有則返回這一符號(hào),若無(wú)則判斷棋盤是否為空,判斷后再返回對(duì)應(yīng)的符號(hào),在這我們?cè)O(shè)定:
若滿足一行或一列或?qū)蔷€為同一符號(hào),則返回相應(yīng)符號(hào)

若不滿足上述條件且棋盤判斷為不滿則返回"Q",若判斷為滿則返回"C"。

具體代碼如下:

har is_win(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];		}	}	//對(duì)角線的判斷	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 (1 == is_full(board, row, col))i	{		return "Q";	}	//繼續(xù)	return "C";}

我們?cè)賕ame函數(shù)中再判斷is_win的返回值便可以很好地判斷雙方的輸贏和是否繼續(xù),game函數(shù)完全體如下

void game(){		char board[ROW][COL] = { 0 };	InitBoard(board, ROW, COL);//初始化棋牌	//打印棋盤	DisplayBoard(board, ROW, COL);	//下棋	char ret = 0;	while (1)	{		player_move(board, ROW, COL);		DisplayBoard(board, ROW, COL);		ret = is_win(board, ROW, COL);		if (ret != "C")		{			break;		}		computer_move(board, ROW, COL);		DisplayBoard(board, ROW, COL);		ret = is_win(board, ROW, COL);		if (ret != "C")		{			break;		}	}	if (ret == "*")	{		printf("玩家贏/n");	}	else if (ret == "#")	{		printf("電腦贏/n");	}	else	{		printf("平局/n");	}}

3.總結(jié)

我們?yōu)榱舜a的簡(jiǎn)介明了,我們使用game.g的頭文件,且將所需函數(shù)都聲明在里面,再建立game.c的源文件,將函數(shù)具體實(shí)現(xiàn)放在里面,分別再test.c和game.c中引入頭文件后,就可將代碼分塊,簡(jiǎn)介易懂。

具體代碼請(qǐng)見c語(yǔ)言/2021.11.20 · 吳昌盛/code - 碼云 - 開源中國(guó) (gitee.com)

歡迎各位討論點(diǎn)贊,感謝大家的閱讀。

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

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

相關(guān)文章

  • C語(yǔ)言入門》掃雷小游戲C語(yǔ)言實(shí)現(xiàn)

    摘要:條消息語(yǔ)言入門三子棋語(yǔ)言實(shí)現(xiàn)詳細(xì)版的博客博客條消息語(yǔ)言入門三子棋語(yǔ)言實(shí)現(xiàn)詳細(xì)版的博客博客我們將雷盤初始化為統(tǒng)一的符號(hào)。 目錄 1.原理簡(jiǎn)介 2.分布目標(biāo)及代碼實(shí)現(xiàn) 3.總結(jié) 1.原理簡(jiǎn)介 ?首先我們需要一個(gè)空的雷盤,在其中隨機(jī)埋入十枚雷,當(dāng)我們排這顆雷時(shí),若此位置為雷,則游戲失敗,若不...

    caige 評(píng)論0 收藏0
  • C語(yǔ)言實(shí)現(xiàn)入門級(jí)小游戲——三子(萬(wàn)字長(zhǎng)篇)

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

    meteor199 評(píng)論0 收藏0
  • C語(yǔ)言實(shí)現(xiàn)入門級(jí)小游戲——掃雷

    摘要:上一期咱們用語(yǔ)言實(shí)現(xiàn)了三子棋的小游戲語(yǔ)言實(shí)現(xiàn)三子棋今天我們?cè)賮?lái)寫個(gè)掃雷的游戲,說(shuō)起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語(yǔ)言實(shí)現(xiàn)了三子棋的小游戲? C語(yǔ)言實(shí)現(xiàn)三子棋? ? ? ?今天我們?cè)賮?lái)寫個(gè)掃雷的游戲,說(shuō)起掃雷,相信大家都不陌生,可能許多朋友還是...

    nevermind 評(píng)論0 收藏0
  • 三子(井字)】如何用C語(yǔ)言實(shí)現(xiàn)

    摘要:三子棋目錄一問題介紹三子棋,在民間又叫井字棋。因?yàn)槿藗冊(cè)谟瓮鏁r(shí)常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋 目錄 一、問題介紹 ? ? ? ? 三子棋,在民間又叫井字棋。因?yàn)槿藗冊(cè)谟瓮鏁r(shí)常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋的游戲規(guī)則十分的簡(jiǎn)單: ...

    jsbintask 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<