C++實(shí)現(xiàn)井字棋游戲
本文實(shí)例為大家分享了C++實(shí)現(xiàn)井字棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
初步實(shí)現(xiàn)雙玩家輸入,操作游戲.
下一步將實(shí)現(xiàn)人機(jī)博弈.
#include<iostream>
using namespace std;
void Player1(void); //玩家1輸入(操作)函數(shù)
void Player2(void); //玩家2輸入(操作)函數(shù)
void game_judge(void); //輸贏判斷
void game_start(void); //游戲開(kāi)始
int rows = 3,cols = 3; //棋盤(pán)大小
bool win1_flag = false; //玩家1獲勝標(biāo)志位
bool win2_flag = false; //玩家2獲勝標(biāo)志位
char pieces[3][3] = {{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}};; //初始化
void draw(void) //打印出棋盤(pán)
{
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cout<<pieces[i][j];
if(j< cols-1)
cout<<" | ";
}
cout<<"\n";
if (i<rows-1)
cout <<"-----"<<endl;
}
cout <<"\n";
}
void game_start(void) //游戲開(kāi)始
{
int n=0; //總3*3=9個(gè)輸入位,用于判斷是否填完
bool flag = false; //玩家切換標(biāo)志位
cout << "游戲開(kāi)始"<<endl;
while(n<9 & win1_flag == false & win2_flag == false) //未填完,未分出勝負(fù)則繼續(xù)游戲
{
if(flag == false){ //切換到玩家1
cout << "玩家1輸入:"<<endl;
Player1(); //玩家1輸入棋子位置
flag = true; //下一步是玩家2
}
else{ //切換到玩家2
cout << "玩家2輸入:"<<endl;
Player2(); //玩家2輸入棋子位置
flag = false; //下一步是玩家1
}
game_judge(); //判斷勝負(fù)
draw(); //打印出棋盤(pán)
n++; //棋盤(pán)又添了一枚棋子
}
}
void game_judge(void) //判斷勝負(fù)
{
for(int i=0;i<rows;i++){
if(pieces[i][0] == pieces[i][1]& pieces[i][0] == pieces[i][2] & pieces[i][0] != ' ') //判斷橫方向滿3個(gè)相同的棋子
{
if(pieces[i][0] == 'O') //判斷是玩家1的棋子還是玩家2
win1_flag = true; //玩家1獲勝
else
win2_flag = true; //玩家2獲勝
}
if(pieces[0][i] == pieces[1][i]& pieces[1][i] == pieces[2][i] & pieces[0][i] != ' ') //判斷縱方向滿3個(gè)相同的棋子
{
if(pieces[0][i] == 'O') //判斷是玩家1的棋子還是玩家2
win1_flag = true;
else
win2_flag = true;
}
if((pieces[0][0] == pieces[1][1]& pieces[1][1] == pieces[2][2] & pieces[0][0] != ' ') //判斷斜方向滿3個(gè)相同的棋子
|(pieces[0][2] == pieces[1][1]& pieces[1][1] == pieces[2][0] & pieces[2][0] != ' '))
{
if(pieces[1][1] == 'O') //判斷是玩家1的棋子還是玩家2
win1_flag = true;
else
win2_flag = true;
}
}
}
void Player1(void)
{
int row0,col0;
cin>>row0>>col0; //玩家1輸入位置
while(pieces[row0-1][col0-1] != ' ') //判斷該位置是否已有棋子,或不存在
{
cout<<"該位置輸入錯(cuò)誤,請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入行列數(shù)(1-3),以空格隔開(kāi):";
cin >>row0>>col0; //重新輸入位置
}
pieces[row0-1][col0-1] = 'O'; //棋盤(pán)中放置玩家1棋子
}
void Player2(void)
{
int row1,col1;
cin>>row1>>col1; //玩家1輸入位置
while(pieces[row1-1][col1-1] != ' ') //判斷該位置是否已有棋子,或不存在
{
cout<<"該位置輸入錯(cuò)誤,請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入行列數(shù)(1-3),以空格隔開(kāi):";
cin >>row1>>col1; //重新輸入位置
}
pieces[row1-1][col1-1] = 'X'; //棋盤(pán)中放置玩家2棋子
}
int main(int argc,char** argv)
{
cout<<"游戲加載中"<<endl;
draw(); //打印初始棋盤(pán)
game_start(); //開(kāi)始游戲
if(win1_flag == true) //玩家1獲勝
cout<<"玩家1獲勝!"<<endl;
if(win2_flag == true) //玩家2獲勝
cout<<"玩家2獲勝!"<<endl;
if(win1_flag == win2_flag) //均未獲勝,平局
cout<<"平局!"<<endl;
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++標(biāo)準(zhǔn)模板庫(kù)string類(lèi)的介紹與使用講解
今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫(kù)string類(lèi)的介紹與使用講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
C語(yǔ)言函數(shù)棧幀的創(chuàng)建與銷(xiāo)毀詳解
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言函數(shù)棧幀的創(chuàng)建與銷(xiāo)毀,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
詳解C++中的成員訪問(wèn)運(yùn)算符和指針到成員運(yùn)算符
這篇文章主要介紹了C++中的成員訪問(wèn)運(yùn)算符和指針到成員運(yùn)算符,即. 和 ->以及.* 和 ->*的使用方法,需要的朋友可以參考下2016-01-01
基于Matlab實(shí)現(xiàn)繪制3D足球的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)繪制3D足球,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下2022-11-11
C語(yǔ)言實(shí)現(xiàn)文件操作實(shí)例(簡(jiǎn)單圖示講解)
與普通文件載體不同,文件是以硬盤(pán)為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合,文件可以是文本文檔、圖片、程序等等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)文件操作實(shí)例的相關(guān)資料,需要的朋友可以參考下2023-02-02
C++ OpenCV實(shí)戰(zhàn)之制作九宮格圖像
本文將為大家介紹如何使用OpenCV C++ 制作九宮格圖像,即將一張圖像均等分成九份,然后將這九個(gè)小塊按一定間隔拷貝到新畫(huà)布上就可以啦。感興趣的可以動(dòng)手試一試2022-01-01

