最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)簡單的井字棋游戲

 更新時間:2021年04月28日 09:51:24   作者:肖舎  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單的井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)簡單井字棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.什么是井字棋

井字棋相信大部分人都玩過

規(guī)則:雙方輪流放子,當(dāng)某一方的三個子連成一線(行,列,對角)時,該方獲勝。

2.游戲前的準(zhǔn)備

1. 菜單

游戲正式開始前我們可以為用戶提供一個選擇菜單,筆者做了一個最簡單的游戲開始菜單:

代碼:

/*菜單*/
int menu()
{
 printf("###########################\n");
 printf("##   1.Play 2.Exit   ##\n");
 printf("###########################\n");
 return 0;
}

2. 打印棋盤

要玩游戲我們首先要有一個3*3的棋盤,棋子信息則用一個二維數(shù)組來表示,并進(jìn)行初始化:

char chess[ROW][COL] = { '\0' }; //ROW=3,COL=3

顯示棋盤我們可以寫一個函數(shù):

/*顯示棋盤*/
int ShowBroad(char chess[][COL])
{
 system("cls");  //刷新界面
 printf(" %c | %c |%c          Player:   X\n",chess[0][0],chess[0][1],chess[0][2]);
 printf(" ----------        Computer: O\n");
 printf(" %c | %c |%c \n", chess[1][0], chess[1][1], chess[1][2]);
 printf(" ----------\n");
 printf(" %c | %c |%c \n", chess[2][0], chess[2][1], chess[2][2]);

}

將棋盤打印出來的同時在旁邊顯示出玩家和電腦所用的棋子。棋盤效果:

由于電腦是隨機落子的,這樣我們就會用到隨機數(shù),于是可以在后面加上隨機數(shù)的種子,為之后的隨機數(shù)做準(zhǔn)備。
至此,準(zhǔn)備工作就完成了,這部分的代碼如下:

int a ,count =0;
char chess[ROW][COL] = { '\0' };
menu();        //顯示菜單
printf("Please Enter Your Chose:>\n ");
scanf("%d", &a);
if (a != 1){ return 0; }
ShowBroad(chess);
srand((unsigned)time(NULL));

其中count是用來統(tǒng)計已占用的格子。

3.游戲開始

做完準(zhǔn)備工作后我們開始正式的游戲邏輯編寫。游戲邏輯可以這樣考慮:

先由用戶輸入一個坐標(biāo),進(jìn)行勝負(fù)和平局判斷,若未產(chǎn)生任何結(jié)果則由電腦落子,之后同樣進(jìn)行勝負(fù)判斷,如此循環(huán)直到產(chǎn)生勝負(fù)或平局。

基于此,我們將所有游戲過程寫在一個死循環(huán)中,直到產(chǎn)生游戲結(jié)果則跳出。

1. 玩家落子

代碼:

 if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\
   chess[user_x-1][user_y-1]=='\0'){  //輸入是否合法
   chess[user_x - 1][user_y - 1] = 'X';
   count++;
   if (Judge(chess) == 'X'){    //判斷玩家贏
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
  else if (count == 9){     //判斷平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }

解釋:當(dāng)用戶輸入坐標(biāo)在棋盤內(nèi)并且該位置尚未被落子時,(user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\ chess[user_x-1][user_y-1]=='\0')將棋盤對應(yīng)坐標(biāo)元素改寫成“X”(chess[user_x - 1][user_y - 1] = 'X';),之后將格子占用數(shù)count+1.

2. 判斷勝平

為了判斷是否勝利,我們可以寫一個函數(shù),將棋盤現(xiàn)在的數(shù)據(jù)傳入,在里面逐行逐列判斷。

代碼:

/*判斷*/
char Judge(char chess[][COL])
{
 for (int i = 0; i < COL; i++){  //判斷行
  if (chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2] && chess[i][2] != '\0')
  {
   return chess[i][0];
  }
 }
 for (int i = 0; i < COL; i++){  //判斷列
  if (chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i] && chess[2][i] != '\0')
  {
   return chess[0][i];
  }
 }
 if (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[2][2] != '\0')  
  {        //判斷對角線
   return chess[0][0];
  }
 if (chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0] && chess[2][0] != '\0')
  {
   return chess[0][2];
  }
  return ' ';
}

此時是玩家落子之后,不會產(chǎn)生負(fù),所以不需要判斷是否輸了。檢查Judge()的返回值。當(dāng)玩家勝利時輸出勝利,游戲結(jié)束,當(dāng)平局時輸出平局,游戲結(jié)束

