- 浏览: 725287 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1044)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
发一个自己写的贪吃蛇,很烂,就当给以后留下点回忆吧,靠它赢了顿必胜客,哈哈
myt.h
myt.cpp
main.cpp
ui是一个空的QWidget就不发了
myt.h
#include <QtGui/QWidget> #include "ui_myt.h" #include "qpainter.h" #include "QTimer" #include "QPainterPath" class MyT : public QWidget { Q_OBJECT public: MyT(QWidget *parent = 0, Qt::WFlags flags = 0); ~MyT(); enum Direction{ mLeft=0, mRight, mUp, mDown }; enum Level{ mEasy=1, mMedium, mDifficult, mBT }; private slots: void move(); protected: void paintEvent(QPaintEvent* e); void keyPressEvent(QKeyEvent *e); private: bool outOfBound(); bool coincide(); QString getTitle(); void stop(); void initWidget(Level=mEasy); private: int mRectNum; double mRectWidth; double mRectHeight; QTimer* mTimer; Direction mDirection; Level mLevel; QRectF mMoveRect; QList<QRectF> mPathList; QList<QRectF> mRandRectList; private: Ui::MyTClass ui; }; #endif // MYT_H
myt.cpp
#include "myt.h" #include "qpainter.h" #include "QKeyEvent" #include "QTimer" #include "QMessageBox" #include "time.h" #define MoveRect 5 #define RandomRect 8 static int opportuncity = 3;//give 3 times to try MyT::MyT(QWidget *parent, Qt::WFlags flags) : QWidget(parent, flags) { ui.setupUi(this); initWidget(mEasy); } MyT::~MyT() { } void MyT::initWidget(Level level) { mPathList.clear(); mRandRectList.clear(); mLevel = level; QSize size(300,300); this->setFixedSize(size); mRectNum = 30; mRectWidth = rect().width()/mRectNum; mRectHeight = rect().height()/mRectNum; int pathNum = 0; int randRectNum = 0; int interValTime = 500; if (level==mBT) { pathNum+=5; randRectNum+=8; interValTime=200; } //move path mMoveRect = QRectF(size.width()/10.,size.height()/10.,mRectWidth,mRectHeight); pathNum += MoveRect+mLevel; for (int i=0;i<pathNum;i++) { mMoveRect = QRectF(mMoveRect.x()+mRectWidth,mMoveRect.y(),mRectWidth,mRectHeight); mPathList.push_front(mMoveRect); } //random rect QRectF randRect; long randTimeNum = time(NULL); randRectNum += RandomRect+mLevel*2; for (int i=0;i<randRectNum;i++) { int randX = (qrand()+randTimeNum)%30; int randY = (qrand()+randTimeNum)%30; randRect = QRectF(randX*mRectWidth,randY*mRectHeight,mRectWidth,mRectHeight); if (mPathList.contains(randRect)||mRandRectList.contains(randRect))//the random rect can not be first move rect { i--; }else { mRandRectList.push_back(randRect); } } //connect time mTimer = new QTimer(this); connect(mTimer,SIGNAL(timeout()),this,SLOT(move())); mTimer->start(interValTime/level);//From then on, the move() slot is called every 0.3/level second. mDirection = mRight;//default move right QString title = getTitle(); setWindowTitle(title); repaint(); } /*! return the window title */ QString MyT::getTitle() { QString title; switch(mLevel) { case mEasy: title = tr("Easy"); break; case mMedium: title = tr("Medium"); break; case mDifficult: title = tr("Difficult"); break; case mBT: title = tr("BT"); break; } QString times = QString(",%1 times to try!").arg(opportuncity); if (opportuncity>0) { title += times; } return title; } /*! draw the window */ void MyT::paintEvent(QPaintEvent *event) { QPainter painter(this); for (int i=0;i<=mRectNum;i++) { painter.drawLine(mRectWidth*i,0,mRectWidth*i,rect().height()); } for (int j=0;j<=mRectNum;j++) { painter.drawLine(0,mRectHeight*j,rect().width(),mRectHeight*j); } //draw path foreach(QRectF rect,mPathList) { painter.fillRect(rect,QBrush(Qt::SolidPattern)); } //draw random rect foreach(QRectF rect,mRandRectList) { painter.fillRect(rect,QBrush(Qt::SolidPattern)); } } void MyT::keyPressEvent(QKeyEvent *e) { switch (e->key()) { case Qt::Key_Up: if (mDirection!=mDown) { mDirection = mUp; } break; case Qt::Key_Down: if (mDirection!=mUp) { mDirection = mDown; } break; case Qt::Key_Left: if (mDirection!=mRight) { mDirection = mLeft; } break; case Qt::Key_Right: if (mDirection!=mLeft) { mDirection = mRight; } break; default: mDirection = mRight; break; } move(); } /*! add new rect */ void MyT::move() { switch(mDirection) { case mLeft: mMoveRect = QRectF(mMoveRect.x()-mRectWidth,mMoveRect.y(),mRectWidth,mRectHeight); break; case mRight: mMoveRect = QRectF(mMoveRect.x()+mRectWidth,mMoveRect.y(),mRectWidth,mRectHeight); break; case mUp: mMoveRect = QRectF(mMoveRect.x(),mMoveRect.y()-mRectHeight,mRectWidth,mRectHeight); break; case mDown: mMoveRect = QRectF(mMoveRect.x(),mMoveRect.y()+mRectHeight,mRectWidth,mRectHeight); break; default: mMoveRect = QRectF(mMoveRect.x()+mRectWidth,mMoveRect.y(),mRectWidth,mRectHeight); break; } //game over if (outOfBound()||coincide()) { stop(); QMessageBox::StandardButton button =QMessageBox::question(this,tr("loser"),tr("Game Over!Do you want to try it again?"), QMessageBox::Ok|QMessageBox::Close); if (button == QMessageBox::Close) { exit(0); }else { opportuncity--; if (opportuncity>0) { initWidget(mLevel); }else { opportuncity = 3; initWidget(mEasy); } return; } } if (!mRandRectList.contains(mMoveRect)) { mPathList.pop_back(); }else { mRandRectList.removeOne(mMoveRect); } mPathList.push_front(QRectF(mMoveRect.x(),mMoveRect.y(),mRectWidth,mRectHeight)); //win,next version if (mRandRectList.isEmpty()) { stop(); switch(mLevel) { case mEasy: mLevel = mMedium; break; case mMedium: mLevel = mDifficult; break; case mDifficult: mLevel = mBT; break; case mBT: //last winner QMessageBox::information(this,tr("winner"), tr("Oh,you are so BT!"), QMessageBox::Ok); exit(0); break; } QString title = getTitle(); QMessageBox::StandardButton button = QMessageBox::question(this,tr("winner"), tr("Nice,you have passed,would you want to try the %1").arg(title), QMessageBox::Ok|QMessageBox::Close); if (button = QMessageBox::Ok) { initWidget(mLevel); }else { exit(0); } } repaint(); } /*! lose or win to next version */ void MyT::stop() { mTimer->stop(); disconnect(mTimer,SIGNAL(timeout()),this,SLOT(move())); } /*! judge the rect the whether the head meet the body */ bool MyT::coincide() { QRectF rect; for (int i=1;i<mPathList.size();i++) { rect = mPathList[i]; if (rect==mMoveRect) { return true; } } return false; } /*! judge whether header is outer of bounder */ bool MyT::outOfBound() { if(mMoveRect.x()>=rect().width()||mMoveRect.x()<0||mMoveRect.y()>=rect().height()||mMoveRect.y()<0) { return true; } return false; }
main.cpp
#include <QtGui/QApplication> #include "myt.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MyT w; w.show(); return a.exec(); }
ui是一个空的QWidget就不发了
发表评论
-
mac无法debug
2019-09-23 17:36 233升级新的lldb,底层脚本用的py3,而qtcreator暂不 ... -
现有项目生成pro文件
2018-07-21 15:32 1232qmake -project -
QtCreator使用arm编译器
2014-04-18 16:19 1191构建工具链各种不和谐,心一狠,直接改最原始的配置文件 1.首 ... -
qtcreator c++11
2013-07-15 22:10 883在.pro里面:QMAKE_CXXFLAGS += -std= ... -
qt webkit
2013-03-28 17:27 787arora是一个很不错的开源的浏览器,我说它不错并不见得它的性 ... -
qt profile
2012-05-29 17:04 5350这篇文章是我从360doc上转的,本来是要把转的url列出来的 ... -
QtConcurrent
2012-05-26 14:48 1975当我们想在一个或多个辅助线程执行的同时做一些后台处理且无须使用 ... -
QThreadPool
2012-05-23 22:24 2165#include<QThreadPool> ... -
用qtcreator但不用qt库
2012-04-17 10:48 1257pro file: QT -= core gui -
qtcreator缺少编码
2012-04-14 13:46 852将plugins/codecs复制到yourcreator/b ... -
QTableView显示tooltip与设置日志
2012-01-11 22:15 3617原文http://www.cppblog.com/biao/a ... -
Qt mysql相关
2011-11-28 23:44 1762sudo apt-get install mysql-serv ... -
Qt自定义事件
2011-08-31 14:48 5271先看下官方的文档:(google translation) Q ... -
QComboBox下拉item变灰
2011-07-21 10:10 1869qobject_cast<QStandardItemMo ... -
Qt国际化
2011-07-21 09:37 9231.先在.pro中加入一行:TRANSLATIONS = xx ... -
Qt读写xml
2011-07-20 10:49 6400test.xml <?xml version=&qu ... -
Qt多线程
2011-07-18 21:08 1423Qt中线程安全的类有QMutex,QMutexLocker,Q ... -
生产者与消费者
2011-07-16 09:42 2#include<iostream> #in ... -
Qt读写二进制文件
2011-07-11 22:11 5637DataStream.h #ifndef DATASTRE ... -
QItemDelegate
2011-07-09 10:57 1852.h #ifndef DIALOG_H #define ...
相关推荐
jQuery贪吃蛇网页版游戏代码,贪吃蛇网页版游戏代码基于jquery.1.11.3.min.js制作,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.Query网页版贪吃蛇游戏,带得分排行榜,交互的贪吃蛇游戏...
java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 ...
13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13--[贪吃蛇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码13...
c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇,c语言 贪吃蛇!贪吃蛇 c语言贪吃蛇
最新单片机仿真 8x8点阵做的贪吃蛇游戏最新单片机仿真 8x8点阵做的贪吃蛇游戏最新单片机仿真 8x8点阵做的贪吃蛇游戏最新单片机仿真 8x8点阵做的贪吃蛇游戏最新单片机仿真 8x8点阵做的贪吃蛇游戏最新单片机仿真 8x8...
(深信息)用python实现贪吃蛇小游戏毕业设计报告 .docx(深信息)用python实现贪吃蛇小游戏毕业设计报告 .docx(深信息)用python实现贪吃蛇小游戏毕业设计报告 .docx(深信息)用python实现贪吃蛇小游戏毕业设计报告 .docx...
PYTHON做贪吃蛇代码 PYTHON做贪PYTHONPYTHON做贪吃蛇代码做贪吃蛇代码 吃蛇代码 PYTHON做贪吃蛇代码PYTHON做贪吃蛇代码PYPYTHON做贪吃蛇代码THON做贪吃蛇代码PYTHON做贪吃蛇代码PYTHON做PYTHON做贪吃蛇代码贪吃蛇...
绝对原创的贪吃蛇,没有借助任何人的帮助,所以可能在设计上与他人不同。这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个包括apk应用和aia源码,适用于各位...
Python本科毕业设计项目源代码用pygame模块设计并运行贪吃蛇小游戏Python本科毕业设计项目源代码用pygame模块设计并运行贪吃蛇小游戏Python本科毕业设计项目源代码用pygame模块设计并运行贪吃蛇小游戏,Python本科...
汇编贪吃蛇汇编贪吃蛇汇编贪吃蛇汇编贪吃蛇汇编贪吃蛇汇编贪吃蛇
绝对原创的贪吃蛇,没有借助任何人的帮助,所以可能在设计上与他人不同。这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个是apk安卓应用,不包括aia源码,适用...
汇编贪吃蛇 汇编贪吃蛇 汇编贪吃蛇 汇编贪吃蛇
C编程——实现《贪吃蛇》大作战游戏:讲解的是用C语言写一款贪吃蛇的小游戏,希望对各位在学习之路上有很好的帮助!谢谢!C编程——实现《贪吃蛇》大作战游戏:讲解的是用C语言写一款贪吃蛇的小游戏,希望对各位在...
贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码贪吃蛇代码
100行Python代码的贪吃蛇小游戏源码100行Python代码的贪吃蛇小游戏源码100行Python代码的贪吃蛇小游戏源码100行Python代码的贪吃蛇小游戏源码100行Python代码的贪吃蛇小游戏源码100行Python代码的贪吃蛇小游戏源码...
简单的贪吃蛇源码,安卓游戏源码,有需要的下载,仅供参考
设计了一个不同的贪吃蛇,相较于普通的贪吃蛇,这个更加富有趣味性,可以作为大学生的Labview虚拟仪器课程设计
在手机屏幕上设计一个贪吃蛇游戏,屏幕四周被绿色苹果包围,中间有贪吃蛇和随机产生的苹果,贪吃蛇的头是黄色的,身子是红色的。玩家按上、下、左、右键盘控制贪吃蛇在屏幕上向上、下、左、右移动,贪吃蛇只能向左、...
JAVA本科期末大作业贪吃蛇小游戏源码JAVA本科期末大作业贪吃蛇小游戏源码JAVA本科期末大作业贪吃蛇小游戏源码JAVA本科期末大作业贪吃蛇小游戏源码JAVA本科期末大作业贪吃蛇小游戏源码JAVA本科期末大作业贪吃蛇小游戏...