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

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

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

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

1.什么是井字棋

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

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

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

1. 菜單

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

代碼:

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

2. 打印棋盤

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

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

顯示棋盤我們可以寫一個(gè)函數(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í)在旁邊顯示出玩家和電腦所用的棋子。棋盤效果:

由于電腦是隨機(jī)落子的,這樣我們就會用到隨機(jī)數(shù),于是可以在后面加上隨機(jī)數(shù)的種子,為之后的隨機(jī)數(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)計(jì)已占用的格子。

3.游戲開始

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

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

基于此,我們將所有游戲過程寫在一個(gè)死循環(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)并且該位置尚未被落子時(shí),(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. 判斷勝平

為了判斷是否勝利,我們可以寫一個(gè)函數(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 ' ';
}

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

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

3. 電腦落子

電腦是隨機(jī)落子的,于是需要給chess()傳入隨機(jī)的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)隨機(jī)的坐標(biāo)未被落子時(shí)才能使用,所以用死循環(huán)來查找一個(gè)合法的坐標(biāo),當(dāng)找到時(shí)電腦才能落子,之后跳出循環(huán),并刷新棋盤。

4. 判斷負(fù)

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

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

最終游戲界面:

結(jié)束

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

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í)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • C++ 實(shí)現(xiàn)球迷 今日頭條面試題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

花莲市| 泸溪县| 新野县| 广水市| 贺兰县| 临猗县| 盱眙县| 晋江市| 黄冈市| 瓮安县| 班戈县| 阳春市| 简阳市| 水城县| 丹凤县| 马鞍山市| 察雅县| 宜城市| 天长市| 和静县| 精河县| 乐安县| 嘉峪关市| 长治县| 久治县| 诏安县| 唐山市| 教育| 措美县| 延津县| 兴业县| 无锡市| 陇川县| 元江| 沅陵县| 泽库县| 凤城市| 洛川县| 巴彦淖尔市| 山阳县| 和政县|