如何用C語言實現三子棋遊戲?收下這份源碼,小白也能學得會!

不知道你們有沒有玩過三子棋遊戲呢?今天小編就來分享C語言是如何實現三子棋遊戲的,供你們參考一下,具體內容以下。編程


 

首先,咱們從main函數開始寫起,分析遊戲的總體邏輯數組

int main()函數

{學習

int input=0;spa

srand((unsigned int)time(NULL));3d

do指針

{視頻

menu();blog

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循環來實現總體邏輯,首先要展現遊戲菜單界面,即要編寫菜單menu()函數:

void menu()

{

printf("************************************\n");

printf("******** 1.play  0.exit *********\n");

printf("************************************\n");

}

展現以後,經過用戶輸入的值來判斷用戶是要進行遊戲仍是要退出遊戲,使用switch來實現:當用戶輸入1則表示進行遊戲,輸入0表示退出遊戲,而輸入其餘的數字則提示輸入錯誤,從新輸入!

接下來就是要編寫game()函數了:

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()函數和display()函數:

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;

//打印數據

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");

}

}

}

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

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("該座標被佔用,請從新輸入!\n");

}

}

else

{

printf("座標非法,請從新輸入");

}

}

}

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;

}

}

}

此時要注意每當用戶或者電腦走完一步以後要展現棋盤並判斷輸贏,所以還須要寫一個judge()函數:

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';

}

判斷輸贏的條件就是三顆棋子連成一條直線即爲贏,若是到最後用戶和電腦將棋盤下滿而且沒有分出勝負則判爲平局。

最後在game函數中經過switch將judge()函數的返回值進行判斷,是玩家贏仍是電腦贏仍是平局。

注:將數組做爲參數傳遞的時候,必定要記着將數組的大小也傳過去,若是不將數組的大小傳過去的話,在新的函數中計算數組的大小時,使用sizeof(arr)/sizeof(arr[0])會出現問題,由於數組做爲參數傳遞的時候會被降維成指針,指針在32位系統下的大小爲4個字節,假設傳遞的是int類型的數組,則sizeof(arr)/sizeof(arr[0])=1,咱們就不能按照正常的邏輯來實現想要實現的功能了。

以上就是關於對C語言實現三子棋遊戲的詳細介紹,但願對你們的學習有所幫助。


 

若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習書籍:


 

編程學習視頻:

相關文章
相關標籤/搜索