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); //游戲開始 int rows = 3,cols = 3; //棋盤大小 bool win1_flag = false; //玩家1獲勝標(biāo)志位 bool win2_flag = false; //玩家2獲勝標(biāo)志位 char pieces[3][3] = {{' ',' ',' '}, {' ',' ',' '}, {' ',' ',' '}};; //初始化 void draw(void) //打印出棋盤 { 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) //游戲開始 { int n=0; //總3*3=9個(gè)輸入位,用于判斷是否填完 bool flag = false; //玩家切換標(biāo)志位 cout << "游戲開始"<<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(); //打印出棋盤 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),以空格隔開:"; cin >>row0>>col0; //重新輸入位置 } pieces[row0-1][col0-1] = 'O'; //棋盤中放置玩家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),以空格隔開:"; cin >>row1>>col1; //重新輸入位置 } pieces[row1-1][col1-1] = 'X'; //棋盤中放置玩家2棋子 } int main(int argc,char** argv) { cout<<"游戲加載中"<<endl; draw(); //打印初始棋盤 game_start(); //開始游戲 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++ win系統(tǒng)如何用MinGW編譯Boost庫
這篇文章主要介紹了C++ win系統(tǒng)如何用MinGW編譯Boost庫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12C++實(shí)現(xiàn)LeetCode(46.全排列)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(46.全排列),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

簡(jiǎn)要對(duì)比C語言中的dup()函數(shù)和dup2()函數(shù)

C++聚合體初始化aggregate initialization詳細(xì)介紹

Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)