亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C語言三子棋的實現代碼怎么寫

發布時間:2023-02-14 09:09:45 來源:億速云 閱讀:157 作者:iii 欄目:開發技術

這篇文章主要介紹“C語言三子棋的實現代碼怎么寫”,在日常操作中,相信很多人在C語言三子棋的實現代碼怎么寫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言三子棋的實現代碼怎么寫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!


    一、三子棋小游戲的簡單介紹

    要說大家都很熟悉的一個小游戲,三子棋算是其中一個了。相信大家都玩過三子棋小游戲,在這里我還是給大家介紹簡單的游戲規則:

    • 一次只能下一個棋子;

    • 玩家下完棋子后,電腦下棋子;

    • 不能再重復的位置上下棋子;

    • 不管是玩家還是電腦,誰先達到三個棋子連接在一起的時候獲勝;

    • 三個棋子的連接包括:橫三個、豎三個、斜三個。

    二、三子棋的思路及代碼實現

    1、打印游戲菜單

    我們實現游戲之前,應該想到先給玩家提供一個菜單。這個菜單的功能就是幫助用戶選擇是否要開始游戲。菜單的實現我們可以單獨自定義一個函數,我們用到菜單的時候調用此函數即可。

    void meau()
    {
    	printf("*********************\n");
    	printf("*****  1.play   *****\n");
    	printf("*****  0.exit   *****\n");
    	printf("*********************\n");
    }

    通過上面的代碼我們可以很容易看出,選擇‘1’是開始游戲,選擇‘0’是退出游戲。

    2、選擇是否開始游戲

    提到選擇,我們這里可以聯想到switch-case語句。由上面的菜單可知:選擇‘1’是開始游戲,選擇‘0’是退出游戲。當然我們不能排除不小心輸入錯誤,所以這里我們還要考慮到選擇錯誤的情況下要給出相應的提示。當選擇錯誤時,給出提示且重新選擇,同時再把菜單打印出,提供玩家選擇。那怎么實現重新選擇呢?我們這里其實可以使用do-while()語句。我們先來看一下代碼的實現。

    void test()
    {
    	int input = 0;
    	do
    	{
    		meau();
    		printf("請選擇是否要開始游戲:");
    		scanf("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();  //開始三子棋游戲
    			break;
    		case 0:
    			printf("退出游戲\n");
    			break;
    		default:
    			printf("選擇錯誤\n");
    		}
    	} while (input);
    }

    我們看上面的代碼是放在的一個自定義的test()函數中,我們只要再主函數中調用一下即可。上面的代碼很巧妙,當我們輸入‘1’的時候,開始游戲。當游戲結束時,循環繼續。其實是實現了一個玩完一局可以反復玩的效果。當我們輸入‘0’的時候,循環結束,就是相當于結束游戲了。當我們輸入錯誤時,循環仍然繼續,再次打印菜單提供我們選擇。這也是 do-while()語句的巧妙之處。

    3、創建并且初始化棋盤

    3.1、創建棋盤

    創建棋盤很簡單,我們這里需要的是一個二維數組。那么棋盤的大小呢?我們首先想到的是3x3的棋盤——char board[3][3]。那要是想改成5x5的棋盤呢?我們是把整個工程中的board[3][3]改成board[5][5]嗎?這樣太麻煩了,當然也不現實。這里我們可以引用#define 定義的標識符常量。這時候我們可以寫成char board[ROW][COL]。改變大小的時候只需要改變#define 定義的標識符常量的值就行。

    #define ROW 3
    #define COL 3
    char board[ROW][COL];
    3.2、初始化棋盤

    我們這里將初始化棋盤放在一個init_board(board, ROW, COL)函數中。為什么要初始化棋盤呢?當我們不初始化的時候,期盼中的每個位置放的是‘\0’。而我們想要得到的棋盤是一個空棋盤,這樣的話更加有利于玩家操作下棋。空棋盤看起開也比較整潔。我們看一下初始化代碼的實現。

    void init_board(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++)
    		{
    			board[i][j] = ' ';
    		}
    	}
    }

    4、打印格式化棋盤

    當我們初始化完棋盤后,我們就應該把棋盤打印出來讓玩家看到并且選擇要下棋的位置。這里我們先來看打印棋盤。打印出來的棋盤應該格式鮮明,每個位置獨立分開,而不是一片空白。我們先看一下棋盤的格式:

    C語言三子棋的實現代碼怎么寫

    3x3

    C語言三子棋的實現代碼怎么寫

    5x5

    通過上面的兩個圖,我們就可以建立一個大概的打印棋盤的思路了。其實我們可以把”_ _ _|_ _ _|_ _ _“看作我們要打印的第一行內容,但是要注意最后一行是” | | “。打印的思路有了,把打印棋盤內容放在print_board(board, ROW, COL)函數中。我們來看一下代碼的實現。

    void print_board(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)
    		{
    			for (j = 0; j < row; j++)
    			{
    				printf("---");
    				if (j < col - 1)
    					printf("|");
    			}
    		}
    		printf("\n");
    	}
    }

    5、玩家下棋

    當我們把棋盤打印出來后,這時候就要提示玩家選擇下棋了。我們采用的是坐標的形式讓玩家進行選擇下棋位置。這里要有幾點要注意的事項

    • 玩家選擇的位置就是所看到的位置,跟代碼中的數組下標訪問還是有所差距的;

    • 玩家輸入的坐標后,要判斷該坐標是否已經被占用,也就是不能重復在同一個位置上下棋;

    • 玩家輸入坐標后,要判斷坐標是否合法,不合法的話要給出提示,并且重新輸入。

    • 當玩家輸入的坐標合法后,電腦玩家進行下棋;

    • 玩家下完棋后要再次調用打印棋盤函數print_board(board, ROW, COL),使玩家更方便的觀看已經下棋的位置;

    • 我們把玩家下的坐標用 &lsquo; * &rsquo; 來代表。

    我們將玩家下棋內容放在player_move(board, ROW, COL)函數中,我們來看一下玩家下棋的代碼實現。

    void player_move(char board[ROW][COL], int row, int col)
    {
    	int x = 0;
    	int y = 0;
    	printf("請選擇你要下棋的坐標:");
    	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("該坐標已經被占有,請重新選擇:");
    			}
    		}
    		else
    		{
    			printf("該坐標非法,請輸入合法坐標:");
    		}
    	}
    }

    6、電腦下棋

    玩家下棋后,就該電腦下棋了。電腦下棋其實就是隨機下棋。當然電腦下棋也是不能重復在同一個位置上下棋,且是合法的。提到隨機,我們就因該聯想到rand()函數和srand()函數,在這里我就不詳細介紹這兩個函數的使用方法了,在之前的猜數字小游戲中有詳細的解釋,可以去了解一下。電腦下完棋后也要調用打印棋盤函數print_board(board, ROW, COL),使玩家更方便的觀看已經下棋的位置。我們把玩家下的坐標用 &lsquo; #&rsquo; 來代表。把電腦下棋代碼放在computer_move(board, ROW, COL)函數中。那我們來看一下電腦下棋的代碼實現。

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

    7、判斷是否玩家或者電腦贏

    其實,每當玩家或者電腦下完一次棋后,我們都需要判斷一下是否有贏的。如果沒有贏的,我們就進行反復下棋。如果有贏的,我們就停止下棋,并輸出”玩家贏“或者”電腦贏“。我們同時還要想到是否為平局,如果為平局的話,就輸出”平局“。判斷輸贏的函數我們定義成char is_win(board[ROW][COL], ROW, COL)。

    判斷輸贏函數返回值注意:

    • 我們這個判斷輸贏的函數是有返回值的,返回類型為char;

    • 當返回 &lsquo;*&rsquo; 時,玩家勝利;

    • 當返回 &lsquo;#&rsquo; 時,電腦勝利;

    • 當返回 &lsquo;Q&rsquo; 時,平局;

    • 當返回 &lsquo;C&rsquo; 時,游戲繼續。

    當我們在編寫輸贏函數時,我們要注意不能數組越界訪問。我們先來看一下判斷輸贏函數的實現。

    char is_win(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++)
    		{
    			if (j == 0)
    			{
    				if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' '))
    					return board[i][0];
    			}
    			else if (j == 1)
    			{
    				if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' ')
    					|| (board[i][1] == board[i][2]) && (board[i][2] == board[i][23]) && (board[i][1] != ' '))
    					return board[i][1];
    			}
    			else if (j == col - 1)
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else if (j == col - 2)
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' '))
    				return board[i][j];
    			}
    			else
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j + 1]) && (board[i][j + 1] == board[i][j + 2]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷列
    	int j = 0;
    	for (j = 0; j < col; j++)
    	{
    		for (i = 0; i < row; i++)
    		{
    			if (i == 0)
    			{
    				if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' '))
    					return board[0][j];
    			}
    			else if (i == 1)
    			{
    				if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' ')
    					|| (board[1][j] == board[2][j]) && (board[2][j] == board[3][j]) && (board[1][j] != ' '))
    					return board[1][j];
    			}
    			else if (i == row - 1)
    			{
    				if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else if (i == row - 2)
    			{
    				if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else
    			{
    				if ((board[i][j] == board[i + 1][j]) && (board[i + 1][j] == board[i + 2][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷主對角線
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (i<row-2&&j<col-2)
    			{
    				if((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i>0&&i<row-1&&j>0&&j<col-1)
    			{
    				if ((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i - 1][j - 1] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i >1&&j>1)
    			{
    				if ((board[i][j] == board[i - 1][j - 1] && board[i][j] == board[i - 2][j - 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷次對角線
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (i<row-2&&j>1)
    			{
    				if ((board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (j>0&&j<col-1&&i>0&&i<row-1)
    			{
    				if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i>1&&j<col-2)
    			{
    				if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i - 2][j + 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷平局
    	int flag = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (board[i][j] == ' ')
    				flag = 1;
    		}
    	}
    	if (flag == 0)
    		return 'Q';
    	return 'C';
    }

    我們這里再看一下反復調用玩家下棋player_move(board, ROW, COL)函數和電腦下棋computer_move(board, ROW, COL)函數和打印棋盤函數print_board(board, ROW, COL)函數到終止循環的代碼。反復調用這幾個函數也就是實現了反復下棋的效果。如果沒有贏的,我們就進行反復下棋。如果有贏的或者平局,我們就停止下棋。我們來看代碼實現。

    	while (1)
    	{
    		//玩家下棋
    		player_move(board, ROW, COL);
    		print_board(board, ROW, COL);
    		//判斷是否結束 
    		// * 玩家勝利
    		// # 電腦勝利
    		// Q 平局
    		// C 繼續游戲
    		ret=is_win(board, ROW, COL);
    		if (ret != 'C')
    			break;
    		//電腦下棋
    		computer_move(board, ROW, COL);
    		print_board(board, ROW, COL);
    		ret = is_win(board, ROW, COL);
    		if (ret != 'C')
    			break;
    	}

    綜上就是我整個三子棋游戲實現的思路了。總體來說還是比較簡單的。我們把上面的代碼整合一下來看。

    三、整合三子棋游戲代碼

    由于代碼量相對來說有一點多,所以我們就將函數的聲明的定義分開,這樣有利于提高代碼的可讀性,同時會保持一個良好的思路,且方便編寫代碼。

    我們將函數的聲明放在單獨的一個game.h的頭文件,函數的實現放在一個單獨的game.c源文件,函數的主方法及調用放在另一個單獨的test.c源文件。

    game.h

    #include<stdio.h>
    //數組行和列的大小
    #define ROW 3
    #define COL 3
    //初始化數組 
    void init_board(char board[ROW][COL],int row,int col);
    //打印格式化數組
    void print_board(char board[ROW][COL], int row, int col);
    //玩家下棋 *
    void player_move(char board[ROW][COL], int row, int col);
    //電腦下棋 #
    void computer_move(char board[ROW][COL], int row, int col);
    //判斷輸贏或者平局
    char is_win(char board[ROW][COL], int row, int col);

    game.c

    #include "game.h"
    void init_board(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++)
    		{
    			board[i][j] = ' ';
    		}
    	}
    }
    void print_board(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)
    		{
    			for (j = 0; j < row; j++)
    			{
    				printf("---");
    				if (j < col - 1)
    					printf("|");
    			}
    		}
    		printf("\n");
    	}
    }
    void player_move(char board[ROW][COL], int row, int col)
    {
    	int x = 0;
    	int y = 0;
    	printf("請選擇你要下棋的坐標:");
    	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("該坐標已經被占有,請重新選擇:");
    			}
    		}
    		else
    		{
    			printf("該坐標非法,請輸入合法坐標:");
    		}
    	}
    }
    void computer_move(char board[ROW][COL], int row, int col)
    {
    	printf("電腦下棋:\n");
    	while (1)
    	{
    		int x = rand() % 3;
    		int y = rand() % 3;
    		if (board[x][y] == ' ')
    		{
    			board[x][y] = '#';
    			break;
    		}
    	}
    }
    char is_win(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++)
    		{
    			if (j == 0)
    			{
    				if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' '))
    					return board[i][0];
    			}
    			else if (j == 1)
    			{
    				if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][1] != ' ')
    					|| (board[i][1] == board[i][2]) && (board[i][2] == board[i][23]) && (board[i][1] != ' '))
    					return board[i][1];
    			}
    			else if (j == col - 1)
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else if (j == col - 2)
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' '))
    				return board[i][j];
    			}
    			else
    			{
    				if ((board[i][j] == board[i][j - 1]) && (board[i][j - 1] == board[i][j - 2]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j - 1]) && (board[i][j] == board[i][j + 1]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i][j + 1]) && (board[i][j + 1] == board[i][j + 2]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷列
    	int j = 0;
    	for (j = 0; j < col; j++)
    	{
    		for (i = 0; i < row; i++)
    		{
    			if (i == 0)
    			{
    				if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' '))
    					return board[0][j];
    			}
    			else if (i == 1)
    			{
    				if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && (board[1][j] != ' ')
    					|| (board[1][j] == board[2][j]) && (board[2][j] == board[3][j]) && (board[1][j] != ' '))
    					return board[1][j];
    			}
    			else if (i == row - 1)
    			{
    				if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else if (i == row - 2)
    			{
    				if ((board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    			else
    			{
    				if ((board[i][j] == board[i + 1][j]) && (board[i + 1][j] == board[i + 2][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i + 1][j]) && (board[i][j] != ' ')
    					|| (board[i][j] == board[i - 1][j]) && (board[i - 1][j] == board[i - 2][j]) && (board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷主對角線
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (i<row-2&&j<col-2)
    			{
    				if((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i>0&&i<row-1&&j>0&&j<col-1)
    			{
    				if ((board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i - 1][j - 1] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i >1&&j>1)
    			{
    				if ((board[i][j] == board[i - 1][j - 1] && board[i][j] == board[i - 2][j - 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷次對角線
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (i<row-2&&j>1)
    			{
    				if ((board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (j>0&&j<col-1&&i>0&&i<row-1)
    			{
    				if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '))
    					return board[i][j];
    			}
    			if (i>1&&j<col-2)
    			{
    				if ((board[i][j] == board[i - 1][j + 1] && board[i][j] == board[i - 2][j + 2] && board[i][j] != ' '))
    					return board[i][j];
    			}
    		}
    	}
    	//判斷平局
    	int flag = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			if (board[i][j] == ' ')
    				flag = 1;
    		}
    	}
    	if (flag == 0)
    		return 'Q';
    	return 'C';
    }

    test.c

    #include "game.h"
    void game()
    {
    	char ret = 0;
    	srand(time(NULL));
    	char board[ROW][COL];
    	//初始化數組 全為空格
    	init_board(board, ROW, COL);
    	//打印格式化數組
    	print_board(board, ROW, COL);
    	while (1)
    	{
    		//玩家下棋
    		player_move(board, ROW, COL);
    		print_board(board, ROW, COL);
    		//判斷是否結束 
    		// * 玩家勝利
    		// # 電腦勝利
    		// Q 平局
    		// C 繼續游戲
    		ret=is_win(board, ROW, COL);
    		if (ret != 'C')
    			break;
    		//電腦下棋
    		computer_move(board, ROW, COL);
    		print_board(board, ROW, COL);
    		ret = is_win(board, ROW, COL);
    		if (ret != 'C')
    			break;
    	}
    	if (ret == '*')
    		printf("恭喜玩家取得勝利!\n");
    	else if (ret == '#')
    		printf("電腦取得勝利。\n");
    	else if (ret == 'Q')
    		printf("平局了哦。\n");
    }
    void meau()
    {
    	printf("*********************\n");
    	printf("*****  1.play   *****\n");
    	printf("*****  0.exit   *****\n");
    	printf("*********************\n");
    }
    void test()
    {
    	int input = 0;
    	do
    	{
    		meau();
    		printf("請選擇是否要開始游戲:");
    		scanf("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();
    			break;
    		case 0:
    			printf("退出游戲\n");
    			break;
    		default:
    			printf("選擇錯誤\n");
    		}
    	} while (input);
    }
    int main()
    {
    	test();
    	return 0;
    }

    到此,關于“C語言三子棋的實現代碼怎么寫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

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

    AI

    盐山县| 上林县| 剑河县| 云安县| 镇安县| 同仁县| 色达县| 内丘县| 县级市| 水城县| 长子县| 盐津县| 灯塔市| 桂林市| 佛冈县| 景洪市| 宿松县| 博爱县| 渑池县| 仁化县| 湘阴县| 云霄县| 灌云县| 平果县| 乐东| 阿拉善左旗| 建湖县| 庐江县| 塔河县| 天津市| 黄陵县| 浪卡子县| 武山县| 中超| 维西| 宜川县| 江山市| 马公市| 射洪县| 辽阳市| 晋宁县|