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

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

 更新時間:2020年09月05日 11:03:20   作者:F什么琛。  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

C語言:三子棋游戲,供大家參考,具體內(nèi)容如下

首先,我們從main函數(shù)開始寫起,分析游戲的整體邏輯

int main()
{
 int input=0;
 srand((unsigned int)time(NULL));
 do
 {
 menu();
 printf("請選擇:");
 scanf("%d",&input);
 switch(input)
 {
 case 1:
 game();
 break;
 case 0:
 printf("退出游戲\n");
 break;
 default:
 printf("輸入有誤,請重試!\n");
 break;
 }
 }while(input);
 return 0;
}

通過一個do…while循環(huán)來實現(xiàn)整體邏輯,首先要展示游戲菜單界面,即要編寫菜單menu()函數(shù):

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

展示之后,通過用戶輸入的值來判斷用戶是要進行游戲還是要退出游戲,使用switch來實現(xiàn):當(dāng)用戶輸入1則表示進行游戲,輸入0表示退出游戲,而輸入其他的數(shù)字則提示輸入錯誤,重新輸入!
接下來就是要編寫game()函數(shù)了:

void game()
{ 
 char board[ROW][COL] = {0};
 char result='N';
 initBoard(board,ROW,COL);
 display(board,ROW,COL);
 while(1)
 { 
 playerMove(board,ROW,COL);
 display(board,ROW,COL);
 result=judge(board,ROW,COL);
 if (result != 'N')
 {
 break;
 }
 computerMove(board,ROW,COL);
 display(board,ROW,COL);
 result=judge(board,ROW,COL);
 if (result != 'N')
 {
 break;
 }
 }
 switch(result)
 {
 case '*': 
 printf("恭喜你,你贏了!!!\n");
 break;
 case '#':
 printf("很遺憾,電腦贏了?。?!\n");
 break;
 case 'E':
 printf("你和電腦是平局?。。n");
 break;
 default:
 break;
 }
}

首先進入游戲,要初始化棋盤界面并展示給用戶,即編寫initBoard()函數(shù)和display()函數(shù):

void initBoard(char board[ROW][COL],int row,int col)
{
 int i = 0;
 for(; i<row; i++)
 {
 int j=0;
 for(; j <col; j++)
 {
 board[i][j]=' ';
 }
 }
}
void display(char board[ROW][COL],int row,int col)
{
 int i = 0;
 for(; i<row; i++)
 {
 int j=0;
 //打印數(shù)據(jù)
 for(; j<col; j++)
 {
 printf(" %c ",board[i][j]);
 if(j<col-1)
 printf("|");
 }
 printf("\n");
 //打印分割行
 if(i<row-1)
 {
 for(j=0; j<col;j++)
 {
 printf("---");
 if(j<row-1)
 {
  printf("|");
 }
 }
 printf("\n");
 }
 }
}

接下來就要進入循環(huán),實現(xiàn)用戶和電腦下棋的邏輯,用playerMove()函數(shù)和computerMove()函數(shù)來實現(xiàn):

void playerMove(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("該坐標(biāo)被占用,請重新輸入!\n");
 }
 }
 else
 {
 printf("坐標(biāo)非法,請重新輸入");
 }
}

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

此時要注意每當(dāng)用戶或者電腦走完一步之后要展示棋盤并判斷輸贏,因此還需要寫一個judge()函數(shù):

char judge(char board[ROW][COL],int row,int col)
{
 int i=0;
 int j=0;
 for(;i<row;i++)
 {
 if(board[i][0]!=' ' && board[i][0]==board[i][1] && board[i][1]==board[i][2])
 {
 return board[i][0];
 }
 }

 for(;j<col;j++)
 {
 if(board[0][j]!=' ' && board[0][j]==board[1][j] && board[1][j]==board[2][j])
 {
 return board[0][j];
 }
 }
 if(board[0][0]!=' ' && board[0][0]==board[1][1] && board[1][1]==board[2][2])
 {
 return board[0][0]; 
 }
 if(board[0][2]!=' ' && board[0][2]==board[1][1] && board[1][1]==board[2][1])
 {
 return board[0][2]; 
 }

 for (i = 0; i < row; i++)
 {
 int j = 0;
 for (; j < col; j++)
 {
 if (board[i][j] == ' ')
 {
 return 'N';
 }
 }
 }
 return 'E';

}

