位置: 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面向过程与面向对象的区别)

  • 快充和闪充的区别(快充和闪充的区别是线还是充电器)

    快充和闪充的区别(快充和闪充的区别是线还是充电器)

  • 微信里的录屏在哪里(微信录屏按钮在哪打开)

    微信里的录屏在哪里(微信录屏按钮在哪打开)

  • iphonex长宽高(iphonex尺寸长宽厘米)

    iphonex长宽高(iphonex尺寸长宽厘米)

  • win7无法进入系统和安全模式(win7无法进入系统)

    win7无法进入系统和安全模式(win7无法进入系统)

  • 健康码不显示全名怎么办(健康码不显示全名怎么解决)

    健康码不显示全名怎么办(健康码不显示全名怎么解决)

  • 闲鱼买家确认收货后钱多久到(闲鱼买家确认收货后钱会到哪里)

    闲鱼买家确认收货后钱多久到(闲鱼买家确认收货后钱会到哪里)

  • 抖音没关注能发消息吗(抖音没关注能发红包吗)

    抖音没关注能发消息吗(抖音没关注能发红包吗)

  • 为什么信息不能显示在屏幕上(为什么信息不能送达)

    为什么信息不能显示在屏幕上(为什么信息不能送达)

  • 华为mate30pro自动关机怎么回事(华为mate30pro自动重启怎么解决)

    华为mate30pro自动关机怎么回事(华为mate30pro自动重启怎么解决)

  • 五g手机可以用四g网络(五g手机可以用4g套餐吗)

    五g手机可以用四g网络(五g手机可以用4g套餐吗)

  • 红米k305g是真5g吗(红米k305g是5g手机吗)

    红米k305g是真5g吗(红米k305g是5g手机吗)

  • 华为mate9pro有红外线功能吗(华为mate9pro有红外线遥控功能吗)

    华为mate9pro有红外线功能吗(华为mate9pro有红外线遥控功能吗)

  • 苹果手机能用快充头吗(苹果手机能用快手吗)

    苹果手机能用快充头吗(苹果手机能用快手吗)

  • 开热点为什么别人用不了(开热点为什么别人用着很卡)

    开热点为什么别人用不了(开热点为什么别人用着很卡)

  • 爱奇艺里下载的视频怎么导出(爱奇艺如何下载)

    爱奇艺里下载的视频怎么导出(爱奇艺如何下载)

  • 苹果手机微信图标被隐藏了怎么办(苹果手机微信图片删除了怎么恢复)

    苹果手机微信图标被隐藏了怎么办(苹果手机微信图片删除了怎么恢复)

  • 微博缓存的视频在哪里(微博缓存的视频找不到)

    微博缓存的视频在哪里(微博缓存的视频找不到)

  • 手机图片怎么直接打印(手机图片怎么直接转到u盘上)

    手机图片怎么直接打印(手机图片怎么直接转到u盘上)

  • 抖音照片和视频怎么放一起(抖音照片和视频怎么合成一个视频)

    抖音照片和视频怎么放一起(抖音照片和视频怎么合成一个视频)

  • 三星bixby怎么设置说话(三星bixby页面的设置不见了)

    三星bixby怎么设置说话(三星bixby页面的设置不见了)

  • 全民k歌视频有美颜吗(全民k歌视频模糊怎么办)

    全民k歌视频有美颜吗(全民k歌视频模糊怎么办)

  • 菜鸟驿站如何拒签(菜鸟驿站如何拒收快递)

    菜鸟驿站如何拒签(菜鸟驿站如何拒收快递)

  • 第36届大众电影百花奖(第36届大众电影百花奖直播回放)

    第36届大众电影百花奖(第36届大众电影百花奖直播回放)

  • 收到个税返还手续费怎么算增值税附加
  • 纳税人办理退税流程
  • 融资性售后回租印花税
  • 开发票,对方收取税点,如何计算
  • 新公司注册完成的后续流程
  • 增值税专用发票几个点
  • 新会计准则开办费分摊
  • 生产事故造成怎么样赔付
  • 公司代扣代缴的个人所得税怎么做账
  • 公司领导培训费怎么入账
  • 企业发生什么
  • 增值税留底税怎么计算
  • 内蒙古地税电子税务局app
  • 企业并购重组有哪些
  • 固定资产折旧在资产负债表属于什么
  • 研发费用没做账怎么调账
  • 财务报表教育费附加包含地方教育费附加吗
  • 公司没有发票的做内账,那么支付款从哪里来
  • 上市公司资产重组办法
  • 劳务派遣公司开票几个点
  • 采购费用应计入材料采购成本
  • 购入办公桌椅怎样入账
  • 未分配利润分配利润分录
  • php cgi配置
  • 建筑工程增值税税率是多少
  • 固定资产计提折旧的原则
  • 固定资产如何做账务处理
  • 外出经营范围
  • 无形资产处置计入哪里
  • 记账凭证按其用途
  • 销售货物应如何记账
  • 多个php文件整合到一起
  • 收回前欠货款会导致资产总额减少吗
  • Code For Better 谷歌开发者之声——初识Web与谷歌,拉起兴趣之心。
  • php批量替换字符串
  • 金银首饰零售商属于消费税纳税人吗
  • 返还土地出让金违法吗?
  • 哪些项目可以在城镇开发边界外
  • 小规模纳税人要缴纳哪些税
  • 已经红冲的发票显示正常
  • 金蝶k3明细账如何查询
  • mongodb导出数据库数据文件
  • 中小企业估值
  • 增值税申报表第18栏怎么来的
  • 保证金存款账户需要销户吗
  • 成本票和进项票举例说明
  • sql3表连接查询
  • 抄税是什么时间截止
  • 收到退回的企业所得税分录
  • 消防工程公司的成本包括哪些
  • 实际开票金额和转账金额不一致怎么做
  • 在建工程领用原材料税费怎么处理
  • 结转本年利润的账务处理
  • 政府扶持资金怎么做账
  • 固定资产不折旧直接进费用
  • 单位车辆折旧费可以税前扣除吗
  • 装修费用摊销的会计分录怎么写
  • 抵货款怎么做账
  • 生产成本的会计科目分录
  • 今年成立的公司需要申报残疾人保障金吗
  • mysql_error
  • win8.1怎么样
  • win10自动调整时间不准
  • xbox预览系统
  • server2008开机启动项设置
  • windows 专业版10安装后文件会丢失嘛
  • Windows XP英文版序列号
  • win7系统无法创建分区也无法定位
  • window10英文版下载
  • js判断手机号
  • yarn和npm一起使用冲突
  • android canvas scale
  • vue.js基础语法
  • js 上传
  • shell脚本sudo免输密码
  • javascript教学视频
  • android基于
  • python3 flask
  • 银川买的新房契税怎么算
  • 电子增值税专用发票和纸质增值税专用发票的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设