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

資訊專欄INFORMATION COLUMN

哈哈哈~井字棋(無心版),快來初步感受一下代碼世界的樂趣吧

不知名網友 / 829人閱讀

摘要:文章目錄前言正文一,游戲實現基本流程二游戲實現步驟創建工程及分配功能給頭文件上內容當當當,主函數出場游戲函數里面打印游戲菜單棋盤初始化打印棋盤玩家下棋電腦下棋判斷結果三游戲結果演示恭喜友友獲勝啦電腦獲勝,很遺憾,再接再厲

前言

Hello everyone! 好久不見,forever 又來了,最近挺忙的所以好久沒更新了,上次我介紹了函數相關知識,然后這次我們中間來個小插曲,來給大家看看井字棋游戲哈!不過由于最近時間比較緊張,所以就給大家看看無心版井字棋游戲,哈哈哈哈!所謂無心版就是電腦下棋時沒有攜帶高級算法,不會和玩家進行一場真正的博弈哈!當然后面我還會繼續跟進,將這個無心版本升級,讓玩家和電腦能夠針鋒相對,體驗體驗那種刺激感哈!
所以今天大家先別著急,先隨 forever 一起去看看無心版本,其實看完簡單的無心版本之后,大家也可以嘗試挑戰一下,去寫一寫攜帶高級算法,給電腦端附上高級智慧,此時電腦所表現出來的高級智慧是你給的,也就體現出你的智慧啦!聽完的友友們,是不是很想去試試哈!
接下來就跟著 forever 一起來感受感受井字棋的成長歷程吧!

正文

一,游戲實現基本流程

1、創建工程,首先考慮自己的整個工程需要由多少頭文件和源文件組成,forever 的詳細工程創建如下面分析;
2、對應給每個文件分配什么作用,即給里面放什么內容;
3、接下來放主函數,以主函數為樹干,然后分枝開葉;
4、打印游戲菜單;
5、棋盤初始化;
6、打印棋盤;
7、開始下棋:倘若定義玩家先下棋;
8、其次電腦下棋;
9、判斷結果;
10、游戲結束。

二、游戲實現步驟

1、創建工程及分配功能

forever 將整個程序分為兩個模塊:頭文件模塊和源文件模塊。頭文件模塊包含:game.h
(包含整個程序需要調用的頭文件、宏定義以及函數的聲明)
;源文件包含:main.cpp(放主函數的源文件)、game.cpp(游戲開始的源文件)、gamelogic.cpp(游戲整體邏輯框架源文件)、test.cpp(游戲具體操作內容源文件)。

//頭文件模塊game.h   //包含整個程序需要調用的頭文件、宏定義以及函數的聲明//源文件模塊main.cpp   //放主函數(main函數)game.cpp  //游戲開始的實現gamelogic.cpp  //游戲整體邏輯框架實現test.cpp  //游戲具體操作內容實現

2、給頭文件上內容

這里我就按順序寫,先寫剛開始需要的,然后后面需要什么頭文件,forever 會依次在每一步里面添加哈!這里就先給一個 從頭到尾都需要的吧!

//game.h包含整個程序需要調用的頭文件、宏定義以及函數的聲明#include

3、當當當,主函數出場

//main.cpp放主函數(main函數)#include "game.h"int main(){	game();//調用游戲函數出場啦!	return 0;}

4、游戲函數里面:打印游戲菜單

友友們!玩游戲肯定都知道游戲菜單哈!就是那個界面啦!不過這個菜單超級簡單,只有游戲開始和游戲結束。

//game.cpp 游戲開始的實現#include "game.h"void meau(){	printf("—————— 0.exit ——————/n");	printf("—————— 1.play ——————/n");}

這里面除了打印菜單還有一個游戲開始的函數即上面提到的 game() 函數,而此時頭文件里面便會有一個game()函數的聲明:

#includevoid game();//游戲總函數

而 game.cpp 里面的所有內容是:

#include "game.h"//打印菜單void meau(){	printf("—————— 0.exit ——————/n");	printf("—————— 1.play ——————/n");}//游戲開始void game(){	unsigned int number = 0;//用unsigned 修飾保證輸入的是正整數	do	{		meau();//打印菜單		printf("請選擇:>");		scanf("%d", &number);		switch (number)		{		case 0:printf("注意休息,保護眼睛哈,游戲結束啦!/n");			break;		case 1:printf("打起精神,認真思考哈,游戲開始啦!/n");			playgame();//游戲整體內容框架			break;		default:			printf("這位友友有點皮喲,請選擇正確數字哈!/n");		}	} while (number);}

運行相關結果:

5、棋盤初始化

