mianscene类:游戏的开始界面
mypushbutton类:为开始按钮和返回按钮封装的无边框的按钮控件
chooselevelscene类:选择游戏关卡的界面
playscene类:游戏的出场景
mycoin类:为金币封装的按钮
dataconfig类:游戏配置类
mainscene.h
#ifndef MAINSCENE_H
#define MAINSCENE_H
#include <QMainWindow>
#include "chooselevelscene.h"
namespace Ui {
class MainScene;
}
class MainScene : public QMainWindow
{
Q_OBJECT
public:
explicit MainScene(QWidget *parent = 0);
~MainScene();
void paintEvent(QPaintEvent *event);
ChooseLevelScene *chooseScene = NULL;
private:
Ui::MainScene *ui;
};
#endif // MAINSCENE_H
mainscene.cpp
#include "mainscene.h"
#include "ui_mainscene.h"
#include <QPainter>
#include "mypushbutton.h"
#include <QDebug>
#include <QTimer>
#include <QSound>
MainScene::MainScene(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainScene)
{
ui->setupUi(this);
//配置主场景
//设置固定大小
setFixedSize(320,588);
//设置图标
setWindowIcon(QIcon(":/res/Coin0001.png"));
//设置标题
setWindowTitle("翻金币主场景");
connect(ui->actionquit, &QAction::triggered, [=](){
this->close();
});
//开始音效
QSound *startSound = new QSound(":/res/TapButtonSound.wav", this);
//开始按钮
MyPushButton *startBtn = new MyPushButton(":/res/MenuSceneStartButton.png");
startBtn->setParent(this);
startBtn->move(this->width() * 0.5 - startBtn->width() * 0.5, this->height() * 0.7);
//实例化选择关卡场景
this->chooseScene = new ChooseLevelScene;
//监听选择关卡的信号
//监听代码要写在这里,不然没点击一次开始按钮就会执行一次
connect(chooseScene, &ChooseLevelScene::chooseSceneBack, this, [=](){
this->setGeometry(chooseScene->geometry());
chooseScene->hide();
this->show();
});
connect(startBtn, &MyPushButton::clicked, [=](){
// qDebug() << "点击了开始按钮";
//播放开始音效资源
startSound->play();
startBtn->zoom1();
startBtn->zoom2();
//延时进入到选择关卡中
QTimer::singleShot(500, this, [=](){
//设置chooseScene场景的位置
chooseScene->setGeometry(this->geometry());
//自身隐藏
this->hide();
//显示
chooseScene->show();
});
});
}
void MainScene::paintEvent(QPaintEvent *event) {
QPainter painter(this);
QPixmap pix;
pix.load(":/res/PlayLevelSceneBg.png");
//自适应
painter.drawPixmap(0, 0, this->width(), this->height(), pix);
//画背景上的图标
pix.load(":/res/Title.png");
pix = pix.scaled(pix.width() *0.5, pix.height()*0.5);
painter.drawPixmap(10,30,pix);
}
MainScene::~MainScene()
{
delete ui;
}
mypushbutton.h
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H
#include <QPushButton>
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
// explicit MyPushButton(QWidget *parent = nullptr);
MyPushButton(QString normalImg, QString pressImg = "");
QString nornalImgPath;
QString PressImgPath;
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
//弹跳特效
void zoom1(); //向下跳
void zoom2(); //向上跳
signals:
public slots:
};
#endif // MYPUSHBUTTON_H
mypushbutton.cpp
#include "mypushbutton.h"
#include <QDebug>
#include <QPropertyAnimation>
MyPushButton::MyPushButton(QString normalImg, QString pressImg) {
this->nornalImgPath = normalImg;
this->PressImgPath = pressImg;
QPixmap pix;
bool ret = pix.load(normalImg);
if (!ret) {
qDebug() << "图片加载失败";
return;
}
//设置图片固定大小
this->setFixedSize(pix.width(), pix.height());
//设置不规则图片样式
this->setStyleSheet("QPushButton{border:0px}");
//设置图标
this->setIcon(pix);
//设置图标大小
this->setIconSize(QSize(pix.width(), pix.height()));
}
void MyPushButton::zoom1() {
//创建动态对象
QPropertyAnimation *animation = new QPropertyAnimation(this, "geometry");
//设置动画的时间间隔
animation->setDuration(200);
//起始位置
animation->setStartValue(QRect(this->x(), this->y(), this->width(), this->height()));
//结束为止
animation->setEndValue(QRect(this->x(), this->y()+10, this->width(), this->height()));
//设置弹跳曲线
animation->setEasingCurve(QEasingCurve::OutBounce);
//执行动画
animation->start();
}
void MyPushButton::zoom2() {
//创建动态对象
QPropertyAnimation *animation = new QPropertyAnimation(this, "geometry");
//设置动画的时间间隔
animation->setDuration(200);
//起始位置
animation->setStartValue(QRect(this->x(), this->y()+10, this->width(), this->height()));
//结束为止
animation->setEndValue(QRect(this->x(), this->y(), this->width(), this->height()));
//设置弹跳曲线
animation->setEasingCurve(QEasingCurve::OutBounce);
//执行动画
animation->start();
}
void MyPushButton::mousePressEvent(QMouseEvent *e) {
if(this->PressImgPath != "") {
QPixmap pix;
bool ret = pix.load(this->PressImgPath);
if (!ret) {
qDebug() << "图片加载失败";
return;
}
//设置图片固定大小
this->setFixedSize(pix.width(), pix.height());
//设置不规则图片样式
this->setStyleSheet("QPushButton{border:0px}");
//设置图标
this->setIcon(pix);
//设置图标大小
this->setIconSize(QSize(pix.width(), pix.height()));
}
//让父类执行其他的内容
return QPushButton::mousePressEvent(e);
}
void MyPushButton::mouseReleaseEvent(QMouseEvent *e) {
if(this->PressImgPath != "") {
QPixmap pix;
bool ret = pix.load(this->nornalImgPath);
if (!ret) {
qDebug() << "图片加载失败";
return;
}
//设置图片固定大小
this->setFixedSize(pix.width(), pix.height());
//设置不规则图片样式
this->setStyleSheet("QPushButton{border:0px}");
//设置图标
this->setIcon(pix);
//设置图标大小
this->setIconSize(QSize(pix.width(), pix.height()));
}
//让父类执行其他的内容
return QPushButton::mouseReleaseEvent(e);
}
//MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
//{
//}
chooselevelscene.h
#ifndef CHOOSELEVELSCENE_H
#define CHOOSELEVELSCENE_H
#include <QMainWindow>
#include <playscene.h>
class ChooseLevelScene : public QMainWindow
{
Q_OBJECT
public:
explicit ChooseLevelScene(QWidget *parent = nullptr);
void paintEvent(QPaintEvent *event);
//游戏场景指针
PlayScene *play = NULL;
signals:
void chooseSceneBack();
public slots:
};
#endif // CHOOSELEVELSCENE_H
chooselevelscene.cpp
#include "chooselevelscene.h"
#include <QMenuBar>
#include <QPainter>
#include "mypushbutton.h"
#include <QDebug>
#include <QTimer>
#include <QLabel>
#include <QSound>
ChooseLevelScene::ChooseLevelScene(QWidget *parent) : QMainWindow(parent)
{
this->setFixedSize(320, 588);
this->setWindowIcon(QPixmap(":/res/Coin0001.png"));
this->setWindowTitle("选择关卡场景");
QMenuBar *bar = menuBar();
setMenuBar(bar);
QMenu *startMenu = bar->addMenu("开始");
QAction *quitAction = startMenu->addAction("退出");
connect(quitAction, &QAction::triggered, [=](){
this->close();
});
//选择关卡音效
QSound *chooseSound = new QSound(":/res/TapButtonSound.wav", this);
//返回按钮音效
QSound *backSound = new QSound(":/res/BackButtonSound.wav", this);
//返回按钮
MyPushButton *backBtn = new MyPushButton(":/res/BackButton.png", ":/res/BackButtonSelected.png");
backBtn->setParent(this);
backBtn->move(this->width() - backBtn->width(), this->height() - backBtn->height());
connect(backBtn, &MyPushButton::clicked, [=](){
// qDebug() << "点击了返回按钮";
backSound->play();
//延时返回
QTimer::singleShot(200, this, [=](){
emit this->chooseSceneBack();
});
});
//创建选择关卡的按钮
for (int i = 0; i < 20; i++) {
MyPushButton *menuBtn = new MyPushButton(":/res/LevelIcon.png");
menuBtn->setParent(this);
menuBtn->move(25 + i%4 * 70, 130 + i / 4 * 70);
//监听每个按钮的点击事件
connect(menuBtn, &MyPushButton::clicked, [=](){
chooseSound->play();
QString str = QString("您选择的是第 %1 关").arg(i + 1);
qDebug() << str;
//进入到游戏场景
this->hide();
this->play = new PlayScene(i + 1);
//设置游戏场景的初始位置
play->setGeometry(this->geometry());
play->show();
connect(play, &PlayScene::chooseSceneBack, [=](){
this->setGeometry(play->geometry());
this->show();
// 因为每关不一样,所以要delete掉比较好
delete play;
play = NULL;
});
});
QLabel *label = new QLabel;
label->setParent(this);
label->setFixedSize(menuBtn->width(), menuBtn->height());
label->setText(QString::number(i+1));
label->move(25 + i%4 * 70, 130 + i / 4 * 70);
//设置 水平居中和垂直居中
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
//设置鼠标穿透 51号属性
label->setAttribute(Qt::WA_TransparentForMouseEvents);
}
}
void ChooseLevelScene::paintEvent(QPaintEvent *event) {
//加载背景
QPainter painter(this);
QPixmap pix;
pix.load(":/res/OtherSceneBg.png");
painter.drawPixmap(0, 0, this->width(), this->height(), pix);
//加载标题
pix.load(":/res/Title.png");
painter.drawPixmap(this->width() * 0.5 - pix.width() * 0.5, 30, pix.width(), pix.height(), pix);
}
mycoin.h
#ifndef MYCOIN_H
#define MYCOIN_H
#include <QPushButton>
#include <QTimer>
class MyCoin : public QPushButton
{
Q_OBJECT
public:
// explicit MyCoin(QWidget *parent = nullptr);
//参数代表传入的是金币路径还是银币路径
MyCoin(QString btnImg);
//金币的属性
int posX;
int posY;
//金币的正反面 正true 反false
bool flag;
//改变标志的方法
void changeFlag();
QTimer *timer1;
QTimer *timer2;
int min = 1;
int max = 8;
//执行动画的标志,防止在未执行完动画的时候点击按钮
bool isAnimation = false;
//重写按下 释放
void mousePressEvent(QMouseEvent *e);
//用于胜利后每个按钮停止翻转
bool isWin = false;
signals:
public slots:
};
#endif // MYCOIN_H
mycoin.cpp
#include "mycoin.h"
#include <QDebug>
MyCoin::MyCoin(QString btnImg) {
QPixmap pix;
bool ret = pix.load(btnImg);
if (!ret) {
QString str= QString("图片 %1 加载失败").arg(btnImg);
qDebug() << str;
return;
}
this->setFixedSize(pix.width(), pix.height());
this->setStyleSheet("QPushButton{border:0px;}");
this->setIcon(pix);
this->setIconSize(QSize(pix.width(), pix.height()));
//初始化定时器对象
this->timer1 = new QTimer(this);
this->timer2 = new QTimer(this);
connect(timer1, &QTimer::timeout, [=](){
QPixmap pix;
QString str = QString(":/res/Coin000%1.png").arg(this->min++);
pix.load(str);
this->setFixedSize(pix.width(), pix.height());
this->setStyleSheet("QPushButton{border:0px;}");
this->setIcon(pix);
this->setIconSize(QSize(pix.width(), pix.height()));
//判断如果翻完了,将min重置为1
if (this->min > this->max) {
this->min = 1;
this->isAnimation = false;
timer1->stop();
}
});
connect(timer2, &QTimer::timeout, [=](){
QPixmap pix;
QString str = QString(":/res/Coin000%1.png").arg(this->max--);
pix.load(str);
this->setFixedSize(pix.width(), pix.height());
this->setStyleSheet("QPushButton{border:0px;}");
this->setIcon(pix);
this->setIconSize(QSize(pix.width(), pix.height()));
//判断如果翻完了,将min重置为1
if (this->max < this->min) {
this->max = 8;
this->isAnimation = false;
timer2->stop();
}
});
}
void MyCoin::changeFlag() {
if (this->flag) {
timer1->start(30);
this->isAnimation = true;
this->flag = false;
} else {
timer2->start(30);
this->isAnimation = true;
this->flag = true;
}
}
void MyCoin::mousePressEvent(QMouseEvent *e) {
if (this->isAnimation || this->isWin) { //胜利后屏蔽点击
return;
} else {
QPushButton::mousePressEvent(e);
}
}
//MyCoin::MyCoin(QWidget *parent) : QPushButton(parent)
//{
//}
playscene.h
#ifndef PLAYSCENE_H
#define PLAYSCENE_H
#include <QMainWindow>
#include <mycoin.h>
class PlayScene : public QMainWindow
{
Q_OBJECT
public:
// explicit PlayScene(QWidget *parent = nullptr);
PlayScene(int levelNum);
int levelIndex;
void paintEvent(QPaintEvent *event);
int gameArray[4][4];
MyCoin *coinBtn[4][4];
bool isWin;
signals:
void chooseSceneBack();
public slots:
};
#endif // PLAYSCENE_H
playscene.cpp
#include "playscene.h"
#include <QDebug>
#include <QMenuBar>
#include <QPainter>
#include "mypushbutton.h"
#include <QTimer>
#include <QLabel>
#include "mycoin.h"
#include "dataconfig.h"
#include <QPropertyAnimation>
#include <QSound>
PlayScene::PlayScene(int levelNum) {
QString str = QString("进入了第 1% 关").arg(levelNum);
qDebug() << str;
this->levelIndex = levelNum;
//初始化游戏场景
this->setFixedSize(320,588);
this->setWindowIcon(QPixmap(":/res/Coin0001.png"));
this->setWindowTitle("翻金币场景");
//点击按钮 实现退出游戏
QMenuBar *bar = menuBar();
setMenuBar(bar);
QMenu *startMenu = bar->addMenu("开始");
QAction *quitAction = startMenu->addAction("退出");
connect(quitAction, &QAction::triggered, [=](){
this->close();
});
//添加音效
QSound *backSound = new QSound(":/res/BackButtonSound.wav", this);
QSound *flipSound = new QSound(":/res/ConFlipSound.wav", this);
QSound *winSound = new QSound(":/res/LevelWinSound.wav", this);
//返回按钮
MyPushButton *backBtn = new MyPushButton(":/res/BackButton.png", ":/res/BackButtonSelected.png");
backBtn->setParent(this);
backBtn->move(this->width() - backBtn->width(), this->height() - backBtn->height());
connect(backBtn, &MyPushButton::clicked, [=](){
qDebug() << "返金币场景中点击了返回按钮";
backSound->play();
QTimer::singleShot(200, this, [=](){
emit this->chooseSceneBack();
});
});
//显示当前的关卡数
QLabel *label = new QLabel;
label->setParent(this);
QFont font;
font.setFamily("华文新魏");
font.setPointSize(20);
label->setFont(font);
QString str1 = QString("Level:%1").arg(this->levelIndex);
label->setText(str1);
label->setGeometry(30, this->height() - 50, 120, 50);
//初始化每个关卡的二维数组
dataConfig config;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
this->gameArray[i][j] = config.mData[this->levelIndex][i][j];
}
}
//胜利图片的显示
QLabel *winLabel = new QLabel;
QPixmap pix;
pix.load(":/res/LevelCompletedDialogBg.png");
winLabel->setGeometry(0,0,pix.width(),pix.height());
winLabel->setPixmap(pix);
winLabel->setParent(this);
winLabel->move((this->width() - pix.width()) * 0.5, -pix.height());
//显示金币背景图案
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
QPixmap pix = QPixmap(":/res/BoardNode.png");
QLabel *label = new QLabel;
label->setGeometry(0,0,pix.width(),pix.height()); //几何
label->setPixmap(pix);
label->setParent(this);
label->move(57 + i*50, 200 + j*50);
//创建金币
if (this->gameArray[i][j] == 1) {
//显示金币
str = ":/res/Coin0001.png";
} else {
//显示银币
str = ":/res/Coin0008.png";
}
MyCoin *coin = new MyCoin(str);
coin->setParent(this);
coin->move(59 + i*50, 204 + j*50);
//给金币的属性赋值
coin->posX = i;
coin->posY = j;
coin->flag = this->gameArray[i][j]; //1正面 0反面
//将金币放入金币的二维数组,以便后期的维护
coinBtn[i][j] = coin;
//点击金币 进行翻转
connect(coin, &MyCoin::clicked, [=](){
//点击后仅用所有金币,以防胜利时手快点击其他的按钮再进行无用的反转
flipSound->play();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
this->coinBtn[i][j]->isWin = true;
}
}
coin->changeFlag();
this->gameArray[i][j] = this->gameArray[i][j] == 0 ? 1 : 0;
//翻转周围的金币,延时翻转
QTimer::singleShot(300, this, [=](){
if (coin->posX + 1 <= 3) { //右侧
//翻转
coinBtn[coin->posX + 1][coin->posY]->changeFlag();
//维护正反面数组
this->gameArray[coin->posX + 1][coin->posY] =
this->gameArray[coin->posX + 1][coin->posY] == 0 ? 1 : 0;
}
if (coin->posX - 1 >= 0) { //左侧
coinBtn[coin->posX - 1][coin->posY]->changeFlag();
this->gameArray[coin->posX - 1][coin->posY] =
this->gameArray[coin->posX - 1][coin->posY] == 0 ? 1 : 0;
}
if (coin->posY + 1 <= 3) { //下侧
coinBtn[coin->posX][coin->posY + 1]->changeFlag();
this->gameArray[coin->posX][coin->posY + 1] =
this->gameArray[coin->posX][coin->posY + 1] == 0 ? 1 : 0;
}
if (coin->posY - 1 >= 0) { //上侧
coinBtn[coin->posX][coin->posY - 1]->changeFlag();
this->gameArray[coin->posX][coin->posY - 1] =
this->gameArray[coin->posX][coin->posY - 1] == 0 ? 1 : 0;
}
//翻转完成后解开禁用
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
this->coinBtn[i][j]->isWin = false;
}
}
//判断是否胜利
this->isWin = true;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (coinBtn[i][j]->flag == false) { //flag是coin中表示正反面的标志
this->isWin = false;
break;
}
}
}
if (this->isWin == true) {
winSound->play();
qDebug() << "游戏胜利";
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
coinBtn[i][j]->isWin = true;
}
}
//将胜利的图片移动下来
QPropertyAnimation *animation = new QPropertyAnimation(winLabel, "geometry");
//设置时间间隔
animation->setDuration(1000);
//设置开始位置
animation->setStartValue(QRect(winLabel->x(), winLabel->y(), winLabel->width(), winLabel->height()));
//设置结束位置
animation->setEndValue(QRect(winLabel->x(), winLabel->y()+114, winLabel->width(), winLabel->height()));
//设置缓和曲线
animation->setEasingCurve(QEasingCurve::OutBounce);
//执行动画
animation->start();
}
});
});
}
}
}
void PlayScene::paintEvent(QPaintEvent *event) {
QPainter painter(this);
QPixmap pix;
pix.load(":/res/PlayLevelSceneBg.png");
painter.drawPixmap(0,0,this->width(),this->height(),pix);
pix.load(":/res/Title.png");
pix = pix.scaled(pix.width()*0.5, pix.height()*0.5);
painter.drawPixmap(10, 30, pix.width(), pix.height(), pix);
}
//PlayScene::PlayScene(QWidget *parent) : QMainWindow(parent)
//{
//}
dataconfig.h
#ifndef DATACONFIG_H
#define DATACONFIG_H
#include <QObject>
#include <QMap>
#include <QVector>
class dataConfig : public QObject
{
Q_OBJECT
public:
explicit dataConfig(QObject *parent = 0);
public:
QMap<int, QVector< QVector<int> > >mData;
signals:
public slots:
};
#endif // DATACONFIG_H
dataconfig.cpp
#include "dataconfig.h"
#include <QDebug>
dataConfig::dataConfig(QObject *parent) : QObject(parent)
{
int array1[4][4] = {{1, 1, 1, 1},
{1, 1, 0, 1},
{1, 0, 0, 0},
{1, 1, 0, 1} } ;
QVector< QVector<int>> v;
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array1[i][j]);
}
v.push_back(v1);
}
mData.insert(1,v);
int array2[4][4] = { {1, 0, 1, 1},
{0, 0, 1, 1},
{1, 1, 0, 0},
{1, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array2[i][j]);
}
v.push_back(v1);
}
mData.insert(2,v);
int array3[4][4] = { {0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array3[i][j]);
}
v.push_back(v1);
}
mData.insert(3,v);
int array4[4][4] = { {0, 1, 1, 1},
{1, 0, 0, 1},
{1, 0, 1, 1},
{1, 1, 1, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array4[i][j]);
}
v.push_back(v1);
}
mData.insert(4,v);
int array5[4][4] = { {1, 0, 0, 1},
{0, 0, 0, 0},
{0, 0, 0, 0},
{1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array5[i][j]);
}
v.push_back(v1);
}
mData.insert(5,v);
int array6[4][4] = { {1, 0, 0, 1},
{0, 1, 1, 0},
{0, 1, 1, 0},
{1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array6[i][j]);
}
v.push_back(v1);
}
mData.insert(6,v);
int array7[4][4] = { {0, 1, 1, 1},
{1, 0, 1, 1},
{1, 1, 0, 1},
{1, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array7[i][j]);
}
v.push_back(v1);
}
mData.insert(7,v);
int array8[4][4] = { {0, 1, 0, 1},
{1, 0, 0, 0},
{0, 0, 0, 1},
{1, 0, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array8[i][j]);
}
v.push_back(v1);
}
mData.insert(8,v);
int array9[4][4] = { {1, 0, 1, 0},
{1, 0, 1, 0},
{0, 0, 1, 0},
{1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array9[i][j]);
}
v.push_back(v1);
}
mData.insert(9,v);
int array10[4][4] = { {1, 0, 1, 1},
{1, 1, 0, 0},
{0, 0, 1, 1},
{1, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array10[i][j]);
}
v.push_back(v1);
}
mData.insert(10,v);
int array11[4][4] = { {0, 1, 1, 0},
{1, 0, 0, 1},
{1, 0, 0, 1},
{0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array11[i][j]);
}
v.push_back(v1);
}
mData.insert(11,v);
int array12[4][4] = { {0, 1, 1, 0},
{0, 0, 0, 0},
{1, 1, 1, 1},
{0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array12[i][j]);
}
v.push_back(v1);
}
mData.insert(12,v);
int array13[4][4] = { {0, 1, 1, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array13[i][j]);
}
v.push_back(v1);
}
mData.insert(13,v);
int array14[4][4] = { {1, 0, 1, 1},
{0, 1, 0, 1},
{1, 0, 1, 0},
{1, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array14[i][j]);
}
v.push_back(v1);
}
mData.insert(14,v);
int array15[4][4] = { {0, 1, 0, 1},
{1, 0, 0, 0},
{1, 0, 0, 0},
{0, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array15[i][j]);
}
v.push_back(v1);
}
mData.insert(15,v);
int array16[4][4] = { {0, 1, 1, 0},
{1, 1, 1, 1},
{1, 1, 1, 1},
{0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array16[i][j]);
}
v.push_back(v1);
}
mData.insert(16,v);
int array17[4][4] = { {0, 1, 1, 1},
{0, 1, 0, 0},
{0, 0, 1, 0},
{1, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array17[i][j]);
}
v.push_back(v1);
}
mData.insert(17,v);
int array18[4][4] = { {0, 0, 0, 1},
{0, 0, 1, 0},
{0, 1, 0, 0},
{1, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array18[i][j]);
}
v.push_back(v1);
}
mData.insert(18,v);
int array19[4][4] = { {0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array19[i][j]);
}
v.push_back(v1);
}
mData.insert(19,v);
int array20[4][4] = { {0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
QVector<int>v1;
for(int j = 0 ; j < 4;j++)
{
v1.push_back(array20[i][j]);
}
v.push_back(v1);
}
mData.insert(20,v);
//测试数据
// for( QMap<int, QVector< QVector<int> > >::iterator it = mData.begin();it != mData.end();it++ )
// {
// for(QVector< QVector<int> >::iterator it2 = (*it).begin(); it2!= (*it).end();it2++)
// {
// for(QVector<int>::iterator it3 = (*it2).begin(); it3 != (*it2).end(); it3++ )
// {
// qDebug() << *it3 ;
// }
// }
// qDebug() << endl;
// }
}