位置: IT常识 - 正文

10分钟用Python编写贪吃蛇小游戏(python编程bim)

编辑:rootadmin

推荐整理分享10分钟用Python编写贪吃蛇小游戏(python编程bim),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:用python编写程序,python编程bim,python代码怎么编,用python简单编程例子,python编程bim,用python简单编程例子,如何用python编程,如何用python编程,内容如对您有帮助,希望把文章链接给更多的朋友!

首先看一下编写贪吃蛇小游戏的主要思路

废话不多说,我们直接来讲解如何利用Python进行贪吃蛇的编写吧

1.调用库以及初始设置

1.1 调用第三方库

Python与其他语言很不一样的一点在于他有很多的第三方库可以调用。在Python编写游戏时,pygame是一个很简单上手的第三方库,可以通过pip直接安装。安装方法在之前的文章中已经讲过,就不再赘述。想要了解更多pygame功能的朋友也可以查阅官方的文档。

这就是编写贪吃蛇时我们需要调用的库。

1importpygame2importsys3importtime4importrandom5frompygame.localsimport*

1.2 初始设置

我们通过这几行代码来初始化pygame,定义窗口(边界)的大小,窗口的标题和图标。

1#初始化pygame2pygame.init()3fpsClock=pygame.time.Clock()45#创建pygame显示层6playSurface=pygame.display.set_mode((640,480))7#定义标题8pygame.display.set_caption('SnakeGo!')9#加载资源图片,game.ico包含在最后的文件中10image=pygame.image.load('game.ico')11#设置图标12pygame.display.set_icon(image)

1.3 定义颜色变量

由于我们需要用到一些颜色,而Python是不自带的。所以我们需要定义几个颜色。

1redColour=pygame.Color(255,0,0)2blackColour=pygame.Color(0,0,0)3whiteColour=pygame.Color(255,255,255)4greyColour=pygame.Color(150,150,150)5LightGrey=pygame.Color(220,220,220)

2.GameOver

10分钟用Python编写贪吃蛇小游戏(python编程bim)

之前提到,所有游戏最重要的部分是循环。而GameOver函数就是跳出这个循环的条件。这里给出当蛇吃到自己身体或者碰到边界时显示的界面(判断死亡的代码会在之后展示)

1#定义gameOver函数2defgameOver(playSurface,score):3#显示GAMEOVER并定义字体以及大小4gameOverFont=pygame.font.Font('arial.ttf',72)5gameOverSurf=gameOverFont.render('GameOver',True,greyColour)6gameOverRect=gameOverSurf.get_rect()7gameOverRect.midtop=(320,125)8playSurface.blit(gameOverSurf,gameOverRect)9#显示分数并定义字体和大小10scoreFont=pygame.font.Font('arial.ttf',48)11scoreSurf=scoreFont.render('SCORE:'+str(score),True,greyColour)12scoreRect=scoreSurf.get_rect()13scoreRect.midtop=(320,225)14playSurface.blit(scoreSurf,scoreRect)15pygame.display.flip()#刷新显示界面16#休眠5秒后自动关闭17time.sleep(5)18pygame.quit()19sys.exit()

3.贪吃蛇与树莓

接下来介绍游戏的主题部分,即贪吃蛇与蛇莓的显示以及运动。

3.1 定义初始位置

我们将整个界面看成许多20*20的小方块,每个方块代表一个单位,蛇的长度就可以用几个单位表示啦。这里蛇的身体用列表的形式存储,方便之后的删减。

1#初始化变量2snakePosition=[100,100]#蛇头位置3snakeSegments=[[100,100],[80,100],[60,100]]#初始长度为3个单位4raspberryPosition=[300,300]#树莓位置5raspberrySpawned=1#树莓个数6direction='right'#初始方向7changeDirection=direction8score=0#初始分数

3.2 键盘输入判断蛇的运动

