如何分析QT波尔塔瓦会战之战这版游戏网上是不是很少

基于QT小游戏-细菌病毒战 - 推酷
基于QT小游戏-细菌病毒战
最近貌似禽流感又出现了。也许经历了非典啊、禽流感啊,这样的流行病多了,人们对此似乎见怪不怪了,反正我是淡定了,在食堂鸡鸭鹅的什么也都不忌讳。好了,废话不多说了,先上个图(写的不好,请大神轻喷):
细菌病毒战的主界面
分四个模式;
单人攻击模式
:通过a,s,d,w控制红细胞的运动方向,然后通过鼠标左右键控制发射抗体,来消灭流感病毒;
双人攻击模式:
通过a,s,d,w和i,j,k,l来控制两个红细胞的运动方向,然后分别通过x,c和n,m控制两个红细胞发射抗体;
防守模式:
控制红细胞躲避病毒,(被病毒撞上会消耗生命值);
这个游戏是带音效的哦,双人模式中存活时间最长的为胜者。
单人攻击模式:(美工还行吧)
双人攻击模式:
游戏中的声音通过QSound类实现:
&( const&QString&&&filename, QObject&*&parent = 0, const&char&*&name = 0 )
&( int&l )
静态公有成员
&( const&QString&&&filename )
void BackGroundMusicThread::playBackGroundSound(const QString filename)
if( this-&backgroudSound!=NULL )
this-&backgroudSound-&destroyed();
delete this-&backgroudS
this-&backgroudSound = new
QSound(filename);
this-&backgroudSound-&play();
背景音乐播放,继承QThread类:
class BackGroundMusicThread : public QThread
explicit BackGroundMusicThread(QObject *parent = 0);
~BackGroundMusicThread();
void playBackGroundSound();
void playBackGroundSound(const QString fileName);
void setSoudnLoop(int lo);
void run();
public slots:
QSound *backgroudS
QObject *parentW
这样实现抽象函数run(),就可以在游戏结束的时候播放想要播放的声音了。
void BackGroundMusicThread::run()
qDebug() && &IN THREAD RUN...............................&;
this-&setSoudnLoop(2);
play this music 2 times
this-&playBackGroundSound();
while(true)
if( ((Widget*)(this-&parentWidget))-&isGameOver() )
Resource *resource = new Resource();
QSound *gameoverSound = new QSound(resource-&picLocation+&gameover.wav&);
gameoverSound-&play();
if( gameoverSound-&isFinished())
delete gameoverS
if( ((Widget*)(this-&parentWidget))-&isExit())
qDebug() && &THREAD RUN STOP...............................&;
按键的实现通过继承Widget里的MouseEven实现:
void mouseMoveEvent(QMouseEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void keyPressEvent(QKeyEvent *);
void keyReleaseEvent(QKeyEvent *);
具体代码:
void Widget::mouseMoveEvent(QMouseEvent *event){
if( Startgame )
world-&setMousePos(event-&x(),event-&y());
void Widget::mousePressEvent(QMouseEvent *event){
qDebug() && &mouse event type :& && event-&type();
if( this-&world-&getMode() == SINGLE_ATTACK_PLAYER)
if ( Startgame )
world-&fireFlag =
this-&world-&setKeyP(event-&button());
void Widget::mouseReleaseEvent(QMouseEvent *event){
qDebug() && &mouse event type :& && event-&type();
if( this-&world-&getMode() == SINGLE_ATTACK_PLAYER)
if( Startgame )
world-&fireFlag =
this-&world-&setKeyR(event-&button());
在SetKeyR和SetKeyP中获取按键和放开键的具体键值:
void World::setKeyP(int k){
switch(this-&getMode())
case SINGLE_ATTACK_PLAYER:
//play one
if(k==Qt::Key_W)
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::LeftButton)
//right click, bullet state 1
//play shot sound
this-&playShotSound();
this-&me-&fireflag=
this-&me-&bulletstate=1;
else if(k==Qt::RightButton) // left click, bullet state 2
//play bomb sound
this-&playBombSound();
this-&me-&fireflag=
this-&me-&bulletstate=2;
// bullets status
if(k== Qt::Key_1)
this-&bulletState = 1;
if(k==Qt::Key_3)
this-&bulletState = 3;
if(k==Qt::Key_4)
this-&bulletState = 4;
case SINGLE_DEFENCE_PLAYER:
//play one
if(k==Qt::Key_W)
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
this-&fireFlag =
case DOUBLE_ATTACK_PLAYER:
//play one
if(k==Qt::Key_W)
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::Key_I) //up
key['i'] =
if(k==Qt::Key_K) //down
key['k'] =
if(k==Qt::Key_J) //left
key['j'] =
if(k==Qt::Key_L) //right
key['l'] =
// fire keys
if(k==Qt::Key_N) //N key fire, bullet state 1
//play shot sound
this-&playShotSound();
this-&you-&fireflag=
this-&you-&bulletstate=1;
if(k==Qt::Key_M) //M key fire, bullet state 2
//play bomb sound
this-&playBombSound();
this-&you-&fireflag=
this-&you-&bulletstate=2;
if(k==Qt::Key_C) //C key fire, bullet state 1
//play shot sound
this-&playShotSound();
this-&me-&fireflag=
this-&me-&bulletstate=1;
else if(k==Qt::Key_X) // X key fire, bullet state 2
//play bomb sound
this-&playBombSound();
this-&me-&fireflag=
this-&me-&bulletstate=2;
// bullets status
if(k== Qt::Key_1)
this-&bulletState = 1;
if(k==Qt::Key_3)
this-&bulletState = 3;
if(k==Qt::Key_4)
this-&bulletState = 4;
case DOUBLE_DEFENCE_PLAYER:
//play one
if(k==Qt::Key_W)
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::Key_I) //up
key['i'] =
if(k==Qt::Key_K) //down
key['k'] =
if(k==Qt::Key_J) //left
key['j'] =
if(k==Qt::Key_L) //right
key['l'] =
this-&fireFlag =
move Sound effect is bad , so wape it out, if you like it, add it
/*if( k==Qt::Key_W ||
k==Qt::Key_S
|| k== Qt::Key_A
|| k==Qt::Key_D
|| k==Qt::Key_I ||
k==Qt::Key_J
|| k== Qt::Key_K
|| k==Qt::Key_L
this-&playMoveSound();
void World::setKeyR(int k){
switch(this-&getMode())
case SINGLE_ATTACK_PLAYER:
// player one
if(k==Qt::Key_W) //up
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::LeftButton)
//release left, bullet state 1
this-&me-&fireflag=
this-&me-&bulletstate=1;
else if(k==Qt::RightButton) //release right, bullet state 2
this-&me-&fireflag=
this-&me-&bulletstate=2;
case SINGLE_DEFENCE_PLAYER:
// player one
if(k==Qt::Key_W) //up
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
case DOUBLE_ATTACK_PLAYER:
// player one
if(k==Qt::Key_W) //up
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::Key_I)
key['i'] =
if(k==Qt::Key_K)
key['k'] =
if(k==Qt::Key_J)
key['j'] =
if(k==Qt::Key_L)
key['l'] =
if(k==Qt::Key_N)// bullet state 1
this-&you-&fireflag=
this-&you-&bulletstate=1;
//key['[']=
if(k==Qt::Key_M) //bullet state 2
this-&you-&fireflag=
this-&you-&bulletstate=2;
if(k==Qt::Key_C)
//bullet state 1
this-&me-&fireflag=
this-&me-&bulletstate=1;
else if(k==Qt::Key_X) //bullet state 2
this-&me-&fireflag=
this-&me-&bulletstate=2;
case DOUBLE_DEFENCE_PLAYER:
// player one
if(k==Qt::Key_W) //up
key['w'] =
if(k==Qt::Key_S) //down
key['s'] =
if(k==Qt::Key_A) //left
key['a'] =
if(k==Qt::Key_D) //right
key['d'] =
if(k==Qt::Key_I)
key['i'] =
if(k==Qt::Key_K)
key['k'] =
if(k==Qt::Key_J)
key['j'] =
if(k==Qt::Key_L)
key['l'] =
代码有点长,就不再往下贴了。(大家可以到这里下载全部工程文件:
这个游戏的主要思路:
动画效果的实现
:继承控件widget的paint方法,在每次重绘的时候计算‘流感病毒’和‘红细胞’的位置
病毒追逐红细胞效果的实现:
每个流感病毒自己有一个运动方向属性,每次重绘时,计算每个流感病毒的运动方向和自己坐标与红细胞坐标连线之间的夹角,然后将该夹角缩小一定的百分比,然后再计算流感病毒的新坐标,在重绘多次后就可以呈现流感病毒追逐红细胞的效果了。
工程文件里QT小游戏是在windows下编译成功的(当然在linux下也是可以的),用的工具是:qt-windows-opensource-5.0.0-msvc-offline(默认安装了VS2010),下面给出一个下载地址
,如果不能下载网上也有很多,安装后需要编译一遍:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致魔兽世界 荆棘谷的青山 的那个书有什么作用啊? - 魔兽世界 - 中国广告知道网
>>魔兽世界>>问题页
已解决问题
魔兽世界 荆棘谷的青山 的那个书有什么作用啊?
魔兽世界 荆棘谷的青山 的那个书有什么作用啊?
详细问题描述及疑问:期待您的答案,你的帮助无异于雪中送炭,让我感激涕零!
五个LM和BL都可以做的公共任务,任务的名字是“荆棘谷的青山”、“荆棘谷的青山 第二章”、“荆棘谷的青山 第三章”、“荆棘谷的青山 第四章”。如果你把荆棘谷的青山的叶数都凑齐的话一次交5个任务可以得到10000+的经验
我就不姓邪 &
•回答
•回答
•回答
•回答
•回答
|||||||||||||
是一个任务啊 凑齐了 交一下 在格罗木高营地外面的 远征军营地交接任务
任务物品~~仅此而以
伊利丹之泪&
可以这么说,荆棘谷的青山=经验。
〓狼牙¢月〓&
可以获得任务
任务撒~只要凑齐了可以在远征营地那里交
skyqioushi&
猜您感兴趣
本页网址:问题补充&&
本页链接:
郑智化-星星点灯.mp4div class=;thunder- data-link=;&div class=&thunder-wrap& data-link=&thunder://QUFodHRwOi8vYWlrYW5keS5vcmcv6YOR**m65YyWLeaYn+aYn+eCueeBry5tcDQ/ZmlkPWFSRE9RRGtRdzdMdHFINEFDOG1LdVdwQ3VBQUFBQUFBQUFBQUFBQUF怠法糙盒孬谷茬贪长楷BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEmbWlkPTY2NiZ0aHJlc2hvbGQ9MTUwJnRpZD1FNTFERDdCQzAxQTkyODJCQTc3RUMxQzNCRUIzQ0JGNyZzcmNpZD0xMjAmdmVybm89MVpa&&;;
护盾之王&8-16 13:20
猜你感兴趣}

我要回帖

更多关于 波尔塔瓦州 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信