欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)井字棋游戲

 更新時(shí)間:2020年07月31日 08:35:21   作者:L...P  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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)文章

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

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

    這篇文章主要介紹了簡(jiǎn)要對(duì)比C語言中的dup()函數(shù)和dup2()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C++聚合體初始化aggregate initialization詳細(xì)介紹

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

    這篇文章主要介紹了C++聚合體初始化aggregate initialization,C++有很多初始化對(duì)象的方法。其中之一叫做 聚合體初始化(aggregate initialization) ,這是聚合體專有的一種初始化方法
    2023-02-02
  • Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

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

    這篇文章主要為大家介紹了在Qt數(shù)據(jù)庫應(yīng)用開發(fā)中的一些經(jīng)驗(yàn)總結(jié),以及一些組件的使用介紹。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • c++中用TINYXML解析XML文件

    c++中用TINYXML解析XML文件

    這篇文章主要介紹了c++中如何用TINYXML解析XML文件,文中案例非常詳細(xì),幫助大家更好的了解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 最新評(píng)論