文件源码链接,方便查看
链接:https://pan.baidu.com/s/16He134AuWGjzcYca2TzaNg?pwd=0422
提取码:0422
一、游戏界面介绍
二、制作中用的素材(可以ps直接写几个数字)
图片大小为32*32
三、将图片加入项目(步骤略)
四、 书写代码
1.mainwindow.h文件(我创建的)
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QMap> #include<QImage> #include<QPainter> #include<QPaintEvent> #include<QMouseEvent> #define row 10 #define lie 10 #define Wid row*32 #define Hig lie*32 #define count_boom 10 enum s { Zero=0,One,Two,Three,Four,Five,Six,Seven,Eight,Boom,Unknow }; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); QMap<int,QImage>msin; QPainter* mpainter=new QPainter; QImage mdata[row][lie]; QImage mshow[row][lie]; void setsin(); void setboom(); virtual void paintEvent(QPaintEvent *event); virtual void mousePressEvent(QMouseEvent*event); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
2.mainwindow.cpp文件
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QImage> #include<QDebug> #include<QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::setsin() { msin[Zero ]={"://picture/0.png"}; msin[One ]={"://picture/1.png"}; msin[Two ]={"://picture/2.png"}; msin[Three ]={"://picture/3.png"}; msin[Four ]={"://picture/4.png"}; msin[Five ]={"://picture/5.png"}; msin[Six ]={"://picture/6.png"}; msin[Seven ]={"://picture/7.png"}; msin[Eight ]={"://picture/8.png"}; msin[Boom ]={"://picture/boom.png"}; msin[Unknow ]={"://picture/unkown.png"}; } int boom_num(QImage mdata[row][lie],int x,int y,QMap<int,QImage>msin) { int num=0; if(mdata[x][y]==msin[Boom]) return -1; for(int i=-1;i<=1;i++) { for(int j=-1;j<=1;j++) { if((x+i<0||y+j<0)||(x+i>=row||y+j>=lie)) continue; else if((i==0&&j==0)) continue; else if(mdata[x+i][y+j]==msin[Boom]) { num++; } } } return num; } void MainWindow::setboom() { for(int i=0;i<row;i++) { for(int j=0;j<lie;j++) { mshow[i][j]=msin[Unknow]; mdata[i][j]=msin[Unknow]; } } for(int i=0;i<count_boom;i++) { int x=rand()%row; int y=rand()%lie; mdata[x][y]=msin[Boom]; } for(int i=0;i<row;i++) { for(int j=0;j<lie;j++) { if(boom_num(mdata,i,j,msin)!=-1) mdata[i][j]=msin[boom_num(mdata,i,j,msin)]; } } } void MainWindow::paintEvent(QPaintEvent *event) { mpainter->begin(this); for(int i=0;i<row;i++) { for(int j=0;j<lie;j++) { mpainter->drawImage(32*i,32*j,mshow[i][j]); } } mpainter->end(); } void detect_move(QImage mdata[row][lie],QImage mshow[row][lie],int x,int y,QMap<int,QImage>msin) { if(x>=row||y>=lie||x<0||y<0) return; if(mshow[x][y]!=msin[Unknow]) return; mshow[x][y]=mdata[x][y]; if(mshow[x][y]==msin[Zero]) { detect_move(mdata,mshow,x+1,y,msin); detect_move(mdata,mshow,x-1,y,msin); detect_move(mdata,mshow,x,y+1,msin); detect_move(mdata,mshow,x,y-1,msin); detect_move(mdata,mshow,x-1,y-1,msin); detect_move(mdata,mshow,x+1,y-1,msin); detect_move(mdata,mshow,x-1,y+1,msin); detect_move(mdata,mshow,x+1,y+1,msin); } } void detect_boom(QImage mdata[row][lie],QImage mshow[row][lie],int x,int y,QMap<int,QImage>msin) { if(mdata[x][y]==msin[Zero]) { detect_move(mdata,mshow,x,y,msin); } else { mshow[x][y]=mdata[x][y]; } } bool is_Win(QImage mshow[row][lie],QMap<int,QImage>msin) { int num=0; for(int i=0;i<row;i++) { for(int j=0;j<lie;j++) { if(mshow[i][j]==msin[Unknow]) num++; } } if(num==count_boom) return true; else return 0; } void MainWindow::mousePressEvent(QMouseEvent*event) { int x=event->x()/32; int y=event->y()/32; qDebug()<<x<<" "<<y; if(mdata[x][y]==msin[Boom]) { QMessageBox::warning(this,"提示","游戏结束了",QMessageBox::Ok); for(int i=0;i<row;i++) { for(int j=0;j<lie;j++) { mshow[i][j]=mdata[i][j]; } } repaint(); return; } detect_boom(mdata,mshow, x, y,msin); repaint(); if(is_Win(mshow,msin)) QMessageBox::question(this,"提示","你赢了",QMessageBox::Ok); }
3.main.cpp
#include "mainwindow.h"
#include <QApplication>
#include<time.h>
int main(int argc, char *argv[])
{
srand((unsigned int)time(NULL));
QApplication a(argc, argv);
MainWindow w;
w.setFixedSize(Wid,Hig);
w.setsin();
w.setboom();
w.show();
return a.exec();
}
完成后的界面图