using namespace std;#include#includeclass Game{public: Game(); void print..._c++井字棋人机">搜索查看编辑修改首页UNITYNODEJSPYTHONAIGITPHPGOCEF3JAVAHTMLCSS搜索羊村懒王 这个屌丝很懒,什么也没留下! 关注作者热门标签jqueryHTMLCSSPHPASPPYTHONGOAICC++C#PHOTOSHOPUNITYiOSandroidvuexml爬虫SEOLINUXWINDOWSJAVAMFCCEF3CADNODEJSGITPyppeteerarticle热门文章1HP MSA存储 raid组坏了2块硬盘的数据恢复方法_hp msa 2040更换硬盘2头歌工程实训答案-机器学习篇之手写体识别篇_头歌手写体识别答案3linux 查看系统版本及内核_linux 2.6.324为了生活,华为OD待遇确实还不错,确实可以~5Docker Desktop 配置阿里云镜像服务_docker desktop配置阿里云6【从零学习python 】10.Python条件语句和if嵌套详解_python中else后可以嵌套if语句吗7STL - string类8原来C语言也可以面向对象(一)_c语言代码可以具备面向对象的风格吗9宝藏网站推荐-目测当前最强的测试知识库10js生成随机数(数字加字母)_js 随机数字字母当前位置: article > 正文 Easyx-----c++实现控制台井字棋简单人机对弈_c++井字棋人机 作者:羊村懒王 | 2024-02-16 14:03:44 赞踩c++井字棋人机 main.cpp #include"TicTacToe.h"int main() { Game game; game.getWinner(); return 0; } TicTacToe.h #pragma once#include<iostream>using namespace std;#include<array>#include<ctime>class Game{public: Game(); void print(); char getCurrentPlayer(); void getWinner(); bool isDone(int row,int col); void makeMove(); void computer_move(int row, int col);protected: array <array< char, 3 >, 3 > board; int row; int col;}; TicTacToe.cpp #include"TicTacToe.h"Game::Game(){ for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i][j] = '-'; } } this->col = 3; this->row = 3;} void Game::print(){ cout << "\t1\t2\t3\n"; for (int i = 0; i < 3; i++) { cout << i + 1; for (int j = 0; j < 3; j++) { cout << "\t"; cout << board[i][j]; } cout << endl; }} char Game::getCurrentPlayer(){ int i = 0; for (; i < 3; i++)//判断第i行是否全都相同 { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != '-') return board[i][0];//将第i行的内容返回 } for (i = 0; i < 3; i++)//判断第i列是否全都相同 { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != '-') return board[0][i];//将第i列的内容返回 } if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')//判断捺对角线(\)的内容是否全都相同 return board[0][0]; else if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != '-')//判断撇对角线(/)的内容是否全都相同 return board[0][2]; else if (isDone(row,col))//判断是否是平局,如果是平局返回‘q’ return 'q'; else //判断是否还未产生游戏结果,如果还未产生游戏结果返回‘-’ return '-';} void Game::getWinner(){ char a; do { print(); //屏幕上打印一个棋盘 makeMove(); //打印出棋盘之后,玩家开始下棋 a = getCurrentPlayer(); //玩家下完棋后,开始判断游戏结果 if (a != '-') // ‘-’:没人赢 { break; //如果已经分出胜负,跳出循环 } computer_move(row,col); //如果没有分出胜负,电脑下棋 a = getCurrentPlayer(); //下完之后判断游戏结果 } while (a == '-'); if (a == 'X') //判断玩家是否获胜:‘x’代表玩家获胜 printf("Congratulations,you win!\n"); else if (a == 'O') //判断玩家是否获胜:‘o’代表电脑获胜 printf("It's too bad,you lose!\n"); else //判断是否是平局 printf("Draw!\n");} bool Game::isDone(int row,int col){ //判断数组当中每一个元素是否有'-',如果有'-',说明没有满,返回0;否则返回1 int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) if (board[i][j] == '-') //判断是否有'-' return 0; //有'-'返回0 } return 1; //没有'-'返回1} void Game::makeMove(){ int x, y;//先定义两个变量,以便接收玩家下棋的坐标 do { printf("Please input your coordinate:(x,y)!");//提示玩家下棋 scanf("%d%d", &x, &y); //接收玩家所下的位置 if (x >= 1 && x <= 3 && y >= 1 && y <= 3) //判断玩家输入坐标是否有误 if (board[x - 1][y - 1] == '-') //判断玩家输入的位置是否已经被占 { board[x - 1][y - 1] = 'X'; //将玩家输入的位置用‘x’占用 break; } else//玩家输入位置被占,提示玩家重新输入位置 printf("Error!This place was be used!\n"); else//玩家输入坐标有误,直接提示玩家error printf("Error!"); } while (1); }void Game::computer_move(int row,int col){ srand((unsigned long)time(NULL));//利用函数生成随机数 do { int x = rand() % row;//控制随机数小于3并把结果赋给横坐标 int y = rand() % col;//控制随机数小于3并把结果赋给纵坐标 if (board[x][y] == '-')//判断电脑选择的位置是否被占 { board[x][y] = 'O';//将电脑下棋的位置用‘O’占用 break; } } while (1);} 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/94045推荐阅读articleeasyx devc++ 开发具有导出文件夹DLC的瓦片地图编辑器...2. 瓦片的边框利用绘制到 -1 -1 把边框绘制到外部。1. F1保存为 DLC 输出为当前文件目录下。3. 利用 +... 赞踩articleeasyx.h中的各种函数_easyx.h库代码大全...文章转载自@鹰之唳#pragma once#ifndef WINVER#define WINVER 0x0400 // ... 赞踩articleEasyX(EGE)全部函数及使用_easyx.h头文件包含的函数用法...EasyX函数大全_easyx.h头文件包含的函数用法easyx.h头文件包含的函数用法 upd... 赞踩article使用C语言EasyX 创建动态爱心背景_跳动爱心 easyx...使用 EasyX 创建动态爱心背景_跳动爱心 easyx跳动爱心 easyx 简介 在计算机图形... 赞踩articleEasyX图形库基础_#include<easyx.h>...EasyX Graphics Library for C++_#include#include<easyx.h> ... 赞踩articleeasyx 学习笔记(三):图像处理_easyx image...easyx 学习笔记_easyx imageeasyx image 学习视频【C/C++/Eas... 赞踩articleC++ 之 Visual Studio 搭建 EasyX Graphics Library 图形库环...C++ 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。本节介绍,在 Visual Studio 中配置E... 赞踩article解决visual studio 打开easyx时无法显示控制台问题_vs easyx 控制台失去焦点...这个问题的原因是,当一个GUI程序(使用图形库)打开窗口时,操作系统会自动将控制台窗口最小化。这是系统的默认行为,以免屏... 赞踩相关标签算法数据结构easyx函数c++开发语言c语言学习笔记visual studioEasyX图形库graphics.hide
赞
踩
main.cpp
#include"TicTacToe.h"int main() { Game game; game.getWinner(); return 0; }
TicTacToe.h
#pragma once#include<iostream>using namespace std;#include<array>#include<ctime>class Game{public: Game(); void print(); char getCurrentPlayer(); void getWinner(); bool isDone(int row,int col); void makeMove(); void computer_move(int row, int col);protected: array <array< char, 3 >, 3 > board; int row; int col;};
TicTacToe.cpp
#include"TicTacToe.h"Game::Game(){ for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i][j] = '-'; } } this->col = 3; this->row = 3;} void Game::print(){ cout << "\t1\t2\t3\n"; for (int i = 0; i < 3; i++) { cout << i + 1; for (int j = 0; j < 3; j++) { cout << "\t"; cout << board[i][j]; } cout << endl; }} char Game::getCurrentPlayer(){ int i = 0; for (; i < 3; i++)//判断第i行是否全都相同 { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != '-') return board[i][0];//将第i行的内容返回 } for (i = 0; i < 3; i++)//判断第i列是否全都相同 { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != '-') return board[0][i];//将第i列的内容返回 } if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')//判断捺对角线(\)的内容是否全都相同 return board[0][0]; else if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != '-')//判断撇对角线(/)的内容是否全都相同 return board[0][2]; else if (isDone(row,col))//判断是否是平局,如果是平局返回‘q’ return 'q'; else //判断是否还未产生游戏结果,如果还未产生游戏结果返回‘-’ return '-';} void Game::getWinner(){ char a; do { print(); //屏幕上打印一个棋盘 makeMove(); //打印出棋盘之后,玩家开始下棋 a = getCurrentPlayer(); //玩家下完棋后,开始判断游戏结果 if (a != '-') // ‘-’:没人赢 { break; //如果已经分出胜负,跳出循环 } computer_move(row,col); //如果没有分出胜负,电脑下棋 a = getCurrentPlayer(); //下完之后判断游戏结果 } while (a == '-'); if (a == 'X') //判断玩家是否获胜:‘x’代表玩家获胜 printf("Congratulations,you win!\n"); else if (a == 'O') //判断玩家是否获胜:‘o’代表电脑获胜 printf("It's too bad,you lose!\n"); else //判断是否是平局 printf("Draw!\n");} bool Game::isDone(int row,int col){ //判断数组当中每一个元素是否有'-',如果有'-',说明没有满,返回0;否则返回1 int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) if (board[i][j] == '-') //判断是否有'-' return 0; //有'-'返回0 } return 1; //没有'-'返回1} void Game::makeMove(){ int x, y;//先定义两个变量,以便接收玩家下棋的坐标 do { printf("Please input your coordinate:(x,y)!");//提示玩家下棋 scanf("%d%d", &x, &y); //接收玩家所下的位置 if (x >= 1 && x <= 3 && y >= 1 && y <= 3) //判断玩家输入坐标是否有误 if (board[x - 1][y - 1] == '-') //判断玩家输入的位置是否已经被占 { board[x - 1][y - 1] = 'X'; //将玩家输入的位置用‘x’占用 break; } else//玩家输入位置被占,提示玩家重新输入位置 printf("Error!This place was be used!\n"); else//玩家输入坐标有误,直接提示玩家error printf("Error!"); } while (1); }void Game::computer_move(int row,int col){ srand((unsigned long)time(NULL));//利用函数生成随机数 do { int x = rand() % row;//控制随机数小于3并把结果赋给横坐标 int y = rand() % col;//控制随机数小于3并把结果赋给纵坐标 if (board[x][y] == '-')//判断电脑选择的位置是否被占 { board[x][y] = 'O';//将电脑下棋的位置用‘O’占用 break; } } while (1);}