Qt、C++实现五子棋人机对战与本地双人对战(高难度AI,极少代码)

介绍

本项目基于 Qt C++ 实现了一个完整的五子棋游戏,支持 人机对战 和 人人对战 模式,并提供了三种难度选择(简单、中等、困难)。界面美观,逻辑清晰,是一个综合性很强的 Qt 小项目

标题项目核心功能

  1. 棋盘绘制:通过 QPainter 实现网格棋盘和棋子的绘制,使用坐标映射鼠标点击位置到棋盘。
  2. 落子规则:处理玩家或 AI 的落子,并检查是否获胜。
  3. 人机对战:根据难度,AI 实现从简单的随机落子到基于评分系统的智能落子。
  4. 模式切换:支持人人对战和人机对战模式,切换后自动重置棋盘。
  5. 难度选择:通过下拉框提供“简单”、“中等”、“困难”三种难度。

本项目是一个典型的五子棋游戏,涵盖了 Qt 界面开发、绘图、事件处理以及简单的 AI 逻辑实现。通过界面美化和模式选择功能,为玩家提供了良好的用户体验,非常适合作为 Qt 项目的学习和展示案例。

在这里插入图片描述

上代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPainter>
#include <QMouseEvent>
#include <QVector>
#include <QPushButton>
#include <QLabel>
#include <QComboBox>

QT_BEGIN_NAMESPACE
namespace Ui {
   
    class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
   
   
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void paintEvent(QPaintEvent *event) override;  // 绘制棋盘和棋子
    void mousePressEvent(QMouseEvent *event) override;  // 处理鼠标点击落子

private slots:
    void onNewGameClicked();   // 新游戏按钮事件
    void onSwitchModeClicked(); // 切换模式按钮事件
    void onDifficultyChanged(int index); // 选择难度下拉框事件

private:
    Ui::MainWindow *ui;

    // 界面控件
    QLabel *modeLabel;           // 显示当前模式
    QLabel *statusLabel;         // 显示当前轮次
    QComboBox *difficultyComboBox; // 难度选择下拉框
    QPushButton *newGameButton;   // 新游戏按钮
    QPushButton *switchModeButton; // 切换模式按钮

    // 游戏状态
    const int gridSize = 40;      // 棋盘格子大小
    const int boardSize = 15;     // 棋盘行列数
    QVector<QVector<int>> board; // 棋盘状态,0为空,1为黑棋,2为白棋
    bool isBlackTurn = true;      // 当前是否轮到黑棋
    bool isPlayerVsAI = false;    // 是否是人机对战模式
    int difficultyLevel = 1;      // 默认难度为简单模式

    // 内部方法
    void checkWin(int x, int y);  // 检查胜负
    void resetGame();             // 重置棋盘
    void aiMove();                // AI 落子逻辑
    int calculateScore(int x, int y, int player); // 计算分数
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <cstdlib>  // 用于随机数生成(AI 落子)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow), board(boardSize, QVector<int>(boardSize, 0)) {
   
   
    ui->setupUi(this);

    // 设置窗口大小
    setFixedSize(gridSize * boardSize, gridSize * boardSize + 80);

    // 初始化按钮
    newGameButton = new QPushButton("新游戏", this);
    switchModeButton = new QPushButton("切换模式", this);

    // 初始化标签
    statusLabel = new QLabel("当前轮到黑棋", this);
    modeLabel = new QLabel("当前模式:人人对战", this);

    // 初始化难度选择下拉框
    difficultyComboBox = new QComboBox(this);
    difficultyComboBox->addItem("简单");
    difficultyComboBox->addItem("中等");
    difficultyComboBox->addItem("困难");
    difficultyComboBox->setCurrentIndex(difficultyLevel - 1); // 默认选中“简单”

    // 设置控件位置
    newGameButton
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值