Qt项目学习——坦克大战(一)

接触c++和Qt没多久,自己在网上找的坦克大战源码,但实际上相当于是照着人家的代码抄了一遍。能看懂,但自己回想起来啥也没记住,于是想亲自从头做一遍,不会的先百度,再不会就看源码。

虽然很多大佬说做项目之前要先想好框架,便于增加功能。但我是萌新,就以萌新的角度来做一下。

进入正题。坦克大战首先当然是把游戏画面的背景图显示出来,也是第一篇文章的任务:

main.h:设置地图大小和地图块大小。因为会有地图编辑功能,所以除了设置地图大小,还要把地图分为很多块,便于画图实现编辑功能(但暂时不用)。

#ifndef MAIN_H
#define MAIN_H
#define INUM 17//横向地图块数目
#define JNUM 11
#define PICWIDTH 64//地图块图片宽度
#define PICHEIGHT 64
#define CELLWIDTH 64//地图块宽度
#define CELLHEIGHT 64
#define WIDTH 64*17//地图宽度
#define HEIGHT 64*11

//定义并声明全局结构体变量
class Gamemap;
typedef struct{
    Gamemap *gamemap;
}Glo;
extern Glo glo;

#endif // MAIN_H

因为需要很多全局类,就定义了全局结构体备用,其中Gamemap就是地图类,用于在主界面画地图。

main.cpp: 声明全局变量

#include "main.h"
#include "mainwindow.h"
#include 
Glo glo;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h: 在主界面添加绘图事件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include "main.h"
#include "gamemap.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();


private slots:
    void paintEvent(QPaintEvent *event);

private:
    QPainter paint;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //初始化全局结构体
    glo.gamemap = new Gamemap();
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    setFixedSize(WIDTH, HEIGHT);

    paint.begin(this);
    glo.gamemap->Display(paint);//调用Gamemap的画图方法显示背景图片
    qDebug() << "ok";
    paint.end();
}

MainWindow::~MainWindow()
{

}

gamemap.h

#ifndef GAMEMAP_H
#define GAMEMAP_H
#include "main.h"
#include 
#include 

class Gamemap
{
public:
    Gamemap();
    ~Gamemap();

    void Display(QPainter &paint);
};

#endif // GAMEMAP_H

gamemap.cpp:将准备好的背景图片“画”进主界面

#include "gamemap.h"
#include 
#include 

Gamemap::Gamemap()
{

}

void Gamemap::Display(QPainter &paint)
{
    paint.drawImage(QRect(0,0,WIDTH,HEIGHT),QImage(":/images/background.bmp"));
}

Gamemap::~Gamemap()
{

}

编译运行,效果图如下:
Qt项目学习——坦克大战(一)_第1张图片
到这里完成了第一步,下一步是在已有的背景图上绘制地图,并增加保存和加载功能。

你可能感兴趣的:(Qt项目学习)