纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Python100行实现一个简单的贪吃蛇小游戏(附代码)

1月13日 话藏心投稿
  一、游戏介绍
  贪吃蛇是个非常简单的游戏,适合练手。先来看一下我的游戏截图:
  游戏截图
  玩法介绍:
  回车键:开始游戏
  空格键:暂停继续
  方向键或WSAD键:控制移动方向。
  食物分红、绿、蓝三种,分别对应10分、20分、30分,每吃一个食物增加对应分值,每增加100分速度加快一级,没有设置关卡,我玩到1100分,速度太快了,然后就GAMEOVER了。二、游戏分析
  贪吃蛇这个游戏很简单,屏幕上随机出现一个点,表示食物,上下左右控制蛇的移动,吃到食物以后蛇的身体加长,蛇碰到边框或自己的身体,则游戏结束。
  我们先来分析一下,要写出这个游戏来需要注意哪些点。
  1、蛇怎么表示
  我们可以将整个游戏区域划分成一个个的小格子,由一组连在一起的小格子组成蛇,我们可以用不同的颜色来表示,如上图中,我以深色表示背景,浅色表示蛇。
  我们可以用坐标来表示每一个小方格,X轴和Y轴的范围都是可以设定好的。用一个列表来存放蛇身的坐标,那么一条蛇就出来了,最后只要显示的时候以不同的颜色表示即可。
  2、蛇怎么移动?
  第一反应就是像蚯蚓蠕动一样,每一个小方块向前移动一格,但这样实现起来很麻烦。一开始就是被这里卡住了。
  想象一下我们玩过的贪吃蛇,每次蛇的移动感觉上是整体往前移动了一格,排除掉脑子中蛇的动作,细想移动前和移动后蛇的位置变化,其实除了头尾,其他部分根本就没有变。那就简单了,将下一格的坐标添加到列表开头,并移除列表的最后一个元素,就相当于蛇向前移动了一格。
  3、如何判定游戏结束?
  蛇移动超出了游戏区的范围或者碰到了自己就算输了,轴坐标的范围是事先定好的,超出范围很容易判断。那么如何判断碰到自己呢?
  如果脑子里想的是蛇动的画面,那真的比较难了,但是放到代码中,我们的蛇是一个列表,那么只要判断下一格的坐标是否已经包含在蛇的列表中岂不就可以了?
  理清了这些问题,我们就可以开始编码了。三、代码实现
  由于程序中要频繁的对蛇进行头尾的添加和删除操作,为了性能更好那么一点,我们用deque代替列表。
  首先需要初始化蛇,蛇的初始长度为3,位置位于左上角。游戏区域的坐标范围SCOPEX(0,SCREENWIDTHSIZE1)SCOPEY(2,SCREENHEIGHTSIZE1)初始化蛇snakedeque()definitsnake():snake。clear()snake。append((2,scopey〔0〕))snake。append((1,scopey〔0〕))snake。append((0,scopey〔0〕))创建食物,在屏幕内随机选取一个点作为食物,但是要保证食物不在蛇身上。食物defcreatefood(snake):foodxrandom。randint(SCOPEX〔0〕,SCOPEX〔1〕)foodyrandom。randint(SCOPEY〔0〕,SCOPEY〔1〕)while(foodx,foody)insnake:如果食物出现在蛇身上,则重来foodxrandom。randint(SCOPEX〔0〕,SCOPEX〔1〕)foodyrandom。randint(SCOPEY〔0〕,SCOPEY〔1〕)returnfoodx,foody
  蛇的移动可以有4个方向,用一个元组来表示移动的方向,每次按下方向键,给赋对应的值
  方向pos(1,0)foreventinpygame。event。get():ifevent。typeQUIT:sys。exit()elifevent。typeKEYDOWN:ifevent。keyin(Kw,KUP):这个判断是为了防止蛇向上移时按了向下键,导致直接GAMEOVERifpos〔1〕:pos(0,1)elifevent。keyin(Ks,KDOWN):ifpos〔1〕:pos(0,1)elifevent。keyin(Ka,KLEFT):ifpos〔0〕:pos(1,0)elifevent。keyin(Kd,KRIGHT):ifpos〔0〕:pos(1,0)
  而蛇的移动就可以表示为:nexts(snake〔0〕〔0〕pos〔0〕,snake〔0〕〔1〕pos〔1〕)ifnextsfood:吃到了食物snake。appendleft(nexts)foodcreatefood(snake)else:ifSCOPEX〔0〕nexts〔0〕SCOPEX〔1〕andSCOPEY〔0〕nexts〔1〕SCOPEY〔1〕andnextsnotinsnake:snake。appendleft(nexts)snake。pop()else:gameoverTrue
  完整代码贪吃蛇小游戏importrandomimportsysimporttimeimportpygamefrompygame。localsimportfromcollectionsimportdequeSCREENWIDTH600SCREENHEIGHT480SIZE20defprinttext(screen,font,x,y,text,fcolor(255,255,255)):imgTextfont。render(text,True,fcolor)screen。blit(imgText,(x,y))defmain():pygame。init()screenpygame。display。setmode((SCREENWIDTH,SCREENHEIGHT))pygame。display。setcaption(贪吃蛇)light(100,100,100)蛇的颜色dark(200,200,200)食物颜色font1pygame。font。SysFont(SimHei,24)得分的字体font2pygame。font。Font(None,72)GAMEOVER的字体red(200,30,30)GAMEOVER的字体颜色fwidth,fheightfont2。size(GAMEOVER)linewidth1网格线宽度black(0,0,0)网格线颜色bgcolor(40,40,60)背景色方向,起始向右posx1posy0如果蛇正在向右移动,那么快速点击向下向左,由于程序刷新没那么快,向下事件会被向左覆盖掉,导致蛇后退,直接GAMEOVERb变量就是用于防止这种情况的发生bTrue范围scopex(0,SCREENWIDTHSIZE1)scopey(2,SCREENHEIGHTSIZE1)蛇snakedeque()食物foodx0foody0初始化蛇definitsnake():nonlocalsnakesnake。clear()snake。append((2,scopey〔0〕))snake。append((1,scopey〔0〕))snake。append((0,scopey〔0〕))食物defcreatefood():nonlocalfoodx,foodyfoodxrandom。randint(scopex〔0〕,scopex〔1〕)foodyrandom。randint(scopey〔0〕,scopey〔1〕)while(foodx,foody)insnake:为了防止食物出到蛇身上foodxrandom。randint(scopex〔0〕,scopex〔1〕)foodyrandom。randint(scopey〔0〕,scopey〔1〕)initsnake()createfood()gameoverTruestartFalse是否开始,当startTrue,gameoverTrue时,才显示GAMEOVERscore0得分orispeed0。5原始速度speedorispeedlastmovetimeNonepauseFalse暂停whileTrue:foreventinpygame。event。get():ifevent。typeQUIT:sys。exit()elifevent。typeKEYDOWN:ifevent。keyKRETURN:ifgameover:startTruegameoverFalsebTrueinitsnake()createfood()posx1posy0得分score0lastmovetimetime。time()elifevent。keyKSPACE:ifnotgameover:pausenotpauseelifevent。keyin(Kw,KUP):这个判断是为了防止蛇向上移时按了向下键,导致直接GAMEOVERifbandnotposy:posx0posy1bFalseelifevent。keyin(Ks,KDOWN):ifbandnotposy:posx0posy1bFalseelifevent。keyin(Ka,KLEFT):ifbandnotposx:posx1posy0bFalseelifevent。keyin(Kd,KRIGHT):ifbandnotposx:posx1posy0bFalse填充背景色screen。fill(bgcolor)画网格线竖线forxinrange(SIZE,SCREENWIDTH,SIZE):pygame。draw。line(screen,black,(x,scopey〔0〕SIZE),(x,SCREENHEIGHT),linewidth)画网格线横线foryinrange(scopey〔0〕SIZE,SCREENHEIGHT,SIZE):pygame。draw。line(screen,black,(0,y),(SCREENWIDTH,y),linewidth)ifgameover:ifstart:printtext(screen,font2,(SCREENWIDTHfwidth)2,(SCREENHEIGHTfheight)2,GAMEOVER,red)else:curTimetime。time()ifcurTimelastmovetimespeed:ifnotpause:bTruelastmovetimecurTimenexts(snake〔0〕〔0〕posx,snake〔0〕〔1〕posy)ifnexts〔0〕foodxandnexts〔1〕foody:吃到了食物createfood()snake。appendleft(nexts)score10speedorispeed0。03(score100)else:ifscopex〔0〕nexts〔0〕scopex〔1〕andscopey〔0〕nexts〔1〕scopey〔1〕andnextsnotinsnake:snake。appendleft(nexts)snake。pop()else:gameoverTrue画食物ifnotgameover:避免GAMEOVER的时候把GAMEOVER的字给遮住了pygame。draw。rect(screen,light,(foodxSIZE,foodySIZE,SIZE,SIZE),0)画蛇forsinsnake:pygame。draw。rect(screen,dark,(s〔0〕SIZElinewidth,s〔1〕SIZElinewidth,SIZElinewidth2,SIZElinewidth2),0)printtext(screen,font1,30,7,f速度:{score100})printtext(screen,font1,450,7,f得分:{score})pygame。display。update()ifnamemain:main()
  最后
  为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
  里面有适合小白新手的全套资料给到大家
  快来和小鱼一起成长进步吧!
  100多本Python电子书(主流和经典的书籍应该都有了)
  Python标准库资料(最全中文版)
  爬虫项目源码(四五十个有趣且经典的练手项目及源码)
  Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
  Python学习路线图(告别不入流的学习)
  资料
  对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
  觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞()
  获。得教程的方式
  转发本文,私信:视频,
  即可获取!

