# include & lt字符串& gt
使用命名空間std
類CGobang //棋子類
{
私人:
char chSort//棋子的類別
int nWin//贏棋的數量
int nLose//輸棋次數
靜態int nDraw//抽簽次數
靜電充電電路板[3][3];//棋盤
靜態int nSize//棋盤的大小nSize X nSize
公共:
CGobang(char chsort) //構造函數,確定海賊王的類別。
{
chSort = chsort
nWin = nLose = nDraw = 0;
}
void play turn(void);//取1移動。
int Judge();//判斷它們是否連成壹條線,如果是,返回1,否則返回0。
void Win(無效);//贏棋
void Lose(無效);//輸棋
靜態空畫(void);//繪制
void PrintInfo(void);//輸出整體情況
靜態空印刷板(void);//輸出棋盤
static int get full(void);//判斷棋盤是否滿了棋子。
靜態void initial board(void);//初始化棋盤
};
char CGO bang::ach board[3][3];
int CGO bang::nSize = 3;
int CGO bang::nDraw = 0;
void CGobang::Draw()
{
cout & lt& lt" \ n \ n \ t \鐵!\ n \ n ";
ndraw++;
}
voidccgobang::initial board()//初始化棋盤。
{
for(int I = 0;我& ltnSizei++)
for(int j = 0;j & ltnSizej++)
ach board[I][j]=“”;
}
voidccgobang::print board()//輸出棋盤
{
cout & lt& ltendl
cout & lt& lt" 1 2 3 " & lt;& ltendl
cout & lt& lt" 1 " & lt;& ltach board[0][0]& lt;& lt" | " & lt& ltach board[0][1]& lt;& lt" | " & lt& ltach board[0][2]& lt;& ltendl
cout & lt& lt"-|-|-" & lt;& ltendl
cout & lt& lt" 2 " & lt& ltach board[1][0]& lt;& lt" | " & lt& ltach board[1][1]& lt;& lt" | " & lt& ltach board[1][2]& lt;& ltendl
cout & lt& lt"-|-|-" & lt;& ltendl
cout & lt& lt" 3 " & lt& ltach board[2][0]& lt;& lt" | " & lt& ltach board[2][1]& lt;& lt" | " & lt& ltach board[2][2]& lt;& ltendl
cout & lt& ltendl
cout & lt& ltendl
}
Int CGobang::GetFull() //判斷棋盤是否滿了棋子,如果是,返回1。
{
for(int I = 0;我& ltnSizei++)
for(int j = 0;j & ltnSizej++)
if(achBoard[i][j]!=' ')
返回0;
返回1;
}
Void CGobang::Win() //贏棋。
{
cout & lt& lt" \ n \ n \ t \ t " & lt& ltchSort & lt& lt“黨贏了!\ n \ n ";
nwin++;
}
Void CGobang::Lose() //輸棋
{
nlose++;
}
void CGO bang::play turn(void)//Take 1 move。
{
int nRow,nCol
cout & lt& lt“現在是時候了”
做
{
CIN & gt;& gtnRow & gt& gtnCol//輸入坐標
if(nRow & gt;nSize | | nCol & gtNSize) //判斷坐標出界。
cout & lt& lt輸入坐標越界,x和y的範圍應小於或等於
else if(ach board[nRow-1][nCol-1]!= ' ')//判斷坐標是否合理
cout & lt& lt“棋盤(”
其他
{
ach board[nRow-1][nCol-1]= ch sort;//把棋子放到坐標上。
打破;//退出循環
}
} while(1);
}
Int CGobang::Judge() //判斷棋子是否連成壹條線,如果是,返回1。
{//下面是可能連成壹條線的各種情況。
if(ach board[0][0]= = ch sort & amp;& ampach board[1][1]= = ch sort & amp;& ampachBoard[2][2]==chSort)
返回1;
else if(ach board[2][0]= = ch sort & amp;& ampach board[1][1]= = ch sort & amp;& ampachBoard[0][2]==chSort)
返回1;
else if(ach board[0][0]= = ch sort & amp;& ampach board[1][0]= = ch sort & amp;& ampachBoard[2][0]==chSort)
返回1;
else if(ach board[0][1]= = ch sort & amp;& ampach board[1][1]= = ch sort & amp;& ampachBoard[2][1]==chSort)
返回1;
else if(ach board[0][2]= = ch sort & amp;& ampach board[1][2]= = ch sort & amp;& ampachBoard[2][2]==chSort)
返回1;
else if(ach board[0][0]= = ch sort & amp;& ampach board[0][1]= = ch sort & amp;& ampachBoard[0][2]==chSort)
返回1;
else if(ach board[1][0]= = ch sort & amp;& ampach board[1][1]= = ch sort & amp;& ampachBoard[1][2]==chSort)
返回1;
else if(ach board[2][0]= = ch sort & amp;& ampach board[2][1]= = ch sort & amp;& ampachBoard[2][2]==chSort)
返回1;
其他
返回0;//如果沒有連成壹條線,則返回0。
}
Void CGobang::PrintInfo(void) //打印大致情況。
{
cout & lt& lt" Side " & lt& ltchSort & lt& lt“方* * *打算贏”
}
Void PrintRule(void) //打印規則
{
cout & lt& lt" \ t \ t \歡迎來到三子朱利安遊戲!"& lt& ltendl & lt& ltendl
cout & lt& lt" \遊戲規則:"
cout & lt& lt" \t1。每1步輸入方格的x、y坐標下棋,回車\ n ";
cout & lt& lt" \t2。如果有1條邊,前三塊連成壹條線,則判定勝者\ n ";
cout & lt& lt" \t3。當棋盤上已滿棋子但仍無贏家時,為和棋\ n ";
cout & lt& lt" \t4。x黨第壹\ n ";
cout & lt& lt" \ n \ n \ t \請按任意鍵開始下棋!\ n \ n ";
}
int judge play(CGO bang & amp;西得克斯、高邦和。SideO)//1每壹步的輸贏,有結果就返回1。
{
如果(SideX。Judge()) //X勝。
{
SideX。win();
SideO。lose();
返回1;
}
Else if(SideO。Judge()) //O勝。
{
SideO。win();
SideX。lose();
返回1;
}
其他
返回0;
}
無效遊戲(CGobang & amp西得克斯、高邦和。SideO) //開始遊戲
{
while(1)
{
CGO bang::print board();//輸出棋盤
SideX。play turn();//x方下棋
If(JudgePlay(SideX,SideO)) //判斷妳是贏是輸。
打破;
If(CGobang::GetFull()) //判斷是否平局。
{
CGO bang::Draw();
打破;
}
CGO bang::print board();//輸出棋盤
SideO。play turn();//O下棋。
If(JudgePlay(SideX,SideO)) //判斷妳是贏是輸。
打破;
If(CGobang::GetFull()) //判斷是否平局。
{
CGO bang::Draw();
打破;
}
}
}
int main(void)
{
CGobang SideX('X '),SideO(' O ');//定義兩個棋子類對象,分別代表X方和O方。
print rule();
CIN . get();
字符串strChoice
做
{
CGO bang::initial board();//初始化棋盤
Play(SideX,SideO);//開始下壹個遊戲
cout & lt& lt"您想繼續嗎(是/否)?";
CIN & gt;& gtstrChoice
} while(str choice = = " Y " | | str choice = = " Y ");
SideX。PrintInfo();
SideO。PrintInfo();
cout & lt& lt" \ n \ n \歡迎再次使用三子朱利安遊戲!"& lt& ltendl & lt& ltendl
返回0;
}