本人小白一枚,編寫井字棋遊戲純粹興趣使然,其中必有不當或錯誤之處,還望大佬們批評指正。
初始化棋盤
定義乙個字元陣列,對不同元素賦相應的值,構成棋盤邊框。
//初始化棋盤
void
inimap()
}
編寫其餘相關函式
除了棋盤初始化函式外,還需編寫落子函式、勝負判斷函式、棋盤列印函式等函式。還可以列印分隔線,輸出使更有條理。
在落子函式中,玩家輸入座標(r ,c) 或電腦隨機生成座標(r,c)後,需找到二維座標與一維陣列元素的對應關係:map[i]=map[(r-1)*14+(c+3)*2]。
在勝負判斷函式中,只能用窮舉的方法,不知有無更好的方法,尤其對於棋盤更大,而且是五子棋時。
//玩家落子
void
gameon_1()
//電腦落子
void
gameon_2()
while
(map[
(r-1)*
14+(c+3)*
2]=='o'
||map[
(r-1)*
14+(c+3)*
2]=='x');
printf
("computer's(r,c):%d %d\n"
,r,c)
; map[
(r-1)*
14+(c+3)*
2]=chs_2;
times++
;check()
;prtmap()
;if(flag==1)
printf
("you lost!\n遊戲結束!\n");
separate()
;}//判斷勝負
void
check()
//列印棋盤
void
prtmap()
}//列印分隔線
void
separate()
編寫主函式
由於函式較多,考慮將變數定義為全域性變數,可不必考慮函式引數。
在主函式中先定義乙個判斷遊戲是否開始的變數start,遊戲開始後,迴圈執行落子函式(其餘函式已巢狀在其中)。鑑於迴圈次數不可知,用while迴圈,用全域性變數flag和times判斷。當flag和times不滿足條件時,及時跳出迴圈,以免陷入死迴圈。
注:這裡預設玩家先手,電腦後手。
#include
#define imax 49
int flag=
0,r=
0,c=
0,times=0;
char map[imax]
;char chs_1=
'o',chs_2=
'x';
intmain()
else
if(flag==0)
printf
("the game resulted in a tie!遊戲結束!\n");
}return0;
}
編譯結果
編譯時發現,手機上的c語言編譯器和電腦上的dev-c++均未報錯,但在code::blocks中會報錯:rand未宣告。
經查詢可知,rand()函式需要標頭檔案。
但為何dev-c++中可以不需要該標頭檔案?還請大佬賜教。
執行結果
源**:
#include
#define imax 49
int flag=
0,r=
0,c=
0,times=0;
char map[imax]
;char chs_1=
'o',chs_2=
'x';
//列印棋盤
void
prtmap()
}//初始化棋盤
void
inimap()
}//列印分隔線
void
separate()
//判斷勝負
void
check()
//開始遊戲
//玩家落子
void
gameon_1()
//電腦落子
void
gameon_2()
while
(map[
(r-1)*
14+(c+3)*
2]=='o'
||map[
(r-1)*
14+(c+3)*
2]=='x');
printf
("computer's(r,c):%d %d\n"
,r,c)
; map[
(r-1)*
14+(c+3)*
2]=chs_2;
times++
;check()
;prtmap()
;if(flag==1)
printf
("you lost!\n遊戲結束!\n");
separate()
;}intmain()
else
if(flag==0)
printf
("the game resulted in a tie!遊戲結束!\n");
}return0;
}
井字棋遊戲
三連棋遊戲 兩人輪流在印有九格方盤上劃 或 o 字,誰先把三個同一記號排成橫線 直線 斜線,即是勝者 程式提供隨機演算法和智慧型演算法兩種ai,隨機演算法使用隨機數隨意選擇棋盤上的位置,智慧型演算法通過對每隔落子位置權重的計算,選取最優的落子點。include include include inc...
井字棋遊戲
井字棋,英文名叫tic tac toe,是一種在3 3格仔上進行的連珠遊戲,和五子棋類似,由於棋盤一般不畫邊框,格線排成井字故得名。遊戲需要的工具僅為紙和筆,然後由分別代表o和x的兩個遊戲者輪流在格仔裡留下標記 一般來說先手者為x 任意三個標記形成一條直線,則為獲勝。py100天day7 井字棋這個...
C語言井字棋
include include include include 主要邏輯 使用者資料 棋盤 儲存使用者資料 正好對應3 3的乙個棋盤的九個資料點 每個裡面乙個x,y對應棋盤中的乙個填棋子的位置 struct point char map 14 14 struct point data 4 4 代表九...