通关仅一周,内地百万大军新春抢游港澳台!时隔三年,内地与港澳恢复免检疫通关。国家移民管理局昨天首度披露,八日以来的短短数天,内地已有99。8万人申请往来港澳台的签注证件,预计农历新年前申请数目持续增加。北……湖人6大交易动向,淡化欧文,追求戈登希尔德,瓜哥有望重新回归湖人队休赛期草草签下几人之后,就一直没有动静了,尽管老板珍妮巴斯表态,湖人队补强还未结束。但从明面上来看,湖人的现状确实是非常困难,威少难送走,其他球员难获得,下面来汇总一下湖……一刀斩不断的兄弟情守望先锋源氏和半藏的爱恨情仇竜头蛇尾这印在花村最后一个点的画轴上的四个汉字,见证了家族的昌盛,见证了二龙缠斗,见证了无数场数位英雄们于此的战斗。而今属于这个地方的两位英雄仍艰苦奋斗在世界的各个角落惩奸除恶……禁欲脸美出天际,有种东方美叫杜鹃美丽只愉悦眼睛,而气质的优雅使人心灵着迷。优雅是一种深邃的美,是一种纯粹的气息,更是一种天然去雕饰的韵味。杜鹃,便是这样的存在。小方脸,细长眉眼,颧骨微高,她不是传统美女……酒店无人售货机能赚钱吗?如何才能利益最大化?酒店无人售货机能赚钱吗?如何才能利益最大化?相信大家好多人都看到过酒店房间里面摆放的酒店无人售货机,那么这些酒店售货机摆在房间里面是怎么赚钱的呢?下面我就来和大家分享一下。……新房装修,我给儿童房装了云米新风空调如何选择空调家里装修房间通风不好怎么办?天气因素不方便开窗如何解决?目前我就遇到了这样的问题,装修好的房子还没入住,由于距离比较远,不能随时去通风,作为儿童房,是我最担心……北京率先允许自动驾驶车辆方向盘后无人,百度首批获准南都讯4月28日,北京发放无人化载人示范应用通知书,百度成为首家获准企业,其旗下自动驾驶出行服务平台萝卜快跑正式开启无人化自动驾驶出行服务,这意味着方向盘后无人的自动驾驶服务在……不断传来好消息,国产芯粒技术突破了5nm,美芯大厂开出了5年缺芯少魂,在过去的几十年里,一直是国内科技界的一个热点,而之所以会出现这种状况,很大程度上是因为我们国家的工业化太过落后,造不如买的理念已经根深蒂固,所以我们的核心技术和设备都……Python100行实现一个简单的贪吃蛇小游戏(附代码)一、游戏介绍贪吃蛇是个非常简单的游戏,适合练手。先来看一下我的游戏截图:游戏截图玩法介绍:回车键:开始游戏空格键:暂停继续方向键或WSAD键……大余丫山国家级旅游度假区如何玩?最全攻略来啦国家级旅游度假区大余丫山旅游度假区最in、最全玩转攻略来咯乡村旅游胜地、森林康养乐园、运动休闲氧吧趣丫山,等你来野!来丫山怎么住?01……Doinb不怕得罪人,公开表示不看好RNG,T1是目前最强的最近LOL的世界赛是大家讨论的重点,各大战队都在努力的训练,并且认真对待比赛,除了世界赛的选手之外,其他各赛区没有进入世界赛的选手基本上都是在直播补时长,或者是回家休息之类的,……热血传奇神舰传奇3是多少人的回忆?曾经因为传奇3我抛弃了最爱我的女人,现在为了我最爱的女人我放弃了传奇3。传奇3,高手玩的是感情,菜鸟玩的是技术!今天小编来给大家说说《传奇3》!以前的传奇3,1000人同……
Anker推出快充超极充二代充电宝充电器,179元IT之家5月19日消息Anker现已推出快充超极充二代,是上代超极充5000的升级款,自带约5000mAh电芯容量,充电宝充电器双模式下,单C口均支持18W快充。IT之家……Anker将推新款GaN充电器60W双C口,插脚可替换IT之家5月10日消息根据Anker的官方消息,Anker将推出十余款新品,其中就包括新款GaN充电器,60W功率,双C口,插脚可替换。IT之家了解到,AnkerGaN6……Anker推出新款USB3。0分线器一拖四设计,售价49元IT之家4月13日消息根据Anker官方的消息,AnkerUSB3。0高速4口拓展坞今日开售,即日起到4月17日,抢购价49元。IT之家了解到,AnkerUSB3。0高速……A股第二轮反弹可期,周四行情分析写在前面,一直被很多人泼脏水,我不知道为什么?比如:苦口婆心,说了几个月的远离,逻辑也分享很清晰,我不是冷嘲热讽,我也是散户,散户这个词是中性。今日,低开,探底回升,再次……LOEWE罗意威2023早春系列手袋乔欣携青绿釉色PuzzleEdge手袋,悠享慵懒假日。LOEWE罗意威2023早春周雨彤携白釉色Hammock手袋,释放酷飒气场。LOEWE罗意威2023早春演员任……倍思公布探索版65WGaN充电器快充看得见IT之家5月15日消息今天下午,倍思公布了将于本周上线的三款新品,其中就包括一款探索版65WGaN充电器,官方称真快充看得见。根据官方的海报,这款探索版GaN充电器最大功……360GaN氮化镓65W快充充电器上架三口输出,售价169元感谢IT之家网友复活甲的线索投递!IT之家5月11日消息360GaN氮化镓65W快充充电器正式上架京东商城,售价169元。支持三口,支持90度折叠插头。360GaN……曝英特尔12代酷睿全面采用大小核设计,支持DDR54400内IT之家10月4日消息外媒NoteBookCheck放出了英特尔12代酷睿AlderLake(ADL)混合架构处理器的更多消息,该系列将分为AlderLakeP和AlderLa……酒店钟点房还有两个小时,两小时能干嘛?对一般人来说够了相信大家一定都住过酒店,不管是外出出差,假期游玩,还是情侣度蜜月,有需要酒店的存在,我们都知道酒店就是晚上睡觉用的,白天的话大多酒店会推出钟点房,而且体验钟点房时间不等,两小时……远远不够,部分索尼PS5预购要到明年才能发货IT之家9月30日消息兴奋预购下一代PlayStation5的玩家们可能会在发售日感到失望,因为一些PS5的预购要到明年才能完成发货。据VGC报道,爱尔兰GameStop……英超最新积分战报3大豪门丢分,曼城甩开利物浦10分,曼联绝平北京时间10月22日晚至23日凌晨,英超进行了4场比赛的较量。3大豪门都丢分,其中利物浦最惨。利物浦在客场挑战诺丁汉森林,结果01落败,阿沃尼伊打进全场唯一的进球。切尔西和曼联……融创退出多个合作项目3项目分别由华宇集团和信达地产接手澎湃新闻记者李晓青陷入流动性危机的融创集团近日连续转让其多个合作项目股权。8月25日,澎湃新闻(www。thepaper。cn)从天眼查上查询发现,融创退出了和华宇……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形