热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python游戏开发(一)

python游戏开发框架pygame最小开发框架pygame的简介与安装pygame是利用系统自带的SDL库进行封装得到的库游戏示例在命令行输入python-mpygame.exa

python游戏开发框架

pygame最小开发框架


pygame的简介与安装



  1. pygame

    是利用系统自带的SDL库进行封装得到的库

  2. 游戏示例

    在命令行输入 python -m pygame.examples.aliens

    就可以运行一个示例的游戏。

  3. 开发环境

    建议使用pycharm。

    4.pygame的使用

    有时用于游戏的卡法与验证,有时也用于其他系统的验证。

    pygame也是一种游戏开发引擎,是学习的入门工具。


pygame最小开发框架

包含四个部分:



  1. 引入第三方库



  2. 初始化init()以及设置(包括设置窗口大小,窗口名字)

    能对各种功能模块进行初始化创建并进行变量设置。

    pygame.display.set_mode((width, lenth)),用于初始化一个显示窗口,变量为一个二维元组,设置窗口的宽和高。

    pygame.display.set_caption("title"),用于对初始化的窗口进行命名。

    引入和初始化模块只进行一次。



  3. 进入一个循环,获取事件

    循环应该会无限循环下去,知道用户退出。

    pygame中所有的事件都会进入一个event队列,包括键盘的输入等。通过不断地从事件队队列中取出事件来对用户进行相应。for event in pygame.event.get()

    如果事件类型为QUIT类型,那么就应该调用sys.exit()进行退出。

    除了获得事件响应事件之后,还应该对窗口进行更新,否则用户无法认知是否进行了响应。



  4. 刷新屏幕

    游戏就是要不断地获取用户的输入,并不断输出,进行响应。



import sys, pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("pygame游戏之旅")
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.update()


  1. sys库的介绍

    sys是python的标准库,提供python运行时需要的相关环境和变量。

    sys.exit()用于结束游戏并退出。


壁球小游戏与图像的基本使用

从需求到实现的三个要素:



  1. 需要引入一个小球的图片。

  2. 壁球的运动:壁球需要能够上下左右四个方向进行运动。

  3. 壁球的反弹:壁球在碰到上下左右边缘时需要反弹。

import sys, pygame
pygame.init()
size = width, height = (600, 400)
speed = [1, 1]
Black = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("pygame壁球")
ball = pygame.image.load("滑稽球1.jpg")
ballrect = ball.get_rect()
# pygame对任意导入的图像都表示为surface对象,通过get_rect()形成与对象紧密相关的矩形对象
# rect对象有一些重要属性,如top,bottom,left,right表示上下左右边的坐标width和height表示宽和高
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
ballrect = ballrect.move(speed[0], speed[1])
# 通过move方法可以对矩形进行移动
if ballrect.left <0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top <0 or ballrect.bottom > height:
speed[1] = -speed[1]
# 遇到上下边界则y方向速度取反,遇到左右边界则x方向速度取反
screen.fill(Black)
# 显示窗口进行填充,因为移动后默认原本位置为白色,所以必须不断刷新背景,使用RGB色彩体系
screen.blit(ball, ballrect)
# 实际的移动是通过不断把小球的图像绘制到对应的矩形框里面来完成的
pygame.display.update()

壁球小游戏与屏幕的帧率设置

需求:壁球可以按照一定速度进行运动。不像之前那么快。

要素:如何有效控制壁球的速度呢?

引入了新的函数:



  1. pygame.time.Clock()

    这里创建一个时钟对象。可以通过操作时间对象来控制帧率。

    fps = 300;设置帧率

  2. clock.tick(fps)

    设置帧率,也即屏幕刷新频率,帧即每一张静止的动画。

    例如:clock.tick(100)就是指每秒刷新一百次


壁球小游戏的控制

需求:希望通过上下左右来控制小球的速度。

实现:↑增加一个像素的纵向速度,↓减少一个像素的纵向速度,左右同理。

键盘使用:如何获取键盘输入。

速度调节:根据对应按键来调节小球的速度。

在事件处理部分增加了键盘的敲击事件的响应。

pygame对键盘的敲击提供了对应的事件:

pygame.KEYDOWN,

pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT


pygame最小游戏最终代码

import sys, pygame
pygame.init()
size = width, height = (600, 400)
speed = [1, 1]
Black = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("pygame壁球")
fps = 300
fclock = pygame.time.Clock()
ball = pygame.image.load("滑稽球1.jpg")
ballrect = ball.get_rect()
# pygame对任意导入的图像都表示为surface对象,通过get_rect()形成与对象紧密相关的矩形对象
# rect对象有一些重要属性,如top,bottom,left,right表示上下左右边的坐标width和height表示宽和高
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0]))
elif event.key == pygame.K_RIGHT:
speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
elif event.key == pygame.K_UP:
speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
elif event.key == pygame.K_DOWN:
speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1])-1) * int(speed[1] / abs(speed[1]))
ballrect = ballrect.move(speed[0], speed[1])
# 通过move方法可以对矩形进行移动
if ballrect.left <0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top <0 or ballrect.bottom > height:
speed[1] = -speed[1]
# 遇到上下边界则y方向速度取反,遇到左右边界则x方向速度取反
screen.fill(Black)
# 显示窗口进行填充,因为移动后默认原本位置为白色,所以必须不断刷新背景,使用RGB色彩体系
screen.blit(ball, ballrect)
# 实际的移动是通过不断把小球的图像绘制到对应的矩形框里面来完成的
pygame.display.update()
fclock.tick(fps)

感觉这个游戏系列作为消遣还是很有意思的,哈哈哈哈。




以上内容来自北京理工大学嵩天老师及其团队的《Python游戏开发入门》课程第二周的内容。

非常感谢嵩天老师及其团队给我们带来这样优质的课程。




推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Pylance有哪些特性
    这篇文章给大家分享的是有关Pylance有哪些特性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pylance安装和其他VSC ... [详细]
  • 关于python调试大法的信息
    本文目录一览:1、pdbpython调试怎么用 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 有时候导入本地模块或者py文件时,下方会出现红色的波浪线,但不影响程序的正常运行,但是在查看源函数文件时,会出现问题问题如下 ... [详细]
  • 1.《Python程序设计基础与应用》第1章 Python概述
    第1章Python概述1.1Python语言简介(1)Python是一门跨平台、开源、免费的解释型高级动态编程语言。(2࿰ ... [详细]
author-avatar
手机用户2602930515
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有