using namespace std;#include#includeclass Game{public: Game(); void print..._c++井字棋人机">搜索查看编辑修改首页UNITYNODEJSPYTHONAIGITPHPGOCEF3JAVAHTMLCSS搜索羊村懒王 这个屌丝很懒,什么也没留下! 关注作者热门标签jqueryHTMLCSSPHPASPPYTHONGOAICC++C#PHOTOSHOPUNITYiOSandroidvuexml爬虫SEOLINUXWINDOWSJAVAMFCCEF3CADNODEJSGITPyppeteerarticle热门文章1开放API接口签名认证_一般网站签名时间误差2OpenStack高级控制服务之使用编配服务(Heat)实现自动化部署云主机_heat编排服务3Manjaro安装与软件硬件基本配置(保姆级)_manjaro孤儿包4Java开发最佳实践手册全网独一份,程序员翻身之路_java后端开发实习手册5spring data elasticsearch批量更新文档的某个字段_elasticsearchtemplate 批量更新6Docker和docker-compose基础入门及应用部署_docker部署和dockercompose7Docker命令(涵盖90%)_docker run image825 岁,毕业写前端的这三年_毕业3年前端一年15w算什么水平9Docker Compose_yaml depends_on 不起作用10codeforces每日5题(均1500)-第十一天_yxoryq当前位置: 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博客】推荐阅读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);}