if (Judge(chess) == 'X'){  //判斷玩家贏
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
   else if (count == 9){   //判斷平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }

3. 電腦落子

電腦是隨機落子的,于是需要給chess()傳入隨機的x和y,于是這里用到rand()

void computer(char chess[][COL])
{
 int x, y;
 while (1){
  x = rand() % (COL) + 0;
  y = rand() % (COL) + 0;
  if (chess[x][y] == '\0'){
   chess[x][y] = 'O';
   break;
  }
 }
 ShowBroad(chess);
}

這里要注意當(dāng)隨機的坐標(biāo)未被落子時才能使用,所以用死循環(huán)來查找一個合法的坐標(biāo),當(dāng)找到時電腦才能落子,之后跳出循環(huán),并刷新棋盤。

4. 判斷負(fù)

與上面一樣,我們調(diào)用Judge()函數(shù)來判斷,當(dāng)返回的是“O”時候,輸出信息,游戲結(jié)束。

if (Judge(chess) == 'O'){   //判斷電腦贏
    printf("You Lost!\n");
    break;
   }

最終游戲界面:

結(jié)束

至此,一個簡單的井字棋游戲就完成了,內(nèi)容簡陋,可以優(yōu)化的地方還有很多,各位可自行擴展。由這個簡單的三子棋我們還能進(jìn)一步發(fā)展成五子棋,做出更多的內(nèi)容,先挖個五子棋的坑,以后來填。

main函數(shù)代碼:

int main()
{
 int a ,count =0;
 char chess[ROW][COL] = { '\0' };
 menu();           //顯示菜單
 printf("Please Enter Your Chose:>\n ");
 scanf("%d", &a);
 if (a != 1){ return 0; }
 ShowBroad(chess);
 srand((unsigned)time(NULL));
 while (1)
 {
  int user_x, user_y;
  printf("Please Enter:<x,y>\n");
  scanf("%d%d", &user_x, &user_y);   //玩家落子
  if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\
   chess[user_x-1][user_y-1]=='\0'){  //輸入是否合法
   chess[user_x - 1][user_y - 1] = 'X';
   count++;
   if (Judge(chess) == 'X'){    //判斷玩家贏
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
   else if (count == 9){     //判斷平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }
   computer(chess);      //電腦落子
   count++;
   if (Judge(chess) == 'O'){    //判斷電腦贏
    printf("You Lost!\n");
    break;
   }
  }
  else continue;
 }
 system("pause");
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 中私有繼承的作用

    C++ 中私有繼承的作用

    這篇文章主要介紹了C++ 中私有繼承的作用的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C++ POSIX API超詳細(xì)分析

    C++ POSIX API超詳細(xì)分析

    這篇文章主要介紹了C++ POSIXAPI的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • C++ 實現(xiàn)球迷 今日頭條面試題

    C++ 實現(xiàn)球迷 今日頭條面試題

    這篇文章主要介紹了C++實現(xiàn)球迷今日頭條面試題功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • C++的類型轉(zhuǎn)換詳細(xì)介紹

    C++的類型轉(zhuǎn)換詳細(xì)介紹

    這篇文章主要介紹了C++的類型轉(zhuǎn)換詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++ 創(chuàng)建桌面快捷方式 開始菜單的實現(xiàn)代碼

    C++ 創(chuàng)建桌面快捷方式 開始菜單的實現(xiàn)代碼

    這篇文章介紹了C++ 創(chuàng)建桌面快捷方式,開始菜單的實現(xiàn)代碼,需要的朋友可以參考一下
    2013-06-06
  • 老生常談C/C++內(nèi)存管理

    老生常談C/C++內(nèi)存管理

    下面小編就為大家?guī)硪黄仙U凜/C++內(nèi)存管理。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • CLion安裝、漢化、配置圖文詳解

    CLion安裝、漢化、配置圖文詳解

    這篇文章主要介紹了CLion安裝、漢化、激活、配置圖文詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C語言中循環(huán)嵌套的應(yīng)用方式

    C語言中循環(huán)嵌套的應(yīng)用方式

    這篇文章主要介紹了C語言中循環(huán)嵌套的應(yīng)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • c++ 類和對象總結(jié)

    c++ 類和對象總結(jié)

    這篇文章主要介紹了c++ 類和對象總結(jié)一,需要的朋友可以參考下
    2020-01-01
  • C++返回值類型后置實現(xiàn)(跟蹤返回值類型)

    C++返回值類型后置實現(xiàn)(跟蹤返回值類型)

    本文主要介紹了C++返回值類型后置實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

宁武县| 寿宁县| 稷山县| 肇州县| 铜梁县| 宣化县| 鹤庆县| 喀喇沁旗| 临安市| 保德县| 高平市| 东乡县| 蒙阴县| 金山区| 资兴市| 巨鹿县| 日喀则市| 玉溪市| 石台县| 凌源市| 彩票| 收藏| 乌什县| 长顺县| 吕梁市| 兴文县| 鸡泽县| 普格县| 肇州县| 黄平县| 长岭县| 四川省| 白沙| 马尔康县| 红桥区| 鄂州市| 甘孜| 屏南县| 安阳市| 乡城县| 兴海县|