我们需要通过键盘输入的上下左右键或WASD来控制蛇类运动,同时加入按下Esc就退出游戏的功能。

1#检测例如按键等pygame事件2foreventinpygame.event.get():3ifevent.type==QUIT:4pygame.quit()5sys.exit()6elifevent.type==KEYDOWN:7#判断键盘事件8ifevent.key==K_RIGHTorevent.key==ord('d'):9changeDirection='right'10ifevent.key==K_LEFTorevent.key==ord('a'):11changeDirection='left'12ifevent.key==K_UPorevent.key==ord('w'):13changeDirection='up'14ifevent.key==K_DOWNorevent.key==ord('s'):15changeDirection='down'16ifevent.key==K_ESCAPE:#按esc退出游戏17pygame.event.post(pygame.event.Event(QUIT))

贪吃蛇运动有一个特点:不能反方向运动。所以我们需要加入限制条件。

1#判断是否输入了反方向2ifchangeDirection=='right'andnotdirection=='left':3direction=changeDirection4ifchangeDirection=='left'andnotdirection=='right':5direction=changeDirection6ifchangeDirection=='up'andnotdirection=='down':7direction=changeDirection8ifchangeDirection=='down'andnotdirection=='up':9direction=changeDirection

接下来就是将蛇头按照键盘的输入进行转弯操作,并将蛇头当前的位置加入到蛇身的列表中

1#根据方向移动蛇头的坐标2ifdirection=='right':3snakePosition[0]+=204ifdirection=='left':5snakePosition[0]-=206ifdirection=='up':7snakePosition[1]-=208ifdirection=='down':9snakePosition[1]+=201011#将蛇头的位置加入列表之中12snakeSegments.insert(0,list(snakePosition))

3.3 判断是否吃到树莓

如果蛇头与树莓的方块重合,则判定吃到树莓,将树莓数量清零;而没吃到树莓的话,蛇身就会跟着蛇头运动,蛇身的最后一节将被踢出列表。

1#判断是否吃掉了树莓2ifsnakePosition[0]==raspberryPosition[0]andsnakePosition[1]==raspberryPosition[1]:3raspberrySpawned=04else:5snakeSegments.pop()#每次将最后一单位蛇身踢出列表

3.4 重新生成树莓

当树莓数量为0时,重新生成树莓,同时分数增加。

1#如果吃掉树莓,则重新生成树莓2ifraspberrySpawned==0:3x=random.randrange(1,32)4y=random.randrange(1,24)5raspberryPosition=[int(x*20),int(y*20)]6raspberrySpawned=17score+=1

3.5 刷新显示层

每次蛇与树莓的运动,都会进行刷新显示层的操作来显示。有点类似于动画的“帧”。

1#绘制pygame显示层2playSurface.fill(blackColour)3forpositioninsnakeSegments[1:]:#蛇身为白色4pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))5pygame.draw.rect(playSurface,LightGrey,Rect(snakePosition[0],snakePosition[1],20,20))#蛇头为灰色6pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0],raspberryPosition[1],20,20))#树莓为红色7#刷新pygame显示层8pygame.display.flip()

3.6 判断是否死亡

当蛇头超出边界或者蛇头与自己的蛇身重合时,蛇类死亡,调用GameOver。

1#判断是否死亡2ifsnakePosition[0]>620orsnakePosition[0]<0:#超出左右边界3gameOver(playSurface,score)4ifsnakePosition[1]>460orsnakePosition[1]<0:#超出上下边界5gameOver(playSurface,score)6forsnakeBodyinsnakeSegments[1:]:#蛇碰到自己身体7ifsnakePosition[0]==snakeBody[0]andsnakePosition[1]==snakeBody[1]:8gameOver(playSurface,score)

3.7 控制游戏速度

1#控制游戏速度,长度越长速度越快2iflen(snakeSegments)<40:3speed=6+len(snakeSegments)//44else:5speed=166fpsClock.tick(speed)
本文链接地址:https://www.jiuchutong.com/zhishi/304720.html 转载请保留说明!

