C++实现井字棋游戏
2022/1/30 17:05:30
本文主要是介绍C++实现井字棋游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++实现井字棋游戏
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; class TicTacToe { private: char currentPlayer; char board[3][3]; public: TicTacToe(); void print(); char getCurrentPlayer(); char getWinner(); bool isDone(); bool isValidMove(int row,int col); void makeMove(int row,int col); void makeAutoMove(); }; TicTacToe::TicTacToe(){ currentPlayer = 'X'; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ board[i][j] = '-'; } } } void TicTacToe::print(){ cout<<" 1 2 3"<<endl;cout<<endl; for(int i=0;i<3;i++){ cout<<i+1<<" "; for(int j=0;j<3;j++){ cout<<board[i][j]<<" "; } cout<<endl;cout<<endl; } } char TicTacToe::getCurrentPlayer(){ return currentPlayer; } char TicTacToe::getWinner(){ //返回赢家信息(’X’ 或 ’O’),如果没有赢家,返回 ’-’ for(int i=0;i<3;i++){ //三棋子横成一排 if(board[i][0] != '-' && board[i][0] == board[i][1] && board[i][1] == board[i][2]) return board[i][0]; //三棋子竖成一排 if(board[0][i] != '-' && board[0][i] == board[1][i] && board[1][i] == board[2][i]) return board[0][i]; } //三棋子斜成一排 if((board[1][1] != '-') && ( (board[0][0] == board[1][1] && board[1][1] == board[2][2])|| (board[0][2] == board[1][1] && board[1][1] == board[2][0]) ) ){ return board[1][1]; }else{ return '-'; } } bool TicTacToe::isDone(){ if(getWinner() != '-'){ return true; }else{ return false; } } bool TicTacToe::isValidMove(int row,int col){ //检查行列值是否在 1-3 之间,如果该位置可用,返回ture,否则返回 false if( row>=1 && row<=3 && col>=1 && col <=3 ){ return true; }else{ return false; } } void TicTacToe::makeMove(int row,int col){ //将指定位置设置为玩家的符号,切换玩家 if(isValidMove(row,col)){ if( board[row-1][col-1] == '-' ){ board[row-1][col-1] = currentPlayer; if(currentPlayer == 'X'){ currentPlayer = 'O'; }else{ currentPlayer = 'X'; } }else{ cout<<"该位置已被占用!"<<endl; } }else{ cout<<"输入的位置无效"<<endl; } } void TicTacToe::makeAutoMove(){ srand(int(time(0))); label: int row = rand()%3+1; int col = rand()%3+1; if( board[row-1][col-1] == '-' ){ board[row-1][col-1] = currentPlayer; if(currentPlayer == 'X'){ currentPlayer = 'O'; }else{ currentPlayer = 'X'; } }else{ goto label; } row = rand()%3+1; col = rand()%3+1; } void testTicTacToe(){ cout<<"您是否想开始游戏?(y/n)"<<endl; char conti; int mode; cin>>conti; TicTacToe tic; while(conti == 'y'){ cout<<"请选择单人模式或者双人模式?(1/2)"<<endl; cin>>mode; if(mode == 1 || mode == 2){ if(mode == 1){ tic.print(); int row,col; bool flag = true; //表征当前玩家为用户或计算机 while(!tic.isDone()){ if(flag){ //当前玩家为用户 cout<<"当前玩家为:"<<tic.getCurrentPlayer()<<endl; cout<<"请按坐标输入您的走步:"; cin>>row>>col; if(tic.getCurrentPlayer() == 'X'){ tic.makeMove(row,col); }else{ tic.makeAutoMove(); } flag = false; }else{ //当前玩家为计算机 cout<<"当前玩家为:"<<tic.getCurrentPlayer()<<endl; tic.makeAutoMove(); flag = true; } tic.print(); } }else{ //mode == 2 tic.print(); int row,col; while(!tic.isDone()){ cout<<"当前玩家为:"<<tic.getCurrentPlayer()<<endl; cout<<"请按坐标输入您的走步:"; cin>>row>>col; tic.makeMove(row,col); tic.print(); } } cout<<"本局结束,胜者为:"<<tic.getWinner()<<endl; }else{ cout<<"请输入正确的模式代码"<<endl; } cout<<"您是否想继续游戏?(y/n)"<<endl; cin>>conti; } } int main(){ testTicTacToe(); return 0; }
这篇关于C++实现井字棋游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享