C語言 實現簡單的三子棋遊戲

2021-10-12 03:19:14 字數 4160 閱讀 5806

二、具體**實現

三子棋又叫九宮棋、圈圈叉叉、一條龍、井字棋等。

三子棋遊戲規則:三子連成一片即為贏,如果雙方都沒有連成線,即為平局。

我們要實現乙個3×3的棋盤,就需要定義乙個3行3列的陣列,但是陣列的下標從0開始,玩家選擇落子座標很不方便,所以要定義乙個4×4的陣列,第0行第0列不使用,如下圖紅框內的行和列不使用。這樣就方便玩家選擇落子座標。

三子棋的規則很簡單,只要判斷每一行、每一列、對角線中是否有連成線的,即為贏。

**思路:

1、判斷是否有相同的行並且不能為空格(陣列初始化為空格)。

2、判斷是否有相同的列並且不能為空格。

3、判斷主次對角線是否相同並且不能為空格。

4、棋盤下滿後是否為平局。

**如下:

//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char

iswin

(char map[rows]

[cols]

,int row,

int col)

}//判斷列

for(j =

1; j < col; j++)}

//判斷主對角線

if(map[1]

[1]== map[2]

[2]&& map[2]

[2]== map[3]

[3]&& map[1]

[1]!=

' ')

//判斷次對角線

if(map[1]

[3]== map[2]

[2]&& map[2]

[2]== map[3]

[1]&& map[1]

[3]!=

' ')

//判斷是否為平局

if(ret ==0)

else

}

注意:

1、三個值比較時不可以使用連等,==是關係操作符,==是從左到右進行運算的,計算表示式 a == b == c 時,首先會進行邏輯運算 a == b得出邏輯值1或0,得到的結果作為返回值,然後進行邏輯運算 「返回值」 == c 得出邏輯值1或0,作為整個表示式的返回值。所以不能這樣用。

2、判斷完是否平局後,要加乙個else,返回乙個字元,不然編譯器會報錯:因為編譯器認為還有一種情況:當所有的if都不滿足時,沒有返回值,所以要加乙個else返回乙個對結果沒有影響的字元。

#include

#include

#include

#include

#define row 3

#define col 3

#define rows row+1

#define cols col+1

//初始化棋盤

void

initmap

(char map[

][cols]

,int row,

int col)

;//列印棋盤

void

displaymap

(char map[

][cols]

,int row,

int col)

;//玩家落子

void

playermove

(char map[

][cols]

,int row,

int col)

;//電腦落子

void

computermove

(char map[

][cols]

,int row,

int col)

;//判斷棋盤是否滿,0表示滿,1表示未滿

intisfull

(char map[

][cols]

,int row,

int col)

;//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char

iswin

(char map[

][cols]

,int row,

int col)

;

#define _crt_secure_no_warnings 1

#include

"game.h"

void

menu()

void

game()

else

if(ret ==

'p')

computermove

(map, rows, cols)

;//電腦落子

ret =

iswin

(map, rows, cols);if

(ret ==

'0')

}while

(isfull

(map,rows,cols));

//棋盤已滿,結束迴圈

}void

test()

}while

(input);}

intmain()

#define _crt_secure_no_warnings 1

#include

"game.h"

void

initmap

(char map[

][cols]

,int row,

int col)}}

void

displaymap

(char map[

][cols]

,int row,

int col)

}printf

("\n");

if(i < row -1)

}printf

("\n");

}}void

playermove

(char map[

][cols]

,int row,

int col)

else

}else

}displaymap

(map, rows, cols);}

void

computermove

(char map[

][cols]

,int row,

int col)

}displaymap

(map, rows, cols);}

//判斷棋盤是否滿,0表示滿,1表示未滿

intisfull

(char map[

][cols]

,int row,

int col)}}

if(count == row * col)

else

}//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char

iswin

(char map[rows]

[cols]

,int row,

int col)

}//判斷列

for(j =

1; j < col; j++)}

//判斷主對角線

if(map[1]

[1]== map[2]

[2]&& map[2]

[2]== map[3]

[3]&& map[1]

[1]!=

' ')

//判斷次對角線

if(map[1]

[3]== map[2]

[2]&& map[2]

[2]== map[3]

[1]&& map[1]

[3]!=

' ')

//判斷是否為平局

簡單三子棋遊戲 c語言實現

寫乙個三子棋,我們需要先建立兩個原始檔和乙個標頭檔案,我們分別叫game.c main.c和game.h吧 首先,我們先寫出我們的標頭檔案 首先,我們建立我們的標頭檔案 ifndef game h define game h include include include include inclu...

三子棋遊戲(c語言實現)

一說到寫個三子棋遊戲,首先我們得想到有個棋盤初始化和棋盤列印函式。接下來,玩遊戲階段,人玩遊戲,電腦玩遊戲,各寫乙個函式,每次下完棋都得判斷有沒有人贏了遊戲,若有人贏了,遊戲退出,否則繼續遊戲。在這過程中,還有可能棋盤滿 了,所以寫個判斷棋盤是否滿的的函式,棋盤滿了,程式結束,沒人贏,此時就平局。當...

C語言實現三子棋遊戲

三子棋是乙個簡單的人機對戰遊戲在3 3的棋盤上,只要有一方下的子連成一條直線則顯示遊戲獲勝,遊戲結束。例如 想要用c語言編寫三子棋其實不難,主要把程式設計的思想順利清楚就很容易實現了。編寫三子棋遊戲我們可以先建立乙個 game.h檔案作為標頭檔案,用來宣告函式和定義一些常亮,在定義乙個game.c檔...