判斷輸贏的條件就是三顆棋子連成一條直線即為贏,如果到最后用戶和電腦將棋盤下滿并且沒有分出勝負(fù)則判為平局。
最后在game函數(shù)中通過switch將judge()函數(shù)的返回值進行判斷,是玩家贏還是電腦贏還是平局。

注:將數(shù)組作為參數(shù)傳遞的時候,一定要記著將數(shù)組的大小也傳過去,如果不將數(shù)組的大小傳過去的話,在新的函數(shù)中計算數(shù)組的大小時,使用sizeof(arr)/sizeof(arr[0])會出現(xiàn)問題,因為數(shù)組作為參數(shù)傳遞的時候會被降維成指針,指針在32位系統(tǒng)下的大小為4個字節(jié),假設(shè)傳遞的是int類型的數(shù)組,則sizeof(arr)/sizeof(arr[0])=1,我們就不能按照正常的邏輯來實現(xiàn)想要實現(xiàn)的功能了。

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

相關(guān)文章

  • c++string字符串的比較是否相等問題

    c++string字符串的比較是否相等問題

    這篇文章主要介紹了c++string字符串的比較是否相等問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C/C++高精度算法的實現(xiàn)

    C/C++高精度算法的實現(xiàn)

    這篇文章主要介紹了C/C++高精度算法的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言實現(xiàn)代碼雨效果

    C語言實現(xiàn)代碼雨效果

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)代碼雨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 淺析c++ 中const關(guān)鍵字

    淺析c++ 中const關(guān)鍵字

    const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。下面通過本文給大家分享c++ const關(guān)鍵字的相關(guān)知識,一起看看吧
    2017-06-06
  • C++ 實現(xiàn)的通訊錄管理系統(tǒng)詳解

    C++ 實現(xiàn)的通訊錄管理系統(tǒng)詳解

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 基于Qt實現(xiàn)駕校科目考試系統(tǒng)的示例代碼

    基于Qt實現(xiàn)駕??颇靠荚囅到y(tǒng)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于Qt實現(xiàn)駕??颇靠荚囅到y(tǒng),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定幫助,需要的可以參考一下
    2022-07-07
  • C語言常見的文件操作函數(shù)

    C語言常見的文件操作函數(shù)

    這篇文章主要為大家介紹了C語言文件操作函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C/C++中指針和引用之相關(guān)問題深入研究

    C/C++中指針和引用之相關(guān)問題深入研究

    從內(nèi)存分配上看,程序為指針變量分配內(nèi)存區(qū)域,而不為引用分配內(nèi)存區(qū)域,因為引用聲明時必須初始化,從而指向一個已經(jīng)存在的對象。引用不能指向空值
    2013-10-10
  • C語言結(jié)構(gòu)體指針案例解析

    C語言結(jié)構(gòu)體指針案例解析

    這篇文章主要介紹了C語言結(jié)構(gòu)體指針案例解析,本文通過例子來解釋說明了C語言的結(jié)構(gòu)體概念和如何用指針去操作結(jié)構(gòu)體,文章標(biāo)明了詳細(xì)的代碼,需要的朋友可以參考下
    2021-07-07
  • 用C語言實現(xiàn)猜數(shù)字

    用C語言實現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了用C語言實現(xiàn)猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論

贵溪市| 合肥市| 新乡县| 台山市| 富川| 碌曲县| 扬州市| 曲沃县| 石阡县| 武汉市| 太和县| 宁武县| 施秉县| 双峰县| 乌兰察布市| 长宁区| 台东县| 辰溪县| 辽中县| 洪雅县| 莱芜市| 城步| 鹤庆县| 诸暨市| 山丹县| 乐平市| 穆棱市| 当阳市| 大埔区| 象山县| 台北市| 肇源县| 鄢陵县| 阿拉尔市| 禹州市| 织金县| 屯门区| 屯留县| 旌德县| 武陟县| 潮安县|