91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用C++實現三子棋游戲

發布時間:2022-01-17 09:04:03 來源:億速云 閱讀:122 作者:iii 欄目:開發技術

這篇文章主要介紹了如何用C++實現三子棋游戲的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何用C++實現三子棋游戲文章都會有所收獲,下面我們一起來看看吧。

    游戲描述:

    先來點真實的!三子棋其實就是我們小時候經常玩的井字棋,如果一方玩家實現橫著三個或者豎著三個,或者對角線三個就算游戲勝利!

    (從頭開始)頭文件也寫在前面:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define H 3//行
    #define L 3//列

    先把游戲與主函數寫在前面:

    游戲函數:

    void game()//游戲實現步驟
    {
    	char gamemap[L][H] = {0};//存儲數據 二維數組
    	initgamemap(gamemap, H, L);//棋盤初始化
    	showgamemap(gamemap, H, L);//打印出棋盤
    	char ret = 0;
    	while (1)//循環下棋
    	{
    		playgame1(gamemap, H, L);//玩家下棋
    		showgamemap(gamemap, H, L);//玩家下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);//判斷玩家是否勝利
    		if (ret != 'C')
    			break;
    		playgame2(gamemap, H, L);//電腦下棋
    		showgamemap(gamemap, H, L);//電腦下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);// 判斷電腦是否勝利
    		if (ret != 'C')
    			break;
    	}
    	if (ret == 'X')
    	{
    		printf("玩家贏了!");
    	}
    	else if (ret == 'O')
    	{
    		printf("電腦贏了!");
    	}
    	else
    	{
    		printf("平局");
    	}
    }

    主函數:

    int main(void)
    {
    	Menu();//顯示游戲菜單
    	srand((unsigned int)time(NULL));
    	int input = 0;
    	do
    	{
    		printf("請輸入的你選擇!");
    		scanf_s("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();//游戲函數實現三子棋游戲!
    			break;
    		case 0:
    			printf("退出游戲!");
    			break;
    		default:
    			printf("輸入錯誤,請從新輸入!");
    			break;
    		}
    	}while (input);
        return 0;
    }

    1.構建游戲菜單

    我們用沒有范圍值類型的Menu函數表示游戲菜單,等下在主函數中直接讀取就行。

    樸實無華的printf,毫無感情!玩家輸入1,代表玩游戲,輸入0代表退出游戲去!去寫作業了。

    void Menu()//游戲菜單
    {
    	printf("**********************\n");
    	printf("****** 1.play   ******\n");
    	printf("****** 0.exit   ******\n");
    	printf("**********************\n");
    }

    2.構建棋盤

    2.1棋盤初始化

    我們用void型的initgame函數表示棋盤的初始化,棋盤的空隙我們用&rsquo; &lsquo;即空格來表示。

    void initgamemap(char gamemap[L][H], int l, int h)//棋盤初始化函數的聲明
    {
    	int i = 0;
        int j = 0;
    	for (i = 0; i < H; i++)//H,J分別表示為行和列
    	{
    		for (j = 0; j < L; j++)
    		{
    			gamemap[i][j] = ' ';
    		}
    	}
    }

    我們可以選擇直接打印出棋盤,但是這樣只能把棋盤規定為3x3的,所以我們看第二種方法

    void showgamemap(char gamemap[L][H], int l, int h)//直接打印出棋盤
    {
    	int i = 0;
    	for (i = 0; i < H; i++)
    	{
    		printf("%c  | %c |  %c\n", gamemap[i][0], gamemap[i][1],gamemap[i][2]);
    		if (i < L - 1)
    			printf("---|---|---\n");
    	}
    }
    void showgamemap(char gamemap[L][H], int l, int h)//打印棋盤
    {
    	int i = 0;
    	for (i = 0; i < H; i++)
    	{
    		int j = 0;
    		for (j = 0; j < L; j++)
    		{
    			printf(" %c ", gamemap[i][j]);
    			if (j < L - 1)
    				printf("|");
    		}
    		printf("\n");
    		if (i < H - 1)
    		{
    			int j = 0;
    			for (j = 0; j < L; j++)
    			{
    				printf("---");
    				if (j < L - 1)
    					printf("|");
    			}
    			printf("\n");
    		}
    	}
    }

    3.玩家和電腦下棋

    3.1玩家先下

    我們默認為玩家先下棋!

    我們定義使用playgame1(gamemap, H, L);函數來實現玩家下棋!

    oid playgame1(char gamemap[L][H], int l, int h)//玩家下棋
    {
    	int x = 0;
    	int y = 0;
    	printf("玩家先下!");
    	while (1)
    	{
    		printf("請輸入下棋的坐標:>");
    		scanf_s("%d %d", &x, &y);
    		//判斷坐標合法性
    		if (x >= 1 && x <= H && y >= 1 && y <= L)
    		{
    			//下棋
    			//坐標是否被占用
    			if (gamemap[x - 1][y - 1] == ' ')
    			{
    				gamemap[x - 1][y - 1] = 'X';
    				break;
    			}
    			else
    			{
    				printf("坐標被占用, 請重新輸入\n");
    			}
    		}
    		else
    		{
    			printf("坐標非法, 請重新輸入\n");
    		}
    	}
    }

    3.2電腦下棋

    由于電腦下棋的位置是隨機不定的,所以我們要使用到rand函數對應頭文件#include   <stdlib.h>,為了使電腦每次下棋的位置不重復同時我們需要使用隨機數種子srand函數。用time()函數去本地時間作為隨機種子,time函數對應頭文件#include  <time.h>。

    void playgame2(char gamemap[L][H], int l, int h)//電腦下棋是是隨機的
    {
    	printf("電腦再下\n");
    	int x = rand() % L;
    	int y = rand() % H;//隨機產生棋的坐標,利用取余原理,將x,y的范圍限制為0-2
    	while (1)
    	{
    		//判斷該坐標是否已經被下過了
    		if (gamemap[x][y] == ' ')
    		{
    			gamemap[x][y] = 'O';//電腦下的用O表示
    			break;
    		}
    	}
    }

    4.判斷勝負與下棋結果

    我們定義一個返回值為char類型的函數,通過游戲結果的幾種不同條件,分別返回不同的字母,通過返回值是輸出游戲結果。

    //玩家贏了-X
    //電腦贏了-O
    //平局-Q
    //游戲繼續-C

    我們在游戲函數里經過玩家和電腦每次下棋后就直接執行判斷游戲是否結束函數。并對返回的字母進行回饋。直到游戲結束

    int gameover1(char gamemap[L][H], int l, int h)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < H; i++)
    	{
    		for (j = 0; j < L; j++)
    		{
    			if (gamemap[i][j] == ' ')
    			{
    				return 0;//棋盤沒滿
    			}
    		}
    	}
     
    	return 1;//棋盤滿了
    }
    char gameover(char gamemap[L][H], int l, int h)
    {
    	int i = 0;
    	//判斷三行
    	for (i = 0; i < H; i++)
    	{
    		if (gamemap[i][0] == gamemap[i][1] && gamemap[i][1] == gamemap[i][2] && gamemap[i][1] != ' ')
    		{
    			return  gamemap[i][1];//
    		}
    	}
    	//判斷三列
    	for (i = 0; i < L; i++)
    	{
    		if (gamemap[0][i] == gamemap[1][i] && gamemap[1][i] == gamemap[2][i] && gamemap[1][i] != ' ')
    		{
    			return gamemap[1][i];
    		}
    	}
    	//判斷對角線
    	if (gamemap[0][0] == gamemap[1][1] && gamemap[1][1] == gamemap[2][2] && gamemap[1][1] != ' ')
    	{
    		return gamemap[1][1];
    	}
    	if (gamemap[0][2] == gamemap[1][1] && gamemap[1][1] == gamemap[2][0] && gamemap[1][1] != ' ')
    	{
    		return gamemap[1][1];
    	}
     
    	//判斷平局
    	//如果棋盤滿了返回1, 不滿返回0
    	int ret = gameover1(gamemap, H, L);
    	if (ret == 1)
    	{
    		return 'Q';
    	}
    	//繼續
    	return 'C';
    }

    下棋結果的判斷與輸出;

    void game()//游戲實現步驟
    {
    	char gamemap[L][H] = {0};//存儲數據 二維數組
    	initgamemap(gamemap, H, L);//棋盤初始化
    	showgamemap(gamemap, H, L);//打印出棋盤
    	char ret = 0;
    	while (1)//循環下棋
    	{
    		void game()//游戲實現步驟
    {
    	char gamemap[L][H] = {0};//存儲數據 二維數組
    	initgamemap(gamemap, H, L);//棋盤初始化
    	showgamemap(gamemap, H, L);//打印出棋盤
    	char ret = 0;
    	while (1)//循環下棋
    	{
    		playgame1(gamemap, H, L);//玩家下棋
    		showgamemap(gamemap, H, L);//玩家下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);//判斷玩家是否勝利
    		if (ret != 'C')
    			break;
    		playgame2(gamemap, H, L);//電腦下棋
    		showgamemap(gamemap, H, L);//電腦下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);// 判斷電腦是否勝利
    		if (ret != 'C')
    			break;
    	}
    	if (ret == 'X')
    	{
    		printf("玩家贏了!");
    	}
    	else if (ret == 'O')
    	{
    		printf("電腦贏了!");
    	}
    	else
    	{
    		printf("平局");
    	}
    }//玩家下棋
    		showgamemap(gamemap, H, L);//玩家下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);//判斷玩家是否勝利
    		if (ret != 'C')
    			break;
    		playgame2(gamemap, H, L);//電腦下棋
    		showgamemap(gamemap, H, L);//電腦下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);// 判斷電腦是否勝利
    		if (ret != 'C')
    			break;
    	}
    	if (ret == 'X')
    	{
    		printf("玩家贏了!");
    	}
    	else if (ret == 'O')
    	{
    		printf("電腦贏了!");
    	}
    	else
    	{
    		printf("平局");
    	}
    }

    代碼附上:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define H 3
    #define L 3
    void initgamemap(char gamemap[L][H], int l, int h)//棋盤初始化函數的聲明
    {
    	int i = 0;
        int j = 0;
    	for (i = 0; i < H; i++)
    	{
    		for (j = 0; j < L; j++)
    		{
    			gamemap[i][j] = ' ';
    		}
    	}
    }
    //void showgamemap(char gamemap[L][H], int l, int h)//直接打印出棋盤
    //{
    //	int i = 0;
    //	for (i = 0; i < H; i++)
    //	{
    //		printf("%c  | %c |  %c\n", gamemap[i][0], gamemap[i][1],gamemap[i][2]);
    //		if (i < L - 1)
    //			printf("---|---|---\n");
    //	}
    //}
    void showgamemap(char gamemap[L][H], int l, int h)//打印棋盤
    {
    	int i = 0;
    	for (i = 0; i < H; i++)
    	{
    		int j = 0;
    		for (j = 0; j < L; j++)
    		{
    			printf(" %c ", gamemap[i][j]);
    			if (j < L - 1)
    				printf("|");
    		}
    		printf("\n");
    		if (i < H - 1)
    		{
    			int j = 0;
    			for (j = 0; j < L; j++)
    			{
    				printf("---");
    				if (j < L - 1)
    					printf("|");
    			}
    			printf("\n");
    		}
    	}
    }
    void playgame1(char gamemap[L][H], int l, int h)//玩家下棋
    {
    	int x = 0;
    	int y = 0;
    	printf("玩家先下!");
    	while (1)
    	{
    		printf("請輸入下棋的坐標:>");
    		scanf_s("%d %d", &x, &y);
    		//判斷坐標合法性
    		if (x >= 1 && x <= H && y >= 1 && y <= L)
    		{
    			//下棋
    			//坐標是否被占用
    			if (gamemap[x - 1][y - 1] == ' ')
    			{
    				gamemap[x - 1][y - 1] = 'X';
    				break;
    			}
    			else
    			{
    				printf("坐標被占用, 請重新輸入\n");
    			}
    		}
    		else
    		{
    			printf("坐標非法, 請重新輸入\n");
    		}
    	}
    }
    void playgame2(char gamemap[L][H], int l, int h)//電腦下棋是是隨機的
    {
    	printf("電腦再下\n");
    	int x = rand() % L;
    	int y = rand() % H;//隨機產生棋的坐標,利用取余原理,將x,y的范圍限制為0-2
    	while (1)
    	{
    		//判斷該坐標是否已經被下過了
    		if (gamemap[x][y] == ' ')
    		{
    			gamemap[x][y] = 'O';//電腦下的用O表示
    			break;
    		}
    	}
    }
    int gameover1(char gamemap[L][H], int l, int h)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < H; i++)
    	{
    		for (j = 0; j < L; j++)
    		{
    			if (gamemap[i][j] == ' ')
    			{
    				return 0;//棋盤沒滿
    			}
    		}
    	}
     
    	return 1;//棋盤滿了
    }
    char gameover(char gamemap[L][H], int l, int h)
    {
    	int i = 0;
    	//判斷三行
    	for (i = 0; i < H; i++)
    	{
    		if (gamemap[i][0] == gamemap[i][1] && gamemap[i][1] == gamemap[i][2] && gamemap[i][1] != ' ')
    		{
    			return  gamemap[i][1];//
    		}
    	}
    	//判斷三列
    	for (i = 0; i < L; i++)
    	{
    		if (gamemap[0][i] == gamemap[1][i] && gamemap[1][i] == gamemap[2][i] && gamemap[1][i] != ' ')
    		{
    			return gamemap[1][i];
    		}
    	}
    	//判斷對角線
    	if (gamemap[0][0] == gamemap[1][1] && gamemap[1][1] == gamemap[2][2] && gamemap[1][1] != ' ')
    	{
    		return gamemap[1][1];
    	}
    	if (gamemap[0][2] == gamemap[1][1] && gamemap[1][1] == gamemap[2][0] && gamemap[1][1] != ' ')
    	{
    		return gamemap[1][1];
    	}
     
    	//判斷平局
    	//如果棋盤滿了返回1, 不滿返回0
    	int ret = gameover1(gamemap, H, L);
    	if (ret == 1)
    	{
    		return 'Q';
    	}
    	//繼續
    	return 'C';
    }
    //玩家贏了-*
    //電腦贏了-#
    //平局-Q
    //游戲繼續-c
     
    void Menu()//游戲菜單
    {
    	printf("**********************\n");
    	printf("****** 1.play   ******\n");
    	printf("****** 0.exit   ******\n");
    	printf("**********************\n");
    }
    void game()//游戲實現步驟
    {
    	char gamemap[L][H] = {0};//存儲數據 二維數組
    	initgamemap(gamemap, H, L);//棋盤初始化
    	showgamemap(gamemap, H, L);//打印出棋盤
    	char ret = 0;
    	while (1)//循環下棋
    	{
    		void game()//游戲實現步驟
    {
    	char gamemap[L][H] = {0};//存儲數據 二維數組
    	initgamemap(gamemap, H, L);//棋盤初始化
    	showgamemap(gamemap, H, L);//打印出棋盤
    	char ret = 0;
    	while (1)//循環下棋
    	{
    		playgame1(gamemap, H, L);//玩家下棋
    		showgamemap(gamemap, H, L);//玩家下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);//判斷玩家是否勝利
    		if (ret != 'C')
    			break;
    		playgame2(gamemap, H, L);//電腦下棋
    		showgamemap(gamemap, H, L);//電腦下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);// 判斷電腦是否勝利
    		if (ret != 'C')
    			break;
    	}
    	if (ret == 'X')
    	{
    		printf("玩家贏了!");
    	}
    	else if (ret == 'O')
    	{
    		printf("電腦贏了!");
    	}
    	else
    	{
    		printf("平局");
    	}
    }//玩家下棋
    		showgamemap(gamemap, H, L);//玩家下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);//判斷玩家是否勝利
    		if (ret != 'C')
    			break;
    		playgame2(gamemap, H, L);//電腦下棋
    		showgamemap(gamemap, H, L);//電腦下完棋后并打印出該棋盤
    		ret=gameover(gamemap, H, L);// 判斷電腦是否勝利
    		if (ret != 'C')
    			break;
    	}
    	if (ret == 'X')
    	{
    		printf("玩家贏了!");
    	}
    	else if (ret == 'O')
    	{
    		printf("電腦贏了!");
    	}
    	else
    	{
    		printf("平局");
    	}
    }
    int main(void)
    {
    	Menu();//顯示游戲菜單
    	srand((unsigned int)time(NULL));
    	int input = 0;
    	do
    	{
    		printf("請輸入的你選擇!");
    		scanf_s("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();//游戲函數實現三子棋游戲!
    			break;
    		case 0:
    			printf("退出游戲!");
    			break;
    		default:
    			printf("輸入錯誤,請從新輸入!");
    			break;
    		}
    	}while (input);
        return 0;
    }

    關于“如何用C++實現三子棋游戲”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何用C++實現三子棋游戲”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    c++
    AI

    汉源县| 灵宝市| 哈尔滨市| 晋宁县| 朝阳县| 新兴县| 叶城县| 浪卡子县| 贞丰县| 华亭县| 阳新县| 吉水县| 林口县| 奎屯市| 陆河县| 奉贤区| 华亭县| 武穴市| 霍城县| 长汀县| 白沙| 临颍县| 曲靖市| 卓资县| 汤阴县| 佛教| 高淳县| 天峨县| 称多县| 饶阳县| 桦甸市| 镇江市| 穆棱市| 原平市| 正蓝旗| 康保县| 元谋县| 纳雍县| 丹东市| 麻江县| 当涂县|