admin管理员组文章数量:1534816
2024年6月22日发(作者:)
自己用qt动手写的小游戏,大家可以参考帮忙改进下,谢谢!!
游戏内容图片下坠,点击即可得分 ,未点击到则坠落到底则丢失,得分超过20则赢,丢失
超过10则输
文件声音和图片为方便均采用绝对路径;
首先需要创建一个ui文件
文件名为
里面拉2个label,一个为分数,一个为丢失数,objectname任意取
在拉2个lineedit,对应上面分别取objectivename为pointEdit和missEdit
在拉2个按钮 开始游戏 和 退出游戏objectivename为startGame和quitGame
再依次创建下面文件,并使用下面代码:
文件
SOURCES +=
FORMS +=
HEADERS +=
hei.h
zujian.h
gameArea.h
RESOURCES +=
image/
RC_FILE=image/ //定义运行图标 不需要的话可以删掉
运行主文件
#include
#include "hei.h"
#include
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//使中文
有效
heiw w;
();
return ();
}
gameArea.h 设置游戏区域背景类 就是一个400*550的矩形框子,使用painter画笔画的,
如果想丰富一点,可将该类换成QLabel继承类,然后贴图作为背景,还可以自动更换图片
背景。
#ifndef GAMEAREA_H
#define GAMEAREA_H
#include
#include
#include
#include
class gamearea:public QWidget
{
Q_OBJECT
public:
gamearea(QWidget *parent=0);
void paintEvent(QPaintEvent *event);
QPainter *painter;
};
#endif // GAMEAREA_H
资源文件
#include"gameArea.h"
gamearea::gamearea(QWidget *parent):QWidget(parent)
{
update();
}
void gamearea::paintEvent(QPaintEvent *)//重绘函数
{
painter=new QPainter(this);
painter->setBrush(Qt::yellow);
painter->setPen(Qt::black);
painter->drawRect(0,0,400,550);
}
Zujian.h 游戏里移动图片类的定义
#ifndef ZUJIAN_H
#define ZUJIAN_H
#include
#include
#include
#include
#include
#include
#include
class zu:public QLabel
{
Q_OBJECT
public:
zu(QWidget *parent=0);
void rand();
void speedrand();
void setX(int a);
void ctlgame();
void mousePressEvent(QMouseEvent *event);
signals:
void point(const int a);
void miss(const int a);
void click();
public slots:
void clkevent();
void Timeout1();
private:
QSound *clicks,*misss;
int a;
QPixmap pix;
QTimer *timer1;
int psel;
int speed;
int X,Y;
bool ctrl;
QString str;
};
#endif // ZUJIAN_H
资源文件
#include "zujian.h"
zu::zu(QWidget *parent):QLabel(parent)
{
QTime t1;
t1=QTime::currentTime();
qsrand(()+()*800);//设置随机种子
psel=qrand()%4;//随机取数,用于随机取图片
speed=qrand()%100;//用于图片下坠速度
X=0;
Y=0;
a=0;
ctrl=true;
timer1=new QTimer(this);
clicks=new
QSound("C:");//点击图片
声音
misss=new
QSound("C:");//图片未被点
击丢失的声音
rand();
speedrand();
connect(this,SIGNAL(click()),this,SLOT(clkevent()));
}
void zu::mousePressEvent(QMouseEvent *event)
{
clicks->play();
emit click();
}
void zu::clkevent()//图片被点击事件
{
Y=0;
rand();
speedrand();
(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
a=1;
emit point(a);
}
void zu::Timeout1()//图片下坠
{
if(Y>550)//图片下坠超过边界时则重新设置纵坐标为零,并发射丢失信号
{
Y=0;
Y+=5;
rand();
speedrand();
(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
misss->play();
a=1;
emit miss(a);
}
Else//图标下坠
{
(str);
setPixmap(pix);
setGeometry(X,Y,100,120);
Y+=5;
}
}
void zu::rand()//当图片被点击或者丢失后 ,随机再取图
{
QTime t1;
t1=QTime::currentTime();
qsrand(()+()*800);
psel=qrand()%4;
switch(psel)
{
case 1: str="C:";break;
case 2: str="C:";break;
case 3: str="C:";break;
case 4: str="C:";break;
default: ;;
}
}
void zu::speedrand()//下坠速度设定
{
speed=qrand()%100;
timer1->start(speed);
disconnect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
connect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
}
void zu::setX(int a)//设置图片横坐标
{
switch(a)
{
case 0: X=0;break;
case 1: X=100;break;
case 2: X=200;break;
case 3: X=300;break;
default: ;;
}
}
void zu::ctlgame()//暂停继续游戏控制,在heiw文件中使用
{
if(ctrl)
{
connect(this,SIGNAL(click()),this,SLOT(clkevent()));
connect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
ctrl=false;
}
else
{
disconnect(this,SIGNAL(click()),this,SLOT(clkevent()));
disconnect(timer1,SIGNAL(timeout()),this,SLOT(Timeout1()));
ctrl=true;
}
}
Hei.h游戏里主界面的定义
#ifndef HEI_H
#define HEI_H
#include
#include
#include
#include
#include
#include "zujian.h"
class QLabel;
namespace Ui
{
class heid;
}
class heiw:public QDialog
{
Q_OBJECT
public:
heiw(QWidget *parent=0);
~heiw();
gamearea *game;
zu* pp[4];
void result();
private slots:
void startgame();
void info(int a);
void infomiss(int a);
private:
QSound *sound;
QFont font;
QPalette palette;
QString str,str1;
int miss;
bool starts;
bool Gnew;
int point;
Ui::heid *ui;
QLabel *label;
};
#endif // HEI_H
资源文件
#include "hei.h"
#include "ui_hei.h"
#include
heiw::heiw(QWidget *parent):QDialog(parent),ui(new Ui::heid)
{
ui->setupUi(this);
this->setFixedSize(630,551);//设定窗口固定大小
this->setWindowTitle(tr("o0O点你妹O0o"));//设置标题
game=new gamearea(this);//创建游戏背景对象
game->setGeometry(0,0,405,550);//设置游戏背景大小
this->game->setFocus();
starts=false;
Gnew=true;
point=0;
miss=0;
label=new QLabel(this);
elSize(16);
or(QPalette::WindowText,Qt::red);
label->setPalette(palette);
label->setFont(font);
label->setText(tr("森哥出品 谢谢试玩 rn 请点击开始游戏"));
label->setGeometry(140,220,140,40);
ui->pointEdit->setText(tr("0"));
ui->missEdit->setText(tr("0"));
sound=new
QSound("C:");//开始
音乐,为绝对路径,需更改
sound->play();
connect(ui->quitGame,SIGNAL(clicked()),qApp,SLOT(quit()));
connect(ui->startGame,SIGNAL(clicked()),this,SLOT(startgame()));
}
heiw::~heiw()
{
delete ui;
delete game;
for(int i=0;i<4;i++)
{
delete pp[i];
}
delete label;
}
void heiw::startgame()
{
starts=!starts;
if(starts)//游戏开始和继续
{
if(Gnew)//初次进入游戏时创建4个图片对象
{
for(int i=0;i<4;i++)
{
pp[i]=new zu(this);
pp[i]->setX(i);
pp[i]->show();
connect(pp[i],SIGNAL(point(int)),this,SLOT(info(int)));
connect(pp[i],SIGNAL(miss(int)),this,SLOT(infomiss(int)));
}
Gnew=false;
}
for(int i=0;i<4;i++)
{
pp[i]->ctlgame();
pp[i]->show();
}
ui->startGame->setText(tr("暂停游戏"));
label->setHidden(true);
}
Else//游戏暂停
{
ui->startGame->setText(tr("继续游戏"));
label->setText(tr("游戏暂停中......"));
label->show();
for(int i=0;i<4;i++)
{
pp[i]->ctlgame();;
pp[i]->setHidden(true);
}
}
}
void heiw::info(int a)//接收图片对象点击信号加分
{
point+=a;
str=QString("%1").arg(point);
ui->pointEdit->setText(str);
if(point>=20)
result();
}
void heiw::infomiss(int a)//接收图片对象丢失信号
{
miss+=a;
str1=QString("%1").arg(miss);
ui->missEdit->setText(str1);
if(miss>=10)
result();
}
void heiw::result()//游戏试玩结果超过20分为赢 ,丢失10个为输,并设置
重新开始按钮
{
if(point>=20)
label->setText(tr("好吧!你赢了"));
else
label->setText(tr("你输了!!哈哈"));
label->show();
for(int i=0;i<4;i++)
{
disconnect(pp[i],SIGNAL(point(int)),this,SLOT(info(int)));
disconnect(pp[i],SIGNAL(miss(int)),this,SLOT(infomiss(int)));
delete pp[i];
}
ui->startGame->setText(tr("重新开始"));
sound->play();
point=0;
miss=0;
ui->pointEdit->setText(tr("0"));
ui->missEdit->setText(tr("0"));
starts=false;
Gnew=true;
}
游戏运行结果如下:
版权声明:本文标题:qt编写的小游戏 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1718990616a746567.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论