应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

python游戏开发库pygame。pygame实现贪吃蛇2 , 游戏结束界面与开始界面

13659人阅读 2022/7/27 17:29 总访问:5191928 评论:0 收藏:0 手机
分类: Python

封装那个画格子的方法,为什么没有影响到全局变量
是我理解错了,这个方法里边访问的行列,地图高宽这些是访问哇,又不是改变,访问是可以访问的,但是改变后,外面的变量是不变的,只是在方法里边起作用,除非使用global申请一下。注意区分,是访问,还是修改。

  1. def drawRect(point,color):
  2. ## 格子的高度 = 地图的高度/行数
  3. boxheight = height/row
  4. ## 格子的宽度 = 地图的高度/列数
  5. boxwidth = width/col
  6. ## 距离左边的位置=列宽*所在列
  7. box_head_left = point.col*boxwidth
  8. ## 距离上边的位置=行高*所在行
  9. box_head_top = point.row * boxheight
  10. ## 根据定义的行列位置画出来格子所在的位置
  11. pygame.draw.rect(screen,color,(box_head_left,box_head_top,boxwidth,boxheight))

十:游戏开始界面制作

直接来就开始游戏,没有一个简单的界面不太好哇。我们来做一个简单的开始界面。类似这样

其实就是一个图片和一点文字而已 -。- 吐槽一下,图片资料太难找了。

先封装一个绘制文字的方法,要重复使用。

  1. def drawText(_text,_fontsize,_textColor,_position):
  2. myfont = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',_fontsize)
  3. # 如果不要字体第一个参数设置为null即可,系统里边的字体默认都在C:/Windows/Fonts下面
  4. ##myfont=pygame.font.Font(None,_fontsize)
  5. text=myfont.render(_text,True,_textColor)
  6. #获得显示对象的rect区域坐标
  7. textRect =text.get_rect()
  8. # 设置显示对象居中
  9. textRect.center = _position
  10. # 将准备好的文本信息,绘制到主屏幕 Screen 上。
  11. screen.blit(text,textRect)

然后封装开始游戏的方法

里边也要写一个死循环监听按键

  1. ## 开始游戏
  2. def beginGameShow():
  3. image_surface = pygame.image.load('img/3.jpg').convert()
  4. image_new = pygame.transform.scale(image_surface,(800,600))
  5. # 将图像放置在主屏幕上
  6. screen.blit(image_new,(0,0))
  7. drawText("贪吃蛇大作战",60,(0,0,0),(400,110))
  8. drawText("F1开始! F2退出!",20,(0,0,0),(390,510))
  9. pygame.display.flip()
  10. isRuning = True
  11. while isRuning:
  12. ## 直接放一张背景图,或者放一个背景图,打印一些字即可。还有简单的动画
  13. clock.tick(13)
  14. for event in pygame.event.get():
  15. if event.type == pygame.QUIT:
  16. pygame.quit()
  17. sys.exit()
  18. ## 监听按键事件
  19. if event.type == pygame.KEYDOWN:
  20. print(event)
  21. ## 按下了f1
  22. if event.key == 1073741882:
  23. isRuning=False
  24. ## 按下了f2
  25. if event.key == 1073741883:
  26. sys.exit()

十一:游戏结束后,展示游戏界面,重新开始游戏

  1. ## 游戏初始化
  2. def gameInit():
  3. global headPoint
  4. global snakeBody
  5. headPoint = Point(int(row/2),int(col/2))
  6. snakeBody = [
  7. Point(row=headPoint.row,col=headPoint.col+1),
  8. Point(row=headPoint.row,col=headPoint.col+2),
  9. Point(row=headPoint.row,col=headPoint.col+3),
  10. Point(row=headPoint.row,col=headPoint.col+4),
  11. Point(row=headPoint.row,col=headPoint.col+5)
  12. ]
  13. print("重新开始游戏了------------")

十二:重新开始游戏,一直提示撞自己死了的情况分析

明明已经初始化了,看输出,居然蛇头位置也改变了,蛇身也改变了….,为什么呢,没有去移动蛇头哇,蛇头的移动在下面哇。只有

难道是游戏结束写到了这个下面了,所以不行,但是蛇头位置也不应该会变化呢…,最多只是蛇尾少了而已。

测试了一下,输出感觉没有问题。是不是因为方向哦…初始化后,如果蛇头方向右不是蛇头就跑到身体里边去了么,感觉就是这个问题。但是判断游戏结束是在运动前面一步的哇….不对..第一次判断虽然通过了,但是趋势是向右的,所以会撞自己死掉。果然如此,一来就按右,就会挂掉,然后F1开始就会一直挂。

所以要初始化方向,不能让死了的时候是什么方向,重新开始就是什么方向。而且还要注意使用全局变量哇只是这样还是不行的哦。看颜色都看得出来是灰色的。

所以现在重新开始的方法变成了

  1. ## 游戏初始化
  2. def gameInit():
  3. global headPoint
  4. global snakeBody
  5. global snakeDirect
  6. headPoint = Point(int(row/2),int(col/2))
  7. snakeBody = [
  8. Point(row=headPoint.row,col=headPoint.col+1),
  9. Point(row=headPoint.row,col=headPoint.col+2),
  10. Point(row=headPoint.row,col=headPoint.col+3),
  11. Point(row=headPoint.row,col=headPoint.col+4),
  12. Point(row=headPoint.row,col=headPoint.col+5)
  13. ]
  14. ## 注意要初始化方向
  15. snakeDirect = "left"
  16. print("重新开始游戏了------------")
  17. ## 做一下数据测试
  18. # print(headPoint.col,headPoint.row)
  19. # for item in snakeBody:
  20. # print(item.col,item.row)

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:['tom',‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---> https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s="<div>jsdlfjsl</div>" #html编...