请说说这QT凤凰游艺能做什么生意稳赚不赔赔吗。

2280人阅读
Game Develop(32)
周末没事,手写小游戏继续~
1 定义数据结构
逻辑与界面分离,游戏场景是个二维数组区域,贪吃蛇是若干个连续的坐标点集合,用动态链表维护,果实是一个随机坐标点。
const int BLOCK_SIZE=25; //单个方块单元的边长
const int MARGIN=5; //场景边距
const int AREA_ROW=15; //场景行数
const int AREA_COL=15; //场景列数
QPoint foodP //果实出现坐标
QList&QPoint& //贪吃蛇结构
const int TIME_INTERVAL=500; //定时器间隔时间
enum Direction
2&添加界面刷新和键盘监听
首先需要定时器来控制贪吃蛇的移动以及界面的刷新,绑定定时器的信号槽
gameTimer=new QTimer(this);
connect(gameTimer,SIGNAL(timeout()),this,SLOT(SnakeUpdate()));窗口重绘
void Widget::paintEvent(QPaintEvent *event)
QPainter painter(this);
//绘制游戏场景
painter.setBrush(Qt::yellow);
painter.setPen(Qt::blue);
painter.drawRect(MARGIN,MARGIN,AREA_COL*BLOCK_SIZE,AREA_ROW*BLOCK_SIZE);
//绘制贪吃蛇
painter.setBrush(Qt::red);
painter.setPen(Qt::green);
for(int i=0;i&snake.size();i++)
painter.drawRect(MARGIN+snake[i].x()*BLOCK_SIZE,MARGIN+snake[i].y()*BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
//绘制果实
painter.setBrush(Qt::green);
painter.drawEllipse(MARGIN+foodPoint.x()*BLOCK_SIZE,MARGIN+foodPoint.y()*BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
//绘制游戏分数
painter.setPen(Qt::black);
painter.setFont(QFont(&Arial&,14));
painter.drawText(MARGIN*3+AREA_COL*BLOCK_SIZE,MARGIN+2*BLOCK_SIZE,&score: &+QString::number(score));
void Widget::keyPressEvent(QKeyEvent *event)
//贪吃蛇的方向是个状态机,注意各个方向之间切换有限制
switch(event-&key())
case Qt::Key_Up:
if(dir!=DOWN)
case Qt::Key_Down:
if(dir!=UP)
case Qt::Key_Left:
if(dir!=RIGHT)
case Qt::Key_Right:
if(dir!=LEFT)
dir=RIGHT;
case Qt::Key_P:
PauseResumeGame();
3&贪吃蛇移动、吃果实、得分、游戏结束逻辑
贪吃蛇的移动是个状态机,总是朝着当前的方向前进,移动的逻辑是,不断地消除尾部节点,并添加一个新的头部结点,如果碰到了果实,则不消除尾部结点
每次吃到了果实后会重新随机生成一个果实,并且保证果实不会与贪吃蛇身体重叠。
void Widget::SnakeUpdate()
//贪吃蛇移动的策略是每次删除尾部,然后添加新的头部,维护一个动态链表
switch(dir)
snake.push_front(QPoint(snake.front().x(),snake.front().y()-1));
case DOWN:
snake.push_front(QPoint(snake.front().x(),snake.front().y()+1));
case LEFT:
snake.push_front(QPoint(snake.front().x()-1,snake.front().y()));
case RIGHT:
snake.push_front(QPoint(snake.front().x()+1,snake.front().y()));
//如果吃到了果实,则尾部不删除,否则删除尾部更新头部
if(snake.contains(foodPoint))
score+=1; //得分
GenerateFood(); //重新生成果实
snake.pop_back();
//游戏是否结束
if(IsGameOver())
GameOver();
//赶在重绘之前跳出函数,防止贪吃蛇真的出界
update(); //重绘,比repaint函数效果好
void Widget::GenerateFood()
//随机产生位置
foodPoint.setX(rand()%AREA_COL);
foodPoint.setY(rand()%AREA_ROW);
//如果与贪吃蛇位置冲突,重新生成
if(snake.contains(foodPoint))
GenerateFood();
当贪吃蛇头部出界或者撞到了自身则判定为游戏结束
bool Widget::IsGameOver()
int x=snake.front().x();
int y=snake.front().y();
if(x&0||x&AREA_COL-1||y&0||y&AREA_ROW-1)
//撞了自己
for(int i=3;i&snake.size();i++)
if(snake[i]==snake.front())
4 游戏控制逻辑
游戏初始化
void Widget::InitGame()
//初始化贪吃蛇,初始长度5,注意头部在前,尾部在后
for(int j=4;j&=0;j--)
snake.push_back(QPoint(j,0));
dir=RIGHT;//初始时往右走
//初始化果实
srand(time(0));
GenerateFood();
//初始化游戏分数
//初始化暂停变量
//初始化计时器
gameTimer=new QTimer(this);
connect(gameTimer,SIGNAL(timeout()),this,SLOT(SnakeUpdate()));
gameTimer-&start(TIME_INTERVAL);
}游戏暂停和恢复
void Widget::PauseResumeGame()
//暂停和恢复定时器
if(!isPause)
isPause=!isP
gameTimer-&stop();
isPause=!isP
gameTimer-&start(TIME_INTERVAL);
void Widget::GameOver()
gameTimer-&stop();
QMessageBox::information(this,&failed&,&game over!&);
源码下载:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:261892次
积分:3814
积分:3814
排名:第8257名
原创:103篇
转载:57篇
评论:128条
艺术?技术?finance?
[新浪微博]:
[github]:&
(1)(4)(4)(3)(2)(6)(3)(7)(7)(3)(4)(6)(10)(7)(2)(1)(7)(6)(11)(4)(11)(3)(4)(11)(36)Qt扫雷游戏_QT作品_嵌入式作品_站长作品展__
Qt扫雷游戏
利用Qt所做的第4个小软件是Qt扫雷游戏,启动界面包含启动时的界面和启动后的界面,分别如图4-1,图4-2所示。
图4-1 启动时的界面
图4-2 扫雷启动界面
扫雷的场景,如图4-3所示。
图4-3 扫雷场景第1页/共14页
这个教程介绍方块游戏类的使用。教程共分三个部分。第一部分是简介,让你用最简单的办法实现自 己的方块游戏。第二部分是功能展示,这里通过一个例子对这个类的所有功能进行了演示。第三部分是游戏分析,通过对接口函数的展示和对整个游戏设计流程的分 析,帮助你更好的理解源码。
需要说明的是:我们下面使用的编程环境是基于Qt 4.6的Qt Creator 1.3.0 Windows版本。这个类包含的四个文件myitem.cpp, myitem.h ,gamearea.cpp ,gamearea.h 会和本教程打包在一起,你也可以到网上下载。
下载地址可以到我的博客 § 进行查看。
基于这个类我已经写了一个范例游戏:俄罗斯方块劳拉版
可以到csdn下载:§
或到qt论坛下载:§
第一部分:简介
其实在Qt Creator中已经有了俄罗斯方块的例子,大家可以在帮助中搜索Tetrix进行查看。其内容如下:
但是对于初学者,这个例子并不是那么容易就能看懂。所以我结合这个例子和网上的一些资料,写了一个比较简单的方块游戏类。希望能帮助初学者更好的理解这个例子和写出自己的方块游戏。
我这里已经对所有的功能函数进行了整理,最简单的,你只需要定义一个对象就能让这个游戏运行起来。
写最简单的游戏
1. 新建Empty Qt4 Project,我们这里命名为myTetrix。
2. 向工程里添加新的普通文本文件,命名为main.cpp 。
3. 将myitem.cpp, myitem.h, gamearea.cpp, gamearea.h四个文件复制到工程文件夹下。4. 将上面四个文件加入到工程中。
5. 将main.cpp的内容更改如下:
#include "gamearea.cpp"
int main(int argc,char* argv[])
QApplication app(argc,argv);
GameArea box(500);
box.show();
第1页/共14页
寻找更多 ""}

我要回帖

更多关于 时时彩稳赚不赔绝招 的文章

更多推荐

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

点击添加站长微信