应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

QT实现贪吃蛇

  设备描述
  1。Linux操作系统
  2。QT5。5。1
  关键点分析
  1。贪吃蛇的身体用什么形式展现
  2。当方向改变时,蛇身如何实现转向前进
  3。如何记录蛇身的每一个坐标
  4。如何判断游戏结束
  实现步骤
  1。首先有两种办法实现,第一:用QPushButton按键类,每个一个按键就是蛇的一部分身体,另外:用QPaintEvent绘图事件画出蛇的身体,个人认为用QPushButton实现比较简单粗暴,表面上看起来效果都一样。
  2。之前在想这个问题的时候很头痛,进入了一个误区,一直在想蛇头可以根据转向而立刻改变,但是蛇尾该如何慢慢转变过去呢,蛇身每转一次就有一个转折点,后面的蛇身都需要根据这个转折点来转向,心想还需要记录每一个转折点地址。但是后面发现根本就没用这么复杂,只需要将蛇身的每一个点根据上一个点的坐标走,第一个蛇身点根据蛇头走就可以了。
  3。由于我的蛇身每一个节点都是一个QPushButton对象,而这个类有一个获取坐标的函数geometry();和设置控件坐标的函数setGeometry();这样我们只需要用一个指针数组记录下每一个QPushButton的地址,通过遍历数组的方式就可知道每一个蛇身节点的地址QPushButtondot1newQPushButton;Snakebuff〔buffip〕(unsignedint)dot1;
  4。游戏结束有两种情况,第一:当蛇头碰到活动边界时,游戏结束。第二:当蛇头碰到蛇身体时,游戏结束。这里就要注意用全局变量存放活动边界的坐标。代码讲解
  main。h文件includeQMainWindowincludeQPushButtonincludeQTimerincludeQPaintEventnamespaceUi{classMainWindow;}classMainWindow:publicQMainWindow{QOBJECTpublic:explicitMainWindow(QWidgetparent0);MainWindow();virtualvoidpaintEvent(QPaintEvent);voidover();voidSnakeInit();publicslots:voidonButStart();voidonButUp();voidonButDown();voidonButLift();voidonButRight();voidonTimer();private:Ui::MainWindowui;QPushButtondot;蛇头QPushButtonnewdot;食物QTimertimerId;定时器intdirection;行驶方向unsignedintSnakebuff〔100〕;蛇身intbuffip;蛇身长度,同时也是游戏得分体现intSnakefood〔3〕;食物坐标,状态};
  复写voidpaintEvent(QPaintEvent)绘图函数,画四条边线。头文件
  includeQPaintEventvoidMainWindow::paintEvent(QPaintEvent){画一条直线QPainterpainternewQPainter(this);创建QPainter一个对象QPenpen;pen。setColor(Qt::black);设置画笔为黑色paintersetPen(pen);设置画笔painterdrawLine(linelift,lineup,lineright,lineup);painterdrawLine(linelift,linedown,lineright,linedown);painterdrawLine(linelift,lineup,linelift,linedown);painterdrawLine(lineright,lineup,lineright,linedown);}
  main。cpp主函数
  主要实现功能:初始化界面,初始化定时器,链接信号与槽MainWindow::MainWindow(QWidgetparent):QMainWindow(parent),ui(newUi::MainWindow){uisetupUi(this);setWindowIcon(QIcon(:newprefix1icondothead。png));setWindowTitle(贪吃蛇);timerIdnewQTimer(this);connect(timerId,SIGNAL(timeout()),this,SLOT(onTimer()));uistartsetStyleSheet(borderimage:url(:newprefix1icondotgreen。png);font:28ptSans;);uistartsetText(开始);dotNULL;newdotNULL;connect(uistart,SIGNAL(clicked(bool)),this,SLOT(onButStart()));connect(uilift,SIGNAL(clicked(bool)),this,SLOT(onButLift()));connect(uiright,SIGNAL(clicked(bool)),this,SLOT(onButRight()));connect(uiup,SIGNAL(clicked(bool)),this,SLOT(onButUp()));connect(uidown,SIGNAL(clicked(bool)),this,SLOT(onButDown()));}
  main。cpp定时器函数
  主要实现功能:蛇的运动过程,判断是否吃到食物,判断是否游戏结束voidMainWindow::onTimer(){intxdotgeometry()。x();获取蛇头坐标intydotgeometry()。y();if(xSnakefood〔0〕ySnakefood〔1〕)判断蛇头与食物坐标是否相同,相同表示吃到食物{QPushButtondot1newQPushButton;创Snakebuff〔buffip〕(unsignedint)dot1;将新的节点存入数组dot1setEnabled(0);设置按钮为不可点击状态dot1setParent(this);设置新建按钮显示在当前界面dot1setStyleSheet(borderimage:url(:newprefix1icondotgreen。png););QPushButtondot2(QPushButton)Snakebuff〔buffip1〕;intx1dot2geometry()。x();获取当前蛇身的最后一个节点inty1dot2geometry()。y();dot1setGeometry(x1,y1,dotsize,dotsize);将新节点加入蛇身末尾dot1show();显示出该节点Snakefood〔2〕1;食物已被吃标志}switch(direction){判断当前行驶方向case1:if(ylineup)dotsetGeometry(x,ydotsize,dotsize,dotsize);改变蛇头坐标当向左或右行驶时,下一个方向只能是上,或着下当向上或下行驶时,下一个方向只能是左,或者右uiupsetEnabled(0);uidownsetEnabled(0);设置按钮状态为不可点击uiliftsetEnabled(1);设置按钮状态为可以点击uirightsetEnabled(1);break;case2:if(ylinedown)dotsetGeometry(x,ydotsize,dotsize,dotsize);uiupsetEnabled(0);uidownsetEnabled(0);uiliftsetEnabled(1);uirightsetEnabled(1);break;case3:if(xlinelift)dotsetGeometry(xdotsize,y,dotsize,dotsize);uiupsetEnabled(1);uidownsetEnabled(1);uiliftsetEnabled(0);uirightsetEnabled(0);break;case4:if(xlineright)dotsetGeometry(xdotsize,y,dotsize,dotsize);uiupsetEnabled(1);uidownsetEnabled(1);uiliftsetEnabled(0);uirightsetEnabled(0);break;default:break;}if(buffip)当蛇身长度大于等于一时,将蛇身的后一个节点等于前一个节点的坐标{for(intibuffip1;i0;i)遍历蛇身所有节点{QPushButtondot1(QPushButton)Snakebuff〔i〕;QPushButtondot2(QPushButton)Snakebuff〔i1〕;intx1dot2geometry()。x();inty1dot2geometry()。y();dot1setGeometry(x1,y1,dotsize,dotsize);}QPushButtondot1(QPushButton)Snakebuff〔0〕;dot1setGeometry(x,y,dotsize,dotsize);}当贪吃蛇碰到边界时,游戏结束if(ylineupylinedownxlineliftxlineright)over();当贪吃蛇碰到自己尾巴时,游戏结束for(inti2;ibuffip;i){QPushButtondot2(QPushButton)Snakebuff〔i〕;if(xdot2geometry()。x()ydot2geometry()。y())over();}if(Snakefood〔2〕)当食物被吃掉时,创建下一个食物坐标{qsrand(QTime(0,0,0)。secsTo(QTime::currentTime()));生成随机数intnewxqrand()10005620linelift;qsrand(QTime(0,0,0)。secsTo(QTime::currentTime()));intnewyqrand()100820lineup;Snakefood〔0〕newx;记录下食物的坐标Snakefood〔1〕newy;newdotsetGeometry(newx,newy,dotsize,dotsize);newdotshow();Snakefood〔2〕0;设置食物未被吃掉标志}uilabelsetText(QString::number(buffip));显示当前游戏得分设置蛇行驶速度,得分越高,速度越快if(buffip5)timerIdsetInterval(300);elseif(buffip10)timerIdsetInterval(250);elseif(buffip20)timerIdsetInterval(200);elseif(buffip50)timerIdsetInterval(150);}
  【领QT开发教程学习资料,点击下方链接莬费领取,先码住不迷路】
  点击这里:链接

