三子棋小遊戲

2021-09-26 01:23:06 字數 3395 閱讀 3340

今天接觸到了小時候經常玩的乙個遊戲——三子棋,實現的過程中有好多東西自己根本想不到,或許是**量太少,經驗不夠吧,反正覺得挺不容易的。下面放上我的**以及思路。

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 ...