用C語言實現簡單 三子棋(井字棋)小遊戲
阿新 • • 發佈:2018-11-29
函式頭
放在標頭檔案裡
#ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define ROW 3 //行為3 #define COL 3 //列為3 void InitBoard(char board[ROW][COL],int row,int col);//初始化棋盤的函式 void DisplayBoard(char board[ROW][COL],int row,int col);//列印棋盤函式 void PlayerMove(char board[ROW][COL],int row,int col);//玩家出棋函式 void ComputerMove(char board[ROW][COL],int row,int col);//電腦出棋函式 int IsFull(char board[ROW][COL],int row,int col);//判斷棋盤是否滿棋 int IsWin(char board[ROW][COL],int row,int col); void game(); #endif //__GAME_H__
主函式
選擇1進入遊戲函式 開始遊戲
選擇零 則退出遊戲
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void mune() { printf("\n\n\n█████████████████████\n"); printf("█████ 經典③子棋遊戲 ████\n"); printf("█████████████████████\n"); printf("███████ 1.開始遊戲 ██████\n"); printf("███████ 0.退出遊戲 ██████\n"); printf("█████████████████████\n"); } int main() { int input = 0; do { srand((unsigned int)time(NULL));//生成隨機數函式 mune( );//遊戲選單函式 printf("請輸入數字進行選擇:\n"); scanf("%d",&input); switch(input) { case 1: game( ); break; case 0: printf("退出遊戲!"); break; default: printf("輸入錯誤,請重新輸入:\n"); } }while(input); return 0; }
遊戲函式
初始化棋盤函式————列印原始棋盤函式————電腦出棋函式—與—玩家出棋函式(迴圈呼叫每呼叫一次判斷一次輸贏)————判斷輸贏函式(中間巢狀判斷是否棋盤已滿的函式決定平局)
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void game() { char ret = '0'; char board[ROW][COL] = {0};//建立二維陣列 InitBoard(board,ROW,COL);//呼叫初始化棋盤的函式 DisplayBoard(board,ROW,COL);//列印原始棋盤 //下棋過程 do { printf("▁▂▃電腦已出棋~該您出棋啦▃▂▁\n"); ComputerMove(board,ROW,COL);//電腦出棋 DisplayBoard(board,ROW,COL);//列印棋盤顯示電腦出的棋 ret = IsWin(board,ROW,COL);//根據判斷輸贏函式的返回值來決定誰贏誰輸 if(ret !=' ') //返回空格繼續下棋返回0電腦贏,返回x玩家贏 { //返回空格繼續下棋 返回p為平局 break; } PlayerMove(board,ROW,COL);//到玩家出棋 DisplayBoard(board,ROW,COL);//列印棋盤 ret = IsWin(board,ROW,COL); if(ret !=' ') { break; } }while(ret = ' '); //不等於空格跳出後判斷誰贏 ret = IsWin(board,ROW,COL); if(ret == 'p') { printf("\n▁▂▃恭喜您和聰明的電腦打成平手啦▃▂▁\n"); } else if(ret == '0') { printf("\n▁▂▃很遺憾~電腦取得了勝利▃▂▁\n"); } else if(ret == 'X') { printf("\n▁▂▃恭喜您取得了勝利~再接再厲哦▃▂▁\n"); } } void InitBoard(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i = 0;i<row;i++) { for(j = 0;j<col;j++) { board[i][j] = ' '; } } } void DisplayBoard(char board[ROW][COL],int row,int col) { int i = 0; for(i = 0;i<row;i++) { printf(" %c ┃ %c ┃ %c \n",board[i][0],board[i][1],board[i][2]); if(i != row-1) { printf("━━━┃━━━┃━━━\n"); } } } void ComputerMove(char board[ROW][COL],int row,int col) { while(1) { int x = rand() % row; int y = rand() % col; if(board[x][y] == ' ') { board[x][y] = '0'; break; } } } void PlayerMove(char board[ROW][COL],int row,int col) { int x = 0; int y = 0; while(1) { printf("請輸入一個座標:"); 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] = 'X'; break; } else { printf("抱歉~您輸入的座標已經被電腦搶先了一步,請重新輸入\n"); } } else { printf("您輸入的座標已經超出棋盤的範圍啦~請重新輸入哦\n"); } } } int IsWin(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i = 0;i<row;i++) { if(board[i][0] == board[i][1]&&board[i][1] == board[i][2]&&board[i][0] != ' ') { return board[i][0]; } } for(j = 0;j<col;j++) { if(board[0][j] == board[1][j]&&board[1][j] == board[2][j]&&board[0][j] != ' ') { return board[0][j]; } } if(board[0][0] == board[1][1]&&board[1][1] == board[2][2]&&board[0][0] != ' ') { return board[0][0]; } else if(board[2][0] == board[1][1]&&board[1][1] == board[0][2]&&board[2][0] != ' ') return board[2][0]; else if(IsFull(board,row,col)) return 'p'; else return ' '; } int IsFull(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i = 0;i<row;i++) { for(j = 0;j<col;j++) { if(board[i][j] == ' ') return 0; } } return 1; }