QT实现简单的2d游戏地图编辑器

这篇博客介绍了一个使用QT编写的简单2D游戏地图编辑器,它允许通过键盘和鼠标操作生成和编辑二维数组,进而将数据保存到文件。编辑器包括添加和删除地图数据、自定义地图大小、选择保存路径等功能。尽管功能相对基础,但已足以用于小型2D游戏。博主分享了程序的主要代码,并欢迎反馈和建议。
摘要由CSDN通过智能技术生成
QT实现简单的2d游戏地图编辑器

我写的这个地图编辑器主要实现了用键盘配合鼠标点击屏幕,间接生成一个二维数组,再将这个二维数组写入到文件中的操作,以直观、方便地对二维数组进行更改,以用作2d游戏的地图数组。

该程序最多向数组中添加19种(0-18)不同的数据。

运行效果:
创建初始地图界面:
在这里插入图片描述

地图编辑界面:
在这里插入图片描述

将地图数据写入到文件后地图信息界面:
在这里插入图片描述
除基本功能外,在程序中还实现了在按下移动鼠标左键时添加数据、按下移动鼠标右键时删除数据、自定义地图大小、使用文件对话框选择要保存的文件路径、将地图文件另存为、查看当前地图信息的功能。

虽然这些功能看似很多,且拥有这些功能的编辑器已经可以将地图数据用在2d小游戏的地图上,但我知道,这些距离一个专业、商业的2d编辑器还有着很远的差距。即使将比较对象换做“成熟好用功能齐全的2d编辑器”,该程序依然差了很多。

比如可以缩放编辑界面大小功能、自定义数值对应自定义颜色功能、添加数值功能、添加图片代表数值功能、添加背景图功能、选区设置数值功能等,这些功能的实现都是很复杂的,也是现在的我没有办法做到的。

编译环境:
Windows Qt 5.9.0 Qt Creator 4.3.0

思路:
将鼠标坐标分为地图宽高相乘个格子的区域,结构数组存储所有格子的格子坐标和对应的数值的信息,鼠标在点击时,将该区域格子在结构数组中的信息根据当前所选键值改变,并将数组中的信息按照颜色对应关系绘制矩形和数字到界面上。
使用键盘的0-9键代表0-9的地图数组中的数值,a-i代表10到18的地图数组中的数值,鼠标右键代表预设的地图默认数值。

下面展示程序的主要代码,如果你想查看项目的所有代码,可以私信博主发给你。


代码:

MainWindow.h 创建初始地图界面类头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
   
class Widget;
}

class Widget : public QWidget
{
   
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

MainWindow.cpp 创建初始地图界面类函数实现:

#include "MainWindow.h"
#include "ui_widget.h"
#include <QPushButton>
#include "mainfrom.h"
#include <QMouseEvent>  //鼠标事件

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
   
    ui->setupUi(this);

    //设置固定窗口大小
    setFixedSize(900,600);

    //设置标题
    setWindowTitle("2d地图编辑器");

    //监听确定按钮点击
    connect(ui->pushButton,&QPushButton::clicked,[=](){
   
        this->close();          //当前窗口关闭
        //将文本框中的内容转换为数字传入新窗口对象构造函数中
        MainFrom *from = new MainFrom(ui->lineEdit->text().toInt(), ui->lineEdit_2->text().toInt(), ui->lineEdit_3->text().toInt());
        from->show();           //打开新窗口界面
    });
}

Widget::~Widget()
{
   
    delete ui;
}

mainfrom.h 地图编辑界面类头文件:

#ifndef MAINFROM_H
#define MAINFROM_H

#include <QMainWindow>
#include <QPainter>     //画家类
#include <QLabel>       //标签
#include <QMouseEvent>  //鼠标事件
#include <Qvector>      //动态数组

class MainFrom : public QMainWindow
{
   
    Q_OBJECT
private:
    //绘图事件
    void paintEvent(QPaintEvent *);
    //鼠标按下事件
    void mousePressEvent(QMouseEvent *event);
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event);
    //键盘事件
    void keyPressEvent(QKeyEvent *ev);

    int MX = 0, MY = 0;         //最大宽高

    //创建标签控件
    QLabel *lab = new QLabel(this);

    int mi = 0, mj = 0;         //用于循环和确定地图坐标

    int key = 0;                //用于控制绘制的物体的属性的键值

    struct DataAttr             //数据值和颜色结构
#ifndef MAINFROM_H
#define MAINFROM_H

#include <QMainWindow>
#include <QPainter>     //画家类
#include <QLabel>       //标签
#include <QMouseEvent>  //鼠标事件
#include <Qvector>      //动态数组

class MainFrom : public QMainWindow
{
   
    Q_OBJECT
private:
    //绘图事件
    void paintEvent(QPaintEvent *);
    //鼠标按下事件
    void mousePressEvent(QMouseEvent *event);
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event);
    //键盘事件
    void keyPressEvent(QKeyEvent *ev);

    int MX = 0, MY = 0;         //最大宽高

    //创建标签控件
    QLabel *lab = new QLabel(this);

    int mi = 0, mj = 0;         //用于循环和确定地图坐标

    int key = 0;                //用于控制绘制的物体的属性的键值

    struct DataAttr             //数据值和颜色结构
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值