德布劳内福登22岁时已经如此优秀,我22岁时没现在踢得这么好直播吧10月4日讯曼城中场德布劳内近日在接受采访时赞扬了福登,并表示以后福登会更多往中路靠。同时,德布劳内还肯定了新援们的发挥。德布劳内说:福登只有22岁,我22岁的时候……什么是石墨烯?石墨烯产业医用的发展历史2004年人类第一次发现了石墨烯新材料什么是石墨烯?形状:石墨烯是一种由单层碳原子组成的呈六角形蜂巢晶格形状的二维碳纳米材料。厚度:厚度仅为0。335纳米(n……美的率先启动316L普及风暴!领衔电水壶行业材质新升级民以食为天,食以水为先,从古人智慧中也可以洞悉喝水的重要性,而且自爱国卫生运动起,官方就全面加强喝热水喝开水能预防传染性疾病的宣传工作。想喝白开水的时候,随时都能烧一壶,电水壶……服装业持续提升时尚活力在山东青岛市即墨区的青岛颐和针织有限公司生产车间,纺织工人在生产出口到海外的服装面料。梁孝鹏摄(中经视觉)在不久前闭幕的2022年北京时装周上,看完本土设计师的时装大秀后……金铲铲隐秘之海2。18b更新泰拉遭爆砍,四神龙缺一首版本更新,这一次针对于目前环境极不平衡的四龙核心进行了大幅度削弱,四龙的热度或许会因为这次地平衡开始褪去。【羁绊改动】龙神羁绊:改动龙神英雄在计算扣血时视为两……足坛精彩一夜!拜仁造5球惨案,巴萨不敌国米,欧冠4冠王16惨北京时间10月5日凌晨,欧冠小组赛第三轮重燃战火,拜仁,利物浦,巴萨等多家豪门先后出场亮相。本轮拜仁大胜比尔森胜利,继续领跑死亡之组,巴萨则是0:1客场输给国米,遭遇两连败。利……闽山闽水物华新非凡十年福安抱好金娃娃,发展潜力大东南网9月23日讯(福建日报记者单志强通讯员陈雅芳吴庆堂)上月,首届国际不锈钢产业创新发展大会在宁德召开,吸引世界目光。这场高端国际会议缘何青睐闽东?因为这里聚集了……秋分秋天的大地,高高悬挂肉体的饱满与沉重本期诗人:秦风詹义君羊依德雪野胡鲲陈修元罗涛胡佳禧马士礼言诗凡刘玥含刘期荣阿措金强沙子鹰黄锡锋辛夷(来稿先后为序)本期图片:777秋分诗帖秋……首钢名宿焦健公开批评雅尼斯,这一次我认同焦健的说法京辽大战二番战,北京首钢跟辽宁本钢焦灼了三节的时间,三节战罢双方可以说是平分秋色,但是却被辽宁队在第四节开端的一波流带走了比赛。赛后首钢男篮名宿、前国手焦健在自己的社交平台上公……王一梅晒新年照片,昔日女排王牌瘦成锥子脸!网友像换了一个人北京时间1月8日,王一梅首次晒出自己2022年的照片,可以看到,王一梅减肥成功,昔日圆脸今变锥子脸。网友们表示,像换了一个人。王一梅晒出最新的照片,与好友聚餐,镜头中王一……一文初识Lootex元宇宙的一站式游戏资产商城你是否还记得电影《头号玩家》中,主角Parzival购买游戏道具的那个科幻场景?如今,Lootex正在让这一虚拟场景就在玩家眼前成为现实。Lootex正在打造首个集结各种……我去看了下元宇宙,我的眼睛不好了在头条看世界〔捂脸〕这真的不是大富翁2吗,这地每平米两万刀?〔捂脸〕我觉得没有区别啊〔捂脸〕元宇宙的演唱会和party〔捂脸〕再来看看模拟人生的元……
读书有感在书店无意翻看到吴中朝的《特效穴位祛病全书》,为了多学点健康生活的小技巧,于是就买回家阅读。在没有看到这书之前,我一直以为人体穴位是极其复杂的,但是等我开始阅读起来,就深深喜欢……新疆广汇因注册严重违规遭中国篮协处罚,周琦恢复自由身新华社中国篮球协会纪律与道德委员会17日发出处罚决定通知,对在注册等多个方面严重违规的新疆广汇篮球俱乐部有限公司(以下简称新疆广汇)作出处罚,这意味着与该俱乐部存在合同争……中国游客在韩国日本遭侮辱,被当犯人看押,花高价做核酸检测疫情封控3年来,几乎所有人的出行计划都受到了影响。如今封控措施终于取消,很多人早就坐不住了,迫不及待要出国旅游。谁知道,现实给了他们一个响亮的巴掌。他们不仅没……大衣围巾2023最洋气穿搭,保暖时髦两不误,谁穿谁美!在冬天怎么搭配才能够保证温度和风度呢?这时候姐妹们当然要把各种保暖的配饰利用起来啦!而在今年冬天有一种穿法特别火,那就是大衣配围巾,大衣和围巾相辅相成,能够让温暖知性的气质油然……潜行者2切尔诺贝利之心UltimateEdition售价提高IT之家2月16日消息,游戏开发商GSCGameWorld今天宣布将《潜行者2:切尔诺贝利之心》UltimateEdition的售价提高40美元(当前约274元人民币),以便于……Java内存模型(JMM)在高并发的情况下,java的内存模型到底是怎么提供支持的,要说清楚这个问题我们首先要先知道一些硬件层面的的知识,因为java的内存模型都是架构在这些硬件层面上的。计算机的存储结……兔年A股行情密码早知道兔年行情即将开始,市场能涨多少点,或跌多少点?这是股民经常问的,但其实能问这样问题,可能本身就暴露了自己的思维误区。因为市场大部分行情都是无法预测的,所以,预测的意义是储备相关……恋情被曝光!国羽又一现役世界冠军情侣档诞生,郎才女貌甜蜜般配北京时间2月16日,印尼羽毛球传奇明星亨德拉通过社交媒体晒出与中国运动员刘雨辰、黄雅琼一起吃饭的照片,并在与妻子的聊天互动中透露了两人正在恋爱的消息,引发网友们强烈关注。……浙江杭州南宋古街年味浓郁人气旺清河坊复古房屋前灯笼高挂、人头攒动。王刚摄游客在清河坊弥勒佛像前拍照打卡。王刚摄清河坊巷道内灯笼高挂。王刚摄清河坊方回春堂门外灯笼高挂,吸引游人。王刚摄……佗道医疗与山东大学共建骨科人工智能与机器人交叉研究中心!近日,佗道医疗科技有限公司(以下简称佗道医疗)与山东大学达成战略合作,以山东大学齐鲁医院作为研究中心依托基地,创新共建产学研医一体化管理模式的骨科人工智能与机器人交叉研究中心,……浙江入境团队游重启杭州今晚迎来首个香港旅游团2月15日晚,18名香港游客抵达杭州萧山国际机场,这是国家恢复内地居民与香港、澳门团队旅游经营活动后的浙江(杭州)首个香港入境旅游团,标志着浙江(杭州)入境游正式重启。香港游客……三星GalaxyS23内存缩水?标准版开倒车,边框厚度增加!三星GalaxyS23系列定档2月1日(国内时间2月2日凌晨)全球发布,随着时间临近,三款手机详细配置遭到曝光。网友惊讶的发现,为了与高配版进行区分,三星对标准版WiFi、边框……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网