- 浏览: 765159 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (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 (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
发一个自己写的贪吃蛇,很烂,就当给以后留下点回忆吧,靠它赢了顿必胜客,哈哈
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 254升级新的lldb,底层脚本用的py3,而qtcreator暂不 ... -
现有项目生成pro文件
2018-07-21 15:32 1279qmake -project -
QtCreator使用arm编译器
2014-04-18 16:19 1223构建工具链各种不和谐,心一狠,直接改最原始的配置文件 1.首 ... -
qtcreator c++11
2013-07-15 22:10 1384在.pro里面:QMAKE_CXXFLAGS += -std= ... -
qt webkit
2013-03-28 17:27 815arora是一个很不错的开源的浏览器,我说它不错并不见得它的性 ... -
qt profile
2012-05-29 17:04 5382这篇文章是我从360doc上转的,本来是要把转的url列出来的 ... -
QtConcurrent
2012-05-26 14:48 2018当我们想在一个或多个辅助线程执行的同时做一些后台处理且无须使用 ... -
QThreadPool
2012-05-23 22:24 2200#include<QThreadPool> ... -
用qtcreator但不用qt库
2012-04-17 10:48 1313pro file: QT -= core gui -
qtcreator缺少编码
2012-04-14 13:46 875将plugins/codecs复制到yourcreator/b ... -
QTableView显示tooltip与设置日志
2012-01-11 22:15 3669原文http://www.cppblog.com/biao/a ... -
Qt mysql相关
2011-11-28 23:44 1791sudo apt-get install mysql-serv ... -
Qt自定义事件
2011-08-31 14:48 5309先看下官方的文档:(google translation) Q ... -
QComboBox下拉item变灰
2011-07-21 10:10 1941qobject_cast<QStandardItemMo ... -
Qt国际化
2011-07-21 09:37 9681.先在.pro中加入一行:TRANSLATIONS = xx ... -
Qt读写xml
2011-07-20 10:49 6462test.xml <?xml version=&qu ... -
Qt多线程
2011-07-18 21:08 1453Qt中线程安全的类有QMutex,QMutexLocker,Q ... -
生产者与消费者
2011-07-16 09:42 2#include<iostream> #in ... -
Qt读写二进制文件
2011-07-11 22:11 5678DataStream.h #ifndef DATASTRE ... -
QItemDelegate
2011-07-09 10:57 1888.h #ifndef DIALOG_H #define ...
相关推荐
《简单的贪吃蛇源码分析与探讨》 贪吃蛇是一款经典的休闲游戏,深受各年龄段玩家的喜爱。在Android平台上,我们可以找到许多实现贪吃蛇的游戏源码,这为我们理解和学习移动游戏开发提供了宝贵的学习资源。这里我们...
jQuery贪吃蛇网页版游戏代码,贪吃蛇网页版游戏代码基于jquery.1.11.3.min.js制作,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.Query网页版贪吃蛇游戏,带得分排行榜,交互的贪吃蛇游戏...
双人贪吃蛇源代码 作为一名 IT 行业大师,我将为您生成相关知识点,详细解释标题、描述、标签和部分内容中的知识点。 标题:双人贪吃蛇源代码 双人贪吃蛇源代码是指在计算机程序设计基础课程设计中,设计和实现的...
标题中的“贪吃蛇_贪吃蛇图片.ico_贪吃蛇游戏mfc_贪吃蛇_MFC_”表明这是一个关于使用Microsoft Foundation Classes (MFC)框架开发的贪吃蛇游戏项目,其中可能包含了游戏的图标资源(.ico文件)和其他相关文件。...
微信小程序练手项目-小程序贪吃蛇小游戏(完整代码)微信小程序练手项目-小程序贪吃蛇小游戏(完整代码)微信小程序练手项目-小程序贪吃蛇小游戏(完整代码)微信小程序练手项目-小程序贪吃蛇小游戏(完整代码)微信小程序练...
《基于STM32的OLED贪吃蛇游戏详解》 贪吃蛇游戏,作为一个经典的电子游戏,自上世纪80年代以来就深受玩家喜爱。而如今,我们可以通过微控制器(MCU)实现这个游戏,例如STM32系列单片机。本文将深入探讨如何使用STM...
贪吃蛇的aia 贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。 [1] 另外还有一种名为“贪吃蛇”钻井测井技术,是运用旋转导向系统、...
《贪吃蛇游戏的UML设计与实现》 贪吃蛇是一款经典的电子游戏,它以其简单易懂的规则和无尽的游戏模式深受玩家喜爱。在软件工程领域,将这种游戏进行设计并编码时,通常会借助统一建模语言(UML)来规划和组织项目的...
《Labview贪吃蛇课程设计:打造趣味性虚拟仪器》 Labview(Laboratory Virtual Instrument Engineering Workbench)是一款由美国国家仪器公司(NI)开发的图形化编程环境,专为构建虚拟仪器而设计。在“Labview...
在这个系列中,"贪吃蛇"小游戏是一个常见的教学实例,它通过实现一个简单的游戏来帮助初学者理解和运用Java的基本概念。 贪吃蛇游戏通常涉及到图形用户界面(GUI)的创建,这是Java中的一个重要主题。GUI允许用户与...
标题中的“AD工程 贪吃蛇脚本.rar”表明这是一个与Active Directory(AD)相关的项目,同时结合了“贪吃蛇”的元素,这通常意味着它是一个编程脚本,可能是用某种编程语言编写的,用于在Windows环境中进行自动化或者...
《贪吃蛇大战》是一款基于Cocos Creator开发的多人在线竞技游戏,它的核心玩法是玩家控制一条不断增长的蛇,在地图上吞食食物,同时避免与其他玩家的蛇相撞,以此来获得分数并竞争排行榜。Cocos Creator是一个强大的...
大作业python游戏编程课程设计魔改贪吃蛇之贪吃蛇捕蛙游戏源码,完整代码注释,开发文档。 基于贪吃蛇捕蛙的游戏,贪食蛇吃了青蛙并不会变长,当贪食蛇吃了一些青蛙之后,游戏关卡会升级,升级后蛇的行动速度会变快...
【标题】"greedysnake_QT5贪吃蛇_qt贪吃蛇_贪吃蛇_" 指的是一个使用QT5框架开发的贪吃蛇游戏项目。QT5是Qt库的一个版本,它是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式系统的图形用户界面。这...
"C语言贪吃蛇相关PPT详细介绍贪吃蛇过程及问题" 通过分析给定的文件信息,我们可以总结出以下知识点: 1. C语言编程:贪吃蛇游戏的开发过程中使用C语言编程,包括项目的建立、头文件的使用、预编译头文件的作用等...
【贪吃蛇游戏详解】 贪吃蛇是一款经典的计算机游戏,起源于1976年的"Blockade",随后在各种早期计算机和手机平台上流行。在这个个人编写的版本中,我们有机会深入了解一个简单的贪吃蛇游戏是如何实现的。下面将详细...
贪吃蛇是一款经典的电子游戏,它的源码分析和学习对于初学者来说是非常有价值的。这个"贪吃蛇源码eclipse开发"项目是用Java语言在Eclipse集成开发环境中编写的,因此我们可以从中深入理解Java编程语言和Eclipse IDE...
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语言贪吃蛇
《C#贪吃蛇》是一款基于C#编程语言开发的极具挑战性和趣味性的经典小游戏,其强大之处在于它不仅保留了传统贪吃蛇的基本玩法,还融入了丰富的关卡设计和多样化的游戏功能,给玩家带来了更为丰富的游戏体验。...