码迷,mamicode.com
首页 > 编程语言 > 详细

QT-Creator C/C++ 打地鼠小游戏

时间:2016-01-02 20:19:43      阅读:838      评论:0      收藏:0      [点我收藏+]

标签:

废话少说先上图:

技术分享

这个游戏纯属土鳖思路,没有用到什么游戏引擎。

1.使用按钮或QLabel铺满窗口。

2.通过简单算法随机动态的设置按钮矩阵中某个按钮的背景图像。

3.同步2过程反复设置多个按钮背景实现图像动起来,注意调节刷新时间。

4.重写按钮组鼠标事件,设置鼠标移入时光标的图案,可以是个小锤子。

5.单击事件后鼠标同理切换鼠标图案打下和抬起。

6.加入一点声音。

7.没有了。

相关代码:

main.cpp

#include "widget.h"
#include <QApplication>
int Widget::score;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w ,*pW;
    pW = &w;
    w.setWindowTitle("打地鼠   难度:★   成绩:5只 ");
    w.setFixedSize(400,350);
    w.show();
    ////保持窗口指针
    return a.exec();
}

  

mybutton.cpp

#include "mybutton.h"
#include <QWidget>
#include <QMouseEvent>
#include <QIcon>
#include <QSize>
#include <QString>
#include<QPixmap>
#include<Qtimer>
#include<QSound>
#include "widget.h"
MyButton::MyButton(QWidget *parent):QPushButton(parent)
{
    upTime = new QTimer(this);//恢复锤子状态
    upTime->connect(upTime,SIGNAL(timeout()),this,SLOT(upCZ()));
   // btnGroup = Widget();
      this->image = 0;
}
void MyButton::mousePressEvent(QMouseEvent *e){
     this->setCursor(QCursor(QPixmap("C:/src/c1.png")));
     upTime->start(100);
     this->hit();
     //处理
}
void MyButton::hit(){
    QSound::play("hit.wav");
        if(this->image != 0){
                 this->setIcon(QIcon("C:/src/hit.jpg"));
                 QSound::play("dead.wav");//相对路径
                 Widget::score++;
        }
}
void MyButton::upCZ(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));
}

  

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H
#include<QTimer>
#include <QPushButton>
#include <QWidget>
#include <QMouseEvent>
class MyButton : public QPushButton
{
    Q_OBJECT
public:

    int image;//图片张数
    MyButton(QWidget *parent);
    void hit();
    void mousePressEvent(QMouseEvent *e);

private:
    QTimer *upTime;
    MyButton *btnGroup;
public slots:
    void upCZ();//抬起锤子
};

#endif // MYBUTTON_H

  

widget.cpp

#include "widget.h"
#include "mybutton.h"
#include <QIcon>
#include <QSize>
#include <QTimer>
#include<QDebug>
#include<QCursor>
#include<QPixmap>
Widget::Widget(QWidget *parent):QWidget(parent)
{

   initBtn(5);
   time= QTime::currentTime();
   qsrand(time.msec()+time.second()*1000);
   //随机数进程
   srand[0] = 0;//地鼠具体位置
   srand[1] = 0;//地鼠具体位置
   srand[2] = 0;//地鼠具体位置
   srand[3] = 0;//地鼠具体位置
   srand[4] = 0;//地鼠具体位置
   timer = new QTimer(this);
   timer->connect(timer,SIGNAL(timeout()),this,SLOT(startRun()));
   timer->start(200);
   QPixmap qp(40,40);
   qp.load("C:/src/c0.png");
   qp.scaled(60,60);
   this->setCursor(QCursor(qp));
}
void Widget::initBtn(int num){
    int counter = 0;
    for(int i= 0;i < num;i++){
        for(int j = 0; j < 5;j++){
            buttonGroup[counter] = new MyButton(this);
            buttonGroup[counter]->resize(80,70);//400/5=80一行5个
            buttonGroup[counter]->move(80*j,70*i);
          //  buttonGroup[counter]->setText(QString::number(counter));
          //  buttonGroup[counter]->setStyleSheet("border:0px;");
            buttonGroup[counter]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[counter]->setIconSize(QSize(85,87));
            counter++;
        }
    }

    //载入图像资源
    for(int i = 0; i < 6 ;i++){
    icoGroup[i] = new QIcon("C:/src/"+QString::number(i)+".jpg");
    }
}
void Widget::startRun(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));//鼠标抬起
    for(int i = 0;i< 5;i++){//一次性更新5个位置
        if(buttonGroup[srand[i]]->image < 6){
            buttonGroup[srand[i]]->setIcon(*icoGroup[buttonGroup[srand[i]]->image++]);
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
        }else{
            buttonGroup[srand[i]]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
            buttonGroup[srand[i]]->image = 0;
            srand[i] = qrand()%25;
            qDebug("地鼠位置:%d",srand[i]);
            //分数
            setWindowTitle("打地鼠   难度:★   成绩:"+QString::number(score)+"只 ");
        }
    }


}

MyButton **Widget::getBtnGroup(){
    return buttonGroup;
}

Widget::~Widget()
{

}

  

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "mybutton.h"
#include <QIcon>
#include <QTimer>
#include<QTime>
class Widget : public QWidget
{
    Q_OBJECT

public:
    static int score;//分数统计
    Widget(QWidget *parent = 0);
    void initBtn(int num);
    MyButton **getBtnGroup();
    ~Widget();

private:
    MyButton *buttonGroup[25];
    QTimer *timer;//刷新界面事务
    QIcon *icoGroup[6];
    QTime time;
    int srand[5];//具体位置
public slots:
   void startRun();//开始游戏
};

#endif // WIDGET_H

思路原始,写法丑陋,大神请无视,初学者可以学习下。

FROM CTGU HOMEWORK

QT-Creator C/C++ 打地鼠小游戏

标签:

原文地址:http://www.cnblogs.com/homes/p/5095058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!