返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++控制台实现简单人机对弈井字棋
  • 806
分享到

C++控制台实现简单人机对弈井字棋

2024-04-02 19:04:59 806人浏览 泡泡鱼
摘要

本文实例为大家分享了c++实现简单人机对弈井字棋的具体代码,供大家参考,具体内容如下 main.cpp #include"TicTacToe.h" int main()  {   

本文实例为大家分享了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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C++控制台实现简单人机对弈井字棋

本文链接: https://lsjlt.com/news/148849.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++控制台实现简单人机对弈井字棋
    本文实例为大家分享了C++实现简单人机对弈井字棋的具体代码,供大家参考,具体内容如下 main.cpp #include"TicTacToe.h" int main()  {   ...
    99+
    2024-04-02
  • C语言实现井字棋游戏(人机对弈)
    井字棋游戏:即三子棋,英文名叫Tic-Tac-Tic,是一种在3*3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边线框,格线排成井字故得名。 题目分析 : 要完成该游戏的...
    99+
    2024-04-02
  • python实现简单的井字棋
    本文实例为大家分享了python实现简单的井字棋的具体代码,供大家参考,具体内容如下 使用python实现井字棋游戏,没有具体算法,只是用随机下棋简单实现: import random board = [['+'...
    99+
    2022-06-02
    python 井字棋
  • C语言实现简单井字棋游戏
    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 游戏截图 源代码 person.h //玩家对战 void person() { int...
    99+
    2024-04-02
  • C#控制台实现简单飞行棋游戏
    本文实例为大家分享了C#控制台实现简单飞行棋游戏的具体代码,供大家参考,具体内容如下 需求分析 1.制作游戏头部:游戏头部介绍 2.绘制地图 使用一维数组装整个地图的路线 如果这...
    99+
    2024-04-02
  • C语言实现简单的井字棋游戏
    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 1.什么是井字棋 井字棋相信大部分人都玩过 规则:双方轮流放子,当某一方的三个子连成一线(行,列,对...
    99+
    2024-04-02
  • python实现人机对战的井字棋游戏
    本文实例为大家分享了python实现人机对战井字棋的具体代码,供大家参考,具体内容如下 游戏简介:在九宫格内进行,如果一方抢先于另一方向(横、竖、斜)连成3子,则获得胜利。游戏中输入...
    99+
    2024-04-02
  • python实现简单的井字棋小游戏
    Python做三子棋游戏,这个是我刚开始了解做Python小游戏的时候第一个项目,因为简单好入手,实现它的过程是我开始摸索Python的GUI界面的入门之路。这个设计也都是按照自己对...
    99+
    2024-04-02
  • C语言实现简易井字棋游戏
    井子棋承载了每个人孩童时的美好时光,小到书本、纸张,大到课桌、墙壁,总能找到井字棋盘的痕迹。今天我们就来实际操作一番,用C语言完成一个简单的井字棋游戏,让我们一起重温美好。 棋盘如下...
    99+
    2024-04-02
  • python怎么实现简单的井字棋小游戏
    这篇文章主要讲解了“python怎么实现简单的井字棋小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现简单的井字棋小游戏”吧!窗口万能的窗口,实现窗口都可以进行简单的修...
    99+
    2023-06-30
  • C#控制台实现飞行棋小游戏
    本文实例为大家分享了C#控制台实现飞行棋小游戏的具体代码,供大家参考,具体内容如下 游戏标题 static void ShowTitle() { ...
    99+
    2024-04-02
  • C#实现控制台飞行棋小游戏
    本文实例为大家分享了C#实现控制台飞行棋小游戏的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic;...
    99+
    2024-04-02
  • python实现简易五子棋游戏(控制台版)
    本文实例为大家分享了python实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 运行效果:  完整代码+注释:  finish = False # 游戏...
    99+
    2024-04-02
  • C语言实现控制台五子棋小游戏
    这是一个用C语言实现的控制台小游戏—-五子棋,棋盘大小和获胜棋子数目是用宏定义的,可以自定义,所以可以轻松改为三子棋、六子棋等等。此游戏设定为人机对战(PVE),电脑走棋是随机的。 ...
    99+
    2024-04-02
  • C#如何实现控制台飞行棋小游戏
    这篇文章将为大家详细讲解有关C#如何实现控制台飞行棋小游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实例为大家分享了C#实现控制台飞行棋小游戏的具体代码,供大家参考,具体内容如下using&nbs...
    99+
    2023-06-20
  • Java实现简单控制台版ATM系统
    本文实例为大家分享了Java实现简单控制台版ATM系统的具体代码,供大家参考,具体内容如下 ATM系统项目 ATM系统要实现的功能 1.查询:账号必须存在,密码(三次机会,不对就锁卡...
    99+
    2024-04-02
  • python怎么实现简易五子棋游戏控制台版
    今天小编给大家分享一下python怎么实现简易五子棋游戏控制台版的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。运行效果:&n...
    99+
    2023-06-30
  • Java如何实现简单控制台版ATM系统
    本篇内容主要讲解“Java如何实现简单控制台版ATM系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现简单控制台版ATM系统”吧!ATM系统项目ATM系统要实现的功能查询:账号必...
    99+
    2023-06-30
  • GO使用socket和channel实现简单控制台聊天室
    使用socket和channel,实现简单控制台聊天室 这里使用socket和channel,演示在GO中如何编写一个简单网络程序 功能分析 聊天室主要功能:用户可以加入/离开...
    99+
    2022-06-07
    Channel GO 聊天室 控制台 socket
  • 基于Django的Admin后台实现定制简单监控页
    我们使用Django的Admin二次定制一个图形化界面,首先我们把语言设置为中文简体. 修改: settings.py LANGUAGE_CODE = 'zh-hans' TIM...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作