当前位置: 首页 > news >正文

python游戏开发pygame初步

文章目录

    • 安装和示例
    • 移动物体
    • 优化

安装和示例

顾名思义,PyGame就是用来做游戏的Python库,提供了许多游戏开发功能,如图像处理、音频播放、事件处理、碰撞检测等等。从这个角度来说,pygame不仅是一个游戏库,同时也是一个包含了各种功能的综合库。

安装直接用pip

pip isntall pygame

安装成功后,可运行一下示例游戏

python3 -m pygame.examples.aliens

效果如下

在这里插入图片描述

移动物体

一个基本的pygame程序,首先就要对pygame初始化,并且指定游戏屏幕的尺寸,示例如下

import pygamepygame.init()
screen = pygame.display.set_mode((640, 360))

这时候不出意外的话,就会弹出一个黑色的窗口。接下来,实现最简单的游戏控制,通过ijkl键控制红色圆球四向移动,代码如下所示

player = pygame.Vector2(320, 180)
while True:if pygame.QUIT in [e.type for e in pygame.event.get()]:breakscreen.fill("purple")pygame.draw.circle(screen, "red", player, 40)keys = pygame.key.get_pressed()if keys[pygame.K_j]:player.y -= 0.2if keys[pygame.K_k]:player.y += 0.2if keys[pygame.K_h]:player.x -= 0.2if keys[pygame.K_l]:player.x += 0.2pygame.display.flip()pygame.quit()

其中,player即为游戏者的位置,而死循环中,pygame.draw.circle则根据游戏者的位置不断创建红色圆球。通过pygame.key.get_pressed,可以获取在一个循环之内捕获到的所有按键,这些案件共同组成一个布尔字典,如果某个按键被按下,那么相应的值就是True,否则为False。接下来,四个互相独立的判断不断地更改player的位置。最后,通过pygame.display.flip()将所有变化反馈给屏幕。

在这里插入图片描述

优化

如果不对小球的位置加以限制,那么只要鼠标不断向上,小球就会超出屏幕边界,杳然无踪。为此,需要对小球的位置加以限制,比如,当小球抵达上方的边界时,让其从下边重新出现,为此需要判断小球的位置。

接下来,只需做一点改动,就可以达到如下效果

在这里插入图片描述

代码如下

import pygamedef moveRange(x, L, R):if x < L: return Rif x > R: return Lreturn xpygame.init()
screen = pygame.display.set_mode((640, 360))player = pygame.Vector2(320, 180)
while True:if pygame.QUIT in [e.type for e in pygame.event.get()]:breakscreen.fill("purple")pygame.draw.circle(screen, "red", player, 40)keys = pygame.key.get_pressed()if keys[pygame.K_j]:player.y -= 0.2if keys[pygame.K_k]:player.y += 0.2if keys[pygame.K_h]:player.x -= 0.2if keys[pygame.K_l]:player.x += 0.2player.x = moveRange(player.x, -40, 680)player.y = moveRange(player.y, -40, 400)pygame.display.flip()pygame.quit()

相关文章:

  • vue3中引入svg矢量图
  • 【漏洞复现】Array VPN任意文件读取漏洞
  • 数字逻辑电路基础-时序逻辑电路之移位寄存器
  • 利用chart.js来完成动态网页显示拆线图的效果
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • 文件属性和路径
  • isis基础大全学习案例
  • 【SpringCloud】微服务的扩展性及其与 SOA 的区别
  • 防火墙命令行基础配置实验(H3C模拟器)
  • 为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?
  • echarts 几千条分钟级别在小时级别图标上展示
  • JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
  • JavaScript 原型,原型链的特点
  • [PyTorch][chapter 64][强化学习-DQN]
  • 微软 Edge 浏览器目前无法支持 avif 格式
  • Druid 在有赞的实践
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git的一些常用操作
  • HTML5新特性总结
  • passportjs 源码分析
  • python 装饰器(一)
  • SOFAMosn配置模型
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Terraform入门 - 3. 变更基础设施
  • vagrant 添加本地 box 安装 laravel homestead
  • 搭建gitbook 和 访问权限认证
  • 对象管理器(defineProperty)学习笔记
  • 浮动相关
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于遗传算法的优化问题求解
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 携程小程序初体验
  • 终端用户监控:真实用户监控还是模拟监控?
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​批处理文件中的errorlevel用法
  • # 安徽锐锋科技IDMS系统简介
  • ###项目技术发展史
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (27)4.8 习题课
  • (补)B+树一些思想
  • (附源码)php新闻发布平台 毕业设计 141646
  • (三)模仿学习-Action数据的模仿
  • (一)Java算法:二分查找
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)ORM
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess配置重写url引擎
  • .Mobi域名介绍
  • .NET 8.0 发布到 IIS
  • .NET Standard 的管理策略
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net语言中的StringBuilder:入门到精通
  • .Net中间语言BeforeFieldInit