上一篇:WordPress禁用Jquery Migrate方法(wordpress jquery)

下一篇:python-面向过程与函数式(python面向过程与面向对象的区别)

  • 诺基亚2700c线控(诺基亚2700c驱动)(诺基亚2700s)

    诺基亚2700c线控(诺基亚2700c驱动)(诺基亚2700s)

  • iqooneo5支持wifi6吗(iQOOneo5支持骁龙畅听吗)

    iqooneo5支持wifi6吗(iQOOneo5支持骁龙畅听吗)

  • 2021款ipadpro电池多少毫安(2021款ipadpro电池休眠)

    2021款ipadpro电池多少毫安(2021款ipadpro电池休眠)

  • 华为手机怎么让软件隐身(华为手机怎么让短信验证码弹出)

    华为手机怎么让软件隐身(华为手机怎么让短信验证码弹出)

  • 手机音量为什么打不开(手机音量为什么突然变低了)

    手机音量为什么打不开(手机音量为什么突然变低了)

  • 手机怎么把视频镜像(手机怎么把视频传到电脑上)

    手机怎么把视频镜像(手机怎么把视频传到电脑上)

  • 耳机有回音是怎么回事(耳机有回音怎么处理)

    耳机有回音是怎么回事(耳机有回音怎么处理)

  • qq上传作业为什么上传不了(qq上传作业为什么相册打不开)

    qq上传作业为什么上传不了(qq上传作业为什么相册打不开)

  • 照片1mb是多少kb(照片1mb是多少px)

    照片1mb是多少kb(照片1mb是多少px)

  • 3dmax哪一版稳定(3dmax哪个版本最好用最常用)

    3dmax哪一版稳定(3dmax哪个版本最好用最常用)

  • 手机换卡了微信还在吗(手机换卡了微信密码忘了怎么找回)

    手机换卡了微信还在吗(手机换卡了微信密码忘了怎么找回)

  • word怎么用斜线(word怎么用斜线划掉字)

    word怎么用斜线(word怎么用斜线划掉字)

  • 动态验证码是什么意思 (动态验证码怎么用)

    动态验证码是什么意思 (动态验证码怎么用)

  • vivo如何修改微信铃声(vivo如何修改微信提示音)

    vivo如何修改微信铃声(vivo如何修改微信提示音)

  • word文档怎么样设双页显示(word文档怎么样可以横版竖版)

    word文档怎么样设双页显示(word文档怎么样可以横版竖版)

  • 饿了吗发票怎么拿(饿了吗发票怎么打印)

    饿了吗发票怎么拿(饿了吗发票怎么打印)

  • iphone11访问限制在哪(ios11访问限制没有了)

    iphone11访问限制在哪(ios11访问限制没有了)

  • 如何查找本地打印机(怎么查找本地手机号)

    如何查找本地打印机(怎么查找本地手机号)

  • 每页都打印表头(每页打印表头和表尾)

    每页都打印表头(每页打印表头和表尾)

  • p30锁屏时间设置(p30锁屏怎么设置时时间显示调整)

    p30锁屏时间设置(p30锁屏怎么设置时时间显示调整)

  • qq收到的礼物在哪里看(qq收到的礼物在哪里展示)

    qq收到的礼物在哪里看(qq收到的礼物在哪里展示)

  • etc重新安装移动后如何重新激活(etc重新安装移动后如何重新激活收费吗)

    etc重新安装移动后如何重新激活(etc重新安装移动后如何重新激活收费吗)

  • 怎么看自己的airpods是第一代还是第二代(怎么看自己的airpods是第三代)

    怎么看自己的airpods是第一代还是第二代(怎么看自己的airpods是第三代)

  • cad图纸怎么输入文字(cad图纸怎么输入密码解密)

    cad图纸怎么输入文字(cad图纸怎么输入密码解密)

  • 路由器重启以后设备连不上网该怎么办(路由器重启以后wifi不见了)

    路由器重启以后设备连不上网该怎么办(路由器重启以后wifi不见了)

  • 柏林亚历山大广场的复活节装饰 (© plainpicture/Christian Reister)(柏林亚历山大广场1980)

    柏林亚历山大广场的复活节装饰 (© plainpicture/Christian Reister)(柏林亚历山大广场1980)

  • 『前端必备』本地数据接口—json-server 详细介绍(入门篇)(前端必会)

    『前端必备』本地数据接口—json-server 详细介绍(入门篇)(前端必会)

  • 浅谈逻辑选择器 -- 父选择器它来了!(逻辑电路选择器)

    浅谈逻辑选择器 -- 父选择器它来了!(逻辑电路选择器)

  • 已申报税额是什么意思,要交吗
  • 缴纳代扣个人所得税分录
  • 夏天单位发防暑物品的通知
  • 开具技术服务费发票需要注意什么
  • 银行汇票存款和银行存款的区别
  • 未支付的货款属于什么会计科目
  • 上市公司回购优先股
  • 公司对员工的罚款最多可以罚多少
  • 银行汇票应计入什么科目
  • 亏损结转本年利润会计分录
  • 融资租赁租金会计科目
  • 报税时其他收入
  • 捐助建学校
  • 培训发票可以抵进项税吗
  • 三代税款手续费申请流程
  • 固定资产出售税务处理方法
  • 增值税普通发票几个点
  • 某物业公司组织工人进入下水道
  • 税收筹划的定义,有哪些筹划的方法
  • 资金清算款项
  • 各行业增值税税负率表2022年
  • 预提费用多少
  • 支付短期借款利息
  • mac怎么把通知栏固定
  • cpu主频在哪看
  • php代码生成器
  • php nsq
  • 马齿苋的功效与作用的功能与主治与用量
  • autorun.exe
  • TypeError: Cannot read properties of undefined (reading ‘NAME‘)报错解决
  • 前端lru
  • launcher.exe什么意思
  • 前端框架react
  • 工程项目成本费用的分类有哪些?
  • linux搭建web服务器
  • vue数据表
  • open是什么含义
  • php类的特性实例是什么
  • ssh-keygen -m pem
  • 银行流水要去哪里打
  • 捐赠利得的会计科目
  • 自然人税收管理系统官网
  • 手机充值如何开公司发票
  • 产品售后维修费放在什么会计科目核算
  • phpcms不支持https怎么办
  • 速动资产扣除应纳税所得
  • python wordcloud库
  • 代销货物如何进账
  • 外管证超期
  • 从合同有什么
  • 并发环境下,共享资源的正确使用方式是
  • 委托加工应税消费品是指委托方提供原料和主要材料
  • 特许权使用费收入按照收到特许权使用费的日期确认收入
  • 计入资本公积的固定资产转出
  • 同一控制下的企业合并和非同一控制下的企业合并的区别
  • 年度所得税汇算清缴报告在哪打印
  • 采购未取得发票怎么结转成本
  • 公司活动费用分录
  • mysql创建用户密码命令
  • 请问linux
  • win7关闭混合睡眠
  • mac怎么管理字体大小
  • WINDOWS10系统怎样看主板
  • 体验Win8灵活分屏贴靠功能图文介绍
  • windows8如何使用
  • win10商店没有图标
  • unity and unity
  • js导出excel文件前端插件
  • javascript学习指南
  • css 网页布局
  • python查看文件类型
  • android.intent.extra.text
  • javascrpt绑定事件之匿名函数无法解除绑定问题
  • python开发的程序怎么运行
  • python 数据类型
  • python安装心得
  • jquery 模态窗口
  • 贵州省 税务局
  • 沈阳沈河区税务局待遇
  • 福建地税网上办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设