今天接觸到了小時候經常玩的乙個遊戲——三子棋,實現的過程中有好多東西自己根本想不到,或許是**量太少,經驗不夠吧,反正覺得挺不容易的。下面放上我的**以及思路。
char ret = 0;//定義乙個接收判斷誰贏的返回字元變數
char board[3][3] = ;//用二維陣列定義表示棋盤
void menu();//選單
void game();//遊戲
void initboard(char board[3], int row, int col);//初始化棋盤
void showboard(char board[3], int row, int col);//顯示棋盤
void playermove(char board[3], int row, int col);//玩家操作
void computermove(char board[3], int row, int col);//電腦操作
char iswin(char board[3], int row, int col);//判斷輸贏
static int full(char board[3], int row, int col)//判斷棋盤是否放滿
ret接收的返回值有四種分別是 空格,大寫字母x,大寫字母o和p,ret為x則證明玩家獲勝,是o則電腦勝利,p則表示平局。
row和col為接收棋盤大小的兩個形參。
void menu()
它的樣子是這樣的,很low但是現階段我滿足了,哈哈哈!
;//用二維陣列定義表示棋盤
initboard(board, 3, 3);//初始化棋盤,讓棋盤為空
showboard(board, 3, 3);//顯示棋盤
while (1)//
computermove(board, 3, 3);
showboard(board, 3, 3);
ret = iswin(board, 3, 3);
if (ret != ' ')
}if (ret == 'x')
if (ret == 'o')
if (ret == 'p')
}每次玩家和電腦進行操作後都要對ret的值進行判斷,ret不是空格則遊戲結束,跳出while迴圈判斷結果並進行輸出。
棋盤初始化
void initboard(char board[3], int row, int col)
memset是乙個記憶體清零的函式它的標頭檔案是#include
使用方法:memset(void s, int ch, size_t n);
這裡s表示的是你想要給誰記憶體清零,ch表示你想把他變成什麼,size就很明顯是說想要改變多少記憶體裡的東西。
顯示棋盤
棋盤的樣子
} putchar('\n');//每一行打完後使用putchar進行換行
if (i < row - 1)//同理對每行的分隔符進行列印
}putchar('\n');
} }}
定義兩個變數i和j來控制列印棋盤,i控制行,j控制列。
通過觀察棋盤樣子我們發現只需要打兩個豎行和橫行,由於是從0開始,所以控制當i和j分別小於row-1和col-1時進行列印棋盤格仔。
玩家操作
void playermove(char board[3], int row, int col)
else//當該位置不為空,提示重新輸入
}else//不滿足棋盤條件,提示輸入不合理}}
我們知道在陣列中陣列下標是從0開始的,可是現實感官中通常從1開始,所以在對每一格進行賦值是需要i-1和j-1.
電腦操作
電腦操作是隨機獲取乙個空位置進行下棋
void computermove(char board[3], int row, int col)
}}
在這裡我定義了乙個返回值為char型別的函式,輸出輸贏在game()中進行。
當每一行,每一列或每一斜行都為相同字元且不為空時返回這個字元。
當棋盤滿的時候還沒有出現當每一行,每一列或每一斜行都為相同字元時返回p
char iswin(char board[3], int row, int col)
//列if (board[0][i] == board[1][i] && board[1][i] == board[2][i]&& board[0][i] != ' ')
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]&& board[0][0] != ' ')
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]&& board[0][0] != ' ')
//平局
if (full(board, row, col) == 1)
}//沒有贏也沒有平局
return ' ';
}
判斷棋盤是否放滿
對棋盤進行遍歷,若還有位置為空則為放滿,返回0,棋盤放滿則返回1
static int full(char board[3], int row, int col)
} }return 1;
}
#include#include#include#includeint main()
} while (input);
return 0;
}
到這裡我的三子棋小遊戲也就完全結束了,在寫這個遊戲中我學會了如何對二維陣列進行遍歷,加強了我對迴圈的使用,最後放一波完整的遊戲截圖吧!
小遊戲 三子棋
c語言 實現最簡單的三子棋 無人工智慧,介面簡單,手動輸入座標x x 如下 環境 vs2015 game.h pragma once ifndef game h define game h include include include include define row 3 define col...
三子棋小遊戲
簡單版的三子棋遊戲並不難,就只是運用二維陣列和呼叫各個函式。現在來分析遊戲的思路,首先在螢幕上列印乙個選擇遊戲的選單,這個簡單,就只需要呼叫乙個函式輸出就可以了,玩家選擇開始遊戲就進入遊戲函式,首先要初始化二維陣列,可以用memset 來進行初始化,然後在螢幕上列印出三子棋的棋盤,這個也簡單,知識簡...
三子棋小遊戲
game.h define crt secure no warnings ifndef game h define game h include include include include define rows 3 行數 define cols 3 列數void initboard char ...