這時就會創建一個二維字符數組來存入棋盤,因為后面這個二維字符數組會反復使用,所以此時字符數組的大小 forever 就用宏定義的方式給大家呈現出來吧!此時頭文件里面就會加上宏定義,當然還有上面那個 playgame() 函數的聲明:

#include#define LINE 3#define LIST 3void game();//游戲總函數void playgame();//游戲整體邏輯框架void Firstboard(char board[LINE][LIST], int line, int list);//初始化棋盤

宏定義的優點:
1、方便程序的修改;
2、提高程序的運行效率;
宏定義的展開是在程序的預處理階段實現完成的,無需運行時后分配內存,能夠部分實現函數的功能卻沒有函數調用時候的壓棧等問題,效率高
3、增強代碼可讀性
4、增加代碼的靈活性

這里將棋盤全部初始化為空格:

void Firstboard(char board[LINE][LIST], int line, int list){	for (int i = 0; i < line; i++)	{		for (int j = 0; j < list; j++)		{			board[i][j] = " ";		}	}}

6、打印棋盤

這里頭文件就會聲明打印棋盤函數:

#include#define LINE 3#define LIST 3void game();//游戲總函數void playgame();//游戲整體邏輯框架void Firstboard(char board[LINE][LIST], int line, int list);//初始化棋盤void printboard(char board[LINE][LIST], int line, int list);//打印棋盤

這里將棋盤打印呈現出來,首先給大家展示一個比較死板的版本:

void printboard(char board[line][list], int line, int list){	for (int i = 0; i < line; i++)	{		printf(" %c | %c | %c/n", board[i][0], board[i][1], board[i][2]);		if (i < line - 1)		{			printf("---|---|---/n");		}	}}

運行結果:

這里的打印可以看出是那種簡單粗暴直接式打印方法,當然這種方法最直接,最簡單,但也最死板,如果此時我們想打印更多棋盤格子呢?是不是就做不到啦,又得修改好多,按這種方法打印就要打印好多,實在是降低了代碼的靈活性。因此修改該代碼如下:

void printboard(char board[LINE][LIST], int line, int list){	int i = 0, j = 0;	for (i = 0; i < line; i++)	{		for (j = 0; j < list; j++)		{			printf(" %c ",board[i][j]);			if (j < list - 1)			{				printf("|");			}		}		printf("/n");		if (i < line - 1)		{			for (j = 0; j < list; j++)			{				printf("---");				if (j < list - 1)				{					printf("|");				}			}			printf("/n");		}	}}

運行結果:

這里 forever 利用循環將整個代碼寫的靈活了,如果想要打印更多格子,直接對宏定義的量進行改變就行啦!所以友友們以后寫代碼盡量去注重一下代碼的可讀性,觀賞性和靈活性,讓你的寫代碼的水準更高,更牛哈!

7、玩家下棋

這里頭文件就會聲明玩家下棋函數:

#include#define LINE 3#define LIST 3void game();//游戲總函數void playgame();//游戲整體邏輯框架void Firstboard(char board[LINE][LIST], int line, int list);//初始化棋盤void printboard(char board[LINE][LIST], int line, int list);//打印棋盤void playergame(char board[LINE][LIST], int line, int list);//玩家下棋

倘若我們規定玩家先下棋,那么這里我們就得開始實現玩家下棋啦!這里我們定義一下玩家用 * 當棋子吧!

void playergame(char board[LINE][LIST], int line, int list){	printf("玩家走/n請輸入坐標:>");	int x = 0, y = 0;	while (1)	{		scanf("%d %d", &x, &y);		if (x >0 && x <= line && y >0 && y <= list)//x,y為1-3是方便玩家輸入		{			if (board[x - 1][y - 1] == " ")//這里x-1和y-1是為了對應數組元素			{				board[x - 1][y - 1] = "*";				break;			}			else			{				printf("皮友友,該坐標已有棋子,請重新下哈!/n");			}		}		else		{			printf("這位友友有點皮喲,請輸入正確范圍坐標哈!/n");		}	}}

運行結果:

8、電腦下棋

一如既往,頭文件會聲明電腦下棋函數:

#include#include//rand()頭文件調用#include//time頭文件調用#define LINE 3#define LIST 3void game();//游戲總函數void playgame();//游戲整體邏輯框架void Firstboard(char board[LINE][LIST], int line, int list);//初始化棋盤void printboard(char board[LINE][LIST], int line, int list);//打印棋盤void playergame(char board[LINE][LIST], int line, int list);//玩家下棋void computergame(char board[LINE][LIST], int line, int list);//電腦下棋

此處電腦開始下棋啦!我們規定一下電腦下棋的棋子為 + 符號吧!

void computergame(char board[LINE][LIST], int line, int list){	printf("電腦走/n");	int x = 0, y = 0;	while (1)	{		x = rand() % line;//生成隨機數		y = rand() % list;		if (board[x][y] == " ")		{			board[x][y] = "+";			break;		}	}}

運行結果:

x = rand() % line; //生成隨機數: 這里是讓電腦下棋時生成隨機坐標,即隨機下棋,這也對應了我們標題里的無心版本啦!哈哈哈哈!就是沒有思維,隨機生成什么就是什么哈!當然這里在使用rand() 時,必須要在主函數里面使用一個 srand((unsigned int) time (NULL)) ,如下展示:

int main(){	srand((unsigned int)time(NULL));	game();	return 0;}

9、判斷結果

這里就要在頭文件里聲明一個判斷是勝負的函數:

#include#include//rand()頭文件調用#include//time頭文件調用#define LINE 3#define LIST 3void game();//游戲總函數void playgame();//游戲整體邏輯框架void Firstboard(char board[LINE][LIST], int line, int list);//初始化棋盤void printboard(char board[LINE][LIST], int line, int list);//打印棋盤char is_win(char board[LINE][LIST], int line, int list);//判斷輸贏void playergame(char board[LINE][LIST], int line, int list);//玩家下棋void computergame(char board[LINE][LIST], int line, int list);//電腦下棋void is_guo(char ret);//判斷最終結果

以上到這里就是頭文件中的所有內容啦!

每下一步棋就需要判斷該局是否結束,若未結束則繼續互相博弈,若結束則還要判斷勝負或平局。因此一共有四種情況:
1、未結束繼續(返回 ‘w’)
2、結束后,玩家勝利(返回 ‘*’ )
3、結束后,電腦勝利(返回 ‘+’)
4、結束后平局(返回 ‘p’)

這里放判斷輸贏和最終結果的函數:

//判斷輸贏char is_win(char board[LINE][LIST], int line, int list){	//判斷行	for (int i = 0; i < line; i++)	{		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != " ")		{			return board[i][1];		}	}	//判斷列	for (int j = 0; j < list; j++)	{		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != " ")		{			return board[1][j];		}	}	//判斷對角線	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 (is_full(board, line, list) == 1)	{		return "p";	}	return "w";}//判斷最終結果void is_guo(char ret){	if (ret == "*")	{		printf("恭喜友友,你勝利啦!/n");	}	else if (ret == "+")	{		printf("很遺憾,友友你輸啦!,再接再厲喲!/n");
            
                     
             
               

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125385.html

相關文章

  • 關于井字游戲自己解題思路.

    摘要:題目來源于面試公司先看看題目吧假設我們現在有一個的井字棋游戲,我們用一個二維數組代表棋盤,代表玩家下的棋子,代表玩家下的棋子,代表該格沒有棋子。 題目來源于面試公司,先看看題目吧 假設我們現在有一個 3 x 3 的井字棋游戲,我們用一個二維數組代表棋盤,’x’ 代表玩家 X 下的棋子,’o’ 代表玩家 O 下的棋子,’e’ 代表該格沒有棋子。例如:一個空白的棋盤以下面的二維數組表示: ...

    wums 評論0 收藏0
  • C語言實現入門級小游戲——三子(萬字長篇)

    摘要:今天博主將為大家帶來語言入門級小游戲三子棋井字棋的詳細介紹,希望這篇文章對大家能有幫助。在這里,我們使用函數來實現這一功能。 ?? ? ??今天博主將為大家帶來C語言入門級小游戲——三子棋(井字棋)的詳細介紹,希望這篇文章對大家能有幫助?。?? ? ? 在編程的學習過程中,編寫一些中這樣...

    meteor199 評論0 收藏0
  • 【三子井字)】如何用C語言實現

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

    jsbintask 評論0 收藏0
  • 【C語言實現井字及電腦落子優化】

    摘要:如果上述兩種情況均不存在,當發現,位置是空時,電腦先下這一步。其他情況均隨意落子。 朋友們,我們還記得以前上課經常和同桌玩起井字棋,那么我們就當我們回憶童年,現在也...

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

    摘要:我們在前文中考慮的那張圖就來自這篇文章,之后我們會用剪枝算法來改進之前的解決方案。剪枝算法的實現接下來討論如何修改前面實現的算法,使其變為剪枝算法。現在我們已經有了現成的和剪枝算法,只要加上一點兒細節就能完成這個游戲了。 前段時間用 React 寫了個2048 游戲來練練手,準備用來回顧下 React 相關的各種技術,以及試驗一下新技術。在寫這個2048的過程中,我考慮是否可以在其中加...

    wemall 評論0 收藏0

發表評論

0條評論

不知名網友

|高級講師

TA的文章

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