TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
故如虹,知恩;故如月,知明
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
119篇
.NET MVC
11篇
英语
3篇
随笔
86篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
151篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
python游戏开发库pygame。pygame实现贪吃蛇2 , 游戏结束界面与开始界面
11499
人阅读
2022/7/27 17:29
总访问:
3919657
评论:
0
收藏:
0
手机
分类:
Python
**封装那个画格子的方法,为什么没有影响到全局变量** 是我理解错了,这个方法里边访问的行列,地图高宽这些是访问哇,又不是改变,访问是可以访问的,但是改变后,外面的变量是不变的,只是在方法里边起作用,除非使用global申请一下。注意区分,是访问,还是修改。 ``` def drawRect(point,color): ## 格子的高度 = 地图的高度/行数 boxheight = height/row ## 格子的宽度 = 地图的高度/列数 boxwidth = width/col ## 距离左边的位置=列宽*所在列 box_head_left = point.col*boxwidth ## 距离上边的位置=行高*所在行 box_head_top = point.row * boxheight ## 根据定义的行列位置画出来格子所在的位置 pygame.draw.rect(screen,color,(box_head_left,box_head_top,boxwidth,boxheight)) ``` ### 十:游戏开始界面制作 直接来就开始游戏,没有一个简单的界面不太好哇。我们来做一个简单的开始界面。类似这样 ![](https://img.tnblog.net/arcimg/aojiancc2/55626a1a0cc944d385b2b767d1753a55.png) 其实就是一个图片和一点文字而已 -。- 吐槽一下,图片资料太难找了。 **先封装一个绘制文字的方法,要重复使用。** ``` def drawText(_text,_fontsize,_textColor,_position): myfont = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',_fontsize) # 如果不要字体第一个参数设置为null即可,系统里边的字体默认都在C:/Windows/Fonts下面 ##myfont=pygame.font.Font(None,_fontsize) text=myfont.render(_text,True,_textColor) #获得显示对象的rect区域坐标 textRect =text.get_rect() # 设置显示对象居中 textRect.center = _position # 将准备好的文本信息,绘制到主屏幕 Screen 上。 screen.blit(text,textRect) ``` **然后封装开始游戏的方法** 里边也要写一个死循环监听按键 ``` ## 开始游戏 def beginGameShow(): image_surface = pygame.image.load('img/3.jpg').convert() image_new = pygame.transform.scale(image_surface,(800,600)) # 将图像放置在主屏幕上 screen.blit(image_new,(0,0)) drawText("贪吃蛇大作战",60,(0,0,0),(400,110)) drawText("F1开始! F2退出!",20,(0,0,0),(390,510)) pygame.display.flip() isRuning = True while isRuning: ## 直接放一张背景图,或者放一个背景图,打印一些字即可。还有简单的动画 clock.tick(13) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() ## 监听按键事件 if event.type == pygame.KEYDOWN: print(event) ## 按下了f1 if event.key == 1073741882: isRuning=False ## 按下了f2 if event.key == 1073741883: sys.exit() ``` ### 十一:游戏结束后,展示游戏界面,重新开始游戏 ``` ## 游戏初始化 def gameInit(): global headPoint global snakeBody headPoint = Point(int(row/2),int(col/2)) snakeBody = [ Point(row=headPoint.row,col=headPoint.col+1), Point(row=headPoint.row,col=headPoint.col+2), Point(row=headPoint.row,col=headPoint.col+3), Point(row=headPoint.row,col=headPoint.col+4), Point(row=headPoint.row,col=headPoint.col+5) ] print("重新开始游戏了------------") ``` ### 十二:重新开始游戏,一直提示撞自己死了的情况分析 明明已经初始化了,看输出,居然蛇头位置也改变了,蛇身也改变了....,为什么呢,没有去移动蛇头哇,蛇头的移动在下面哇。只有 ![](https://img.tnblog.net/arcimg/aojiancc2/61c2d5cd895c4d5b9a6be656d78e5e0d.png) 难道是游戏结束写到了这个下面了,所以不行,但是蛇头位置也不应该会变化呢...,最多只是蛇尾少了而已。 ![](https://img.tnblog.net/arcimg/aojiancc2/d91a3ee4122e415c9c6c79108352a29f.png) 测试了一下,输出感觉没有问题。是不是因为方向哦...初始化后,如果蛇头方向右不是蛇头就跑到身体里边去了么,感觉就是这个问题。但是判断游戏结束是在运动前面一步的哇....不对..第一次判断虽然通过了,但是趋势是向右的,所以会撞自己死掉。果然如此,一来就按右,就会挂掉,然后F1开始就会一直挂。 所以要初始化方向,不能让死了的时候是什么方向,重新开始就是什么方向。<font color=red>而且还要注意使用全局变量哇</font>只是这样还是不行的哦。看颜色都看得出来是灰色的。 ![](https://img.tnblog.net/arcimg/aojiancc2/8b88e87b08394be69a36d146470ccbd3.png) 所以现在重新开始的方法变成了 ``` ## 游戏初始化 def gameInit(): global headPoint global snakeBody global snakeDirect headPoint = Point(int(row/2),int(col/2)) snakeBody = [ Point(row=headPoint.row,col=headPoint.col+1), Point(row=headPoint.row,col=headPoint.col+2), Point(row=headPoint.row,col=headPoint.col+3), Point(row=headPoint.row,col=headPoint.col+4), Point(row=headPoint.row,col=headPoint.col+5) ] ## 注意要初始化方向 snakeDirect = "left" print("重新开始游戏了------------") ## 做一下数据测试 # print(headPoint.col,headPoint.row) # for item in snakeBody: # print(item.col,item.row) ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}