<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      井字棋

      該游戲為c語言寫的練手小游戲

      大致分為兩部分:

      • 菜單顯示
      • 游戲部分

      主程序

      首先加載菜單

      image

      用戶選擇人機或者雙人,進入游戲函數

      選擇退出時,退出程序

      選擇不合法選項時,再次加載菜單供用戶選擇

      菜單代碼

      /**
       * @brief 菜單函數
       *
       * @return 無返回值
       *
       * @code
       * Menu();
       * @endcode
       */
      void Menu()
      {
      	printf("******************************\n");
      	printf("******      井字棋      ******\n");
      	printf(" 1.人機練習 2.雙人對弈 3.退出 \n");
      	printf("******************************\n\n\n");
      }

      主程序代碼

      /**
       * @brief 程序入口
       *
       * @return 返回0
       *
       */
      int main(void)
      {
      	int chChoose = 0;//存儲用戶選項
      	char isError = 0;//提示類別:0常規提示,1錯誤提示,默認值為0
      
      	srand((unsigned)time(NULL));
      
      	while (1)
      	{
      		memcpy(m_ChessboardArr, m_ChessboardArr_ori, sizeof(m_ChessboardArr));
      		Menu();//顯示菜單
      
      		if (!isError)
      			printf("請輸入你的選擇:");
      		else
      			printf("輸入錯誤,請重新輸入:");
      
      		isError = 0;//在用戶重新輸入選項時,該值恢復默認值
      		scanf("%d", &chChoose);//用戶輸入選項
      
      		switch (chChoose)
      		{
      		case 1://人機練習
      			Game(1);
      			break;
      		case 2://雙人對弈
      			Game(2);
      			break;
      		case 3://退出
      			printf("即將退出游戲");
      			Sleep(500);
      			return 0;
      		default:
      			isError = 1;
      		}
      	}
      	
      	return 0;
      }

      游戲部分

      首先加載棋盤

      然后讓用戶輸入位置坐標

      判斷坐標合法性

      判斷游戲狀態:輸贏及繼續狀態

      加載棋盤

      棋盤設置如下:

      image

      此處我設置了一個全局變量m_ChessboardArr來作為棋盤數組,其默認值為{ { ' ', ' ', ' ' }, { '_', '_', '_' }, { '_', '_', '_' } };

      加載棋盤時,我是一行一行的加載

      加載棋盤的代碼

      void ShowChessboard()
      {
      	for (int i = 2; i >= 0; --i)
      		printf("%c|%c|%c\n", m_ChessboardArr[i][0], m_ChessboardArr[i][1], m_ChessboardArr[i][2]);//一次加載一行
      }

      提示用戶輸入位置坐標

      此處直接用printf以及scanf函數來提示用戶輸入

      判斷坐標合法性

      • 坐標不超過棋盤大小
      • 坐標是默認值,即沒有玩家在此處下棋

      滿足以上兩點,則坐標合法

      坐標不超過棋盤大小

      if ((x > 3) || (y > 3))
      {
      	isError = 1;
      	continue;
      }

      坐標是默認值

      if (('*' == m_ChessboardArr[x - 1][y - 1]) || ('O' == m_ChessboardArr[x - 1][y - 1]))
      {
      	isError = 2;
      	continue;
      }

      判斷游戲狀態

      • 判斷每行是否一致
      • 判斷每列是否一致
      • 判斷對角線是否一致

      如若有一個是一致的,且不是默認值,則有玩家贏得游戲

      還需判斷棋盤是否下滿,如若下滿則是平局

      如若以上情況都不滿足,則繼續游戲

      代碼

      /**
       * @brief 判斷棋盤情況
       *
       *
       * @param m_ChessboardArr 棋盤數組
       * @return 返回1是玩家1贏;返回2是玩家2贏;返回3是未分勝負,繼續游戲;返回0是棋盤下滿,兩人平局,游戲結束
       *
       * @code
       * int iResult = Judge();
       * @endcode
       */
      int Judge()
      {
      	//判斷每行每列情況
      	for (int i = 0; i < 3; ++i)
      	{
      		if ((m_ChessboardArr[i][1] == m_ChessboardArr[i][0]) && (m_ChessboardArr[i][1] == m_ChessboardArr[i][2]))//判斷每一行是否一致
      		{
      			if ('*' == m_ChessboardArr[i][1])//為*則是一號玩家獲勝
      				return 1;
      
      			if ('O' == m_ChessboardArr[i][1])//為O則是二號玩家獲勝
      				return 2;
      			//否則就是默認值,代表沒有玩家在該處下棋
      		}
      
      		if ((m_ChessboardArr[1][i] == m_ChessboardArr[0][i]) && (m_ChessboardArr[1][i] == m_ChessboardArr[2][i]))//判斷每一列是否一致
      		{
      			if ('*' == m_ChessboardArr[1][i])//為*則是一號玩家獲勝
      				return 1;
      
      			if ('O' == m_ChessboardArr[1][i])//為O則是二號玩家獲勝
      				return 2;
      			//否則就是默認值,代表沒有玩家在該處下棋
      		}
      	}
      
      	//判斷對角線情況
      	if (((m_ChessboardArr[1][1] == m_ChessboardArr[0][1]) && (m_ChessboardArr[1][1] == m_ChessboardArr[2][2])) ||
      		((m_ChessboardArr[1][1] == m_ChessboardArr[0][2]) && (m_ChessboardArr[1][1] == m_ChessboardArr[2][0])))//判斷對角線是否一致
      	{
      		if ('*' == m_ChessboardArr[1][1])//為*則是一號玩家獲勝
      			return 1;
      
      		if ('O' == m_ChessboardArr[1][1])//為O則是二號玩家獲勝
      			return 2;
      		//否則就是默認值,代表沒有玩家在該處下棋
      	}
      
      	//判斷棋盤是否下滿
      	for (int i = 0; i < 3; ++i)
      	{
      		for (int j = 0; j < 3; ++j)
      		{
      			if ((m_ChessboardArr[i][j] != '*') && (m_ChessboardArr[i][j] != 'O'))//棋盤不為玩家值,即棋盤為默認值,則代表沒有下滿,還需繼續游戲
      				return 3;
      		}
      	}
      
      	return 0;//棋盤下滿,退出游戲
      }

      以上就是該小游戲的主要程序了,僅供分享學習用

      游戲源碼

      https://gitee.com/EricsT/game/tree/master/Tic-Tac-Toe

      posted @ 2025-08-17 15:51  EricsT  閱讀(79)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲最大成人在线播放| 广德县| 亚洲gv天堂无码男同在线观看 | 日本高清www无色夜在线视频| 色橹橹欧美在线观看视频高清| 亚洲中文字幕有综合久久| 色狠狠综合天天综合综合| 一本色道国产在线观看二区| 中文 在线 日韩 亚洲 欧美| 亚洲一二区在线视频播放| 国产成AV人片久青草影院| 国偷自产一区二区免费视频| 亚洲精品www久久久久久| 久热天堂在线视频精品伊人| 成人做爰www网站视频| 亚洲综合精品第一页| 精品午夜福利在线视在亚洲| 狠狠五月深爱婷婷网| 国产精品日韩av在线播放| 无码人妻日韩一区日韩二区| 人妻av无码系列一区二区三区| 无码av波多野结衣| 国产精品七七在线播放| 亚洲激情视频一区二区三区| 亚洲成精品动漫久久精久| 国产精品自拍中文字幕| 国产精品∧v在线观看| 18禁美女裸体爆乳无遮挡| 久热这里只有精品12| 国产av无码国产av毛片| 久久国语对白| 国产精品普通话国语对白露脸| 一本久道中文无码字幕av| 中文字幕精品人妻av在线| 国产成人精品视频不卡| 亚洲综合国产成人丁香五| 亚洲欧美成人一区二区三区| 免费AV片在线观看网址| 国产成人av三级在线观看| a毛片免费在线观看| 亚洲熟妇自偷自拍另欧美|