linux环境下用QT实现打地鼠游戏源码共享

csdn源码压缩包下载地址  http://download.csdn.net/detail/ziyuewuneng/6274387

每一个qt程序都是一个文件夹!(即都必须创建一个目录)

1 mkdir dir
2 cd dir 创建文件    cc/cpp
3 qmake -project     生成工程文件.pro
4 qmake         生成makefile
5 make
6 默认生成与目录同名的可执行文件!

7 ./执行,查看结果!


游戏打地鼠:布局,button,信号与槽,计时,分数

当按下其中一个!另外一个弹起来!
禁用所有,随机启用一个!

增加新功能:
1,自动跳出!    周期(计时):
QTimer:
2,计数!        显示数!QLabel/QLCDNumber
3,开始,暂停,重新开始,退出!

main.cc


#include <QApplication>
//#include <QWidget>
#include"mywindow.h"
int main(int argc,char **argv)
{
	QApplication app(argc,argv);
//	QWidget tt;
	mywindow tt;
	tt.show();
	app.exec();
	return 0;
}


mywindow.h

#include<QWidget>
#include <QLabel>
#include <QLCDNumber>
#include<QPushButton>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include <QTimer>
#include <QMessageBox>
class mywindow:public QWidget
{
	Q_OBJECT

	public:
		mywindow();
	public slots:
		void myslot();
	void mytimer(void);
	void myclick_timer(void);
	void myslot_start(void);
	void myslot_restart(void);


	private:
	
		void mydisableall(void);
		QTimer *timer;
		QTimer *click_timer;
		
		int count;//计时
		int num;//bingo
		int score;
		
		bool st;
	
		QPushButton *button_1[4];

		QPushButton *button[4*6];

		QLabel *label_1;
		QLabel *label_2;

		QLCDNumber *lcd1;
		QLCDNumber *lcd2;
		
		QHBoxLayout *hlayout_2;

		QHBoxLayout *hlayout_1;
		QHBoxLayout *hlayout[4];//水平
		QVBoxLayout *layout;//垂直
		QVBoxLayout *layout_1;//垂直

};

mywindow.cc


#include "mywindow.h"
#include<QApplication>

mywindow::mywindow()
{
	srand(getpid());
	int i,j,k;
	i=j=k=0;

	st = true;
	count = 10;
	num = 0;
	timer = new QTimer;
	timer->start(1000);//1s
	timer->stop();
	
	click_timer = new QTimer;
	click_timer->start(1000);//1s
	click_timer->stop();

	layout = new QVBoxLayout;
	hlayout_2 = new QHBoxLayout;

	label_1 = new QLabel("time:");
	label_2 = new QLabel("bingo:");
	lcd1 = new QLCDNumber;
	lcd2 = new QLCDNumber;
	lcd1->setDigitCount(2);//默认最多显示5位
	lcd1->setSegmentStyle(QLCDNumber::Flat);
	lcd1->display(10);
	lcd2->setDigitCount(2);//默认最多显示5位
	lcd2->setSegmentStyle(QLCDNumber::Flat);
	lcd2->display(0);
	
	hlayout_1 = new QHBoxLayout;//剩余 打击
	hlayout_1->addWidget(label_1);
	hlayout_1->addWidget(lcd1);
	hlayout_1->addStretch();
	hlayout_1->addWidget(label_2);
	hlayout_1->addWidget(lcd2);
	
	layout->addLayout(hlayout_1);

	layout_1 = new QVBoxLayout;
	button_1[0] = new QPushButton("start");
	button_1[1] = new QPushButton("stop");
	button_1[2] = new QPushButton("restr");
	button_1[3] = new QPushButton("quit!");

	for(i=0; i<4; i++)
	{
		button_1[i]->setMinimumSize(40,40);
		layout_1->addWidget(button_1[i]);//功能 
	}
	
	for(i=0;i<4;i++)
	{
		hlayout[i] = new QHBoxLayout;
		
		for(j=0;j<6;j++)
		{
			button[k] = new QPushButton(QIcon("s.png"),"");//函数参数要求

			button[k]->setMinimumSize(80,80);

			hlayout[i]->addWidget(button[k]);
			connect (button[k],SIGNAL(clicked()),this,SLOT(myslot())); 	
			k++;
		}
		layout->addLayout(hlayout[i]);
	}

	hlayout_2->addLayout(layout_1);
	hlayout_2->addLayout(layout);
	setLayout(hlayout_2);

	mydisableall();//初始没有地鼠!

	connect(button_1[0],SIGNAL(clicked()),this,SLOT(myslot_start()));//开始/暂停
//stop?
	connect(button_1[2],SIGNAL(clicked()),this,SLOT(myslot_restart()));//重新开始
	connect(button_1[3],SIGNAL(clicked()),qApp,SLOT(quit()));//退出
	
	connect(timer,SIGNAL(timeout()),this,SLOT(mytimer()));//递减
	connect(click_timer,SIGNAL(timeout()),this,SLOT(myclick_timer()));//递减
}

void mywindow::myclick_timer(void)
{
	mydisableall();
	button[rand()%24]->setEnabled(true);
}

void mywindow::mytimer(void)
{
	count--;
	lcd1->display(count);

	if(count==0)///
	{
		mydisableall();
		click_timer->stop();
		enum QMessageBox::StandardButton str;
		str = QMessageBox::warning(this,"title:warn","warning::hello world",QMessageBox::Yes|QMessageBox::No);

		//QMessageBox::aboutQt(this);

		if(str == QMessageBox::Yes)
			myslot_restart();
		if(str == QMessageBox::No)
			qApp->quit();
	}

}
void mywindow::myslot_restart(void)
{
	timer->start();
	click_timer->start();
	count = 10;
	num = 0;
	lcd1->display(count);
	lcd2->display(num);
	button_1[0]->setText("start");
	st = true;
}

void mywindow::myslot_start(void)
{
	if(st)
	{
		//button[rand()%24]->setEnabled(true);
		button_1[0]->setText("pause");
		timer->start();
		click_timer->start();
	}
	else
	{
		mydisableall();
		//button[rand()%24]->setEnabled(true);
		button_1[0]->setText("start");
		timer->stop();
		click_timer->stop();
	}
	st = !st;
}
void mywindow::mydisableall()
{
	int i ;
	for(i=0;i<4*6;i++)
		button[i]->setDisabled(true);
	return;
}
void mywindow::myslot()
{
	int i ;
	for(i=0;i<4*6;i++)
		button[i]->setDisabled(true);
	button[rand()%24]->setEnabled(true);
	num++;
	lcd2->display(num);
	click_timer->start();
}



  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值