不知道你們有沒有玩過三子棋遊戲呢?今天小編就來分享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++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習書籍:
編程學習視頻: