二、具體**實現
三子棋又叫九宮棋、圈圈叉叉、一條龍、井字棋等。
三子棋遊戲規則:三子連成一片即為贏,如果雙方都沒有連成線,即為平局。
我們要實現乙個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檔...