教你利用pygame模块制作跳跃小球小游戏

 更新时间:2021年8月18日 00:00  点击:1868

前言

pygame是用来开发游戏的一套基于SDL的模板,它可以是python创建完全界面化的游戏和多媒体程序,而且它基本上可以在任何系统上运行。本文将详细介绍你利用pygame模块制作跳跃小球小游戏的相关内容,下面来一起看看吧

实现方法

首先创建一个游戏窗口,然后再窗口内创建一个小球。以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。可以按照如下步骤实现该功能。

(1)首先来创建一个游戏窗口,宽和高设置为640×480.代码如下:

import sys                               #导入sys模块
import pygame                            #导入pygame模块
pygame.init()                            #初始化pygame
size=with,height=640,480                 #设置窗口大小
screen=pygame.display.set_model(size)    #显示窗口

上述代码中,首先导入pygame模块,该模块在上一篇文章中介绍过,直接用pip命令安装即可。然后调用init()方法初始化pygame模块。接下来,设置窗口的宽和高,最后使用display模块显示窗体。display模块的常用方法如下: 

方法名 功能
pygame.display.init 初始化init模块
pygame.display.quit 结束display模块
pygame.display.get_init 如果display模块已经被初始化,则返回true
pygame.display.set_mode 初始化一个准备显示的界面
pygame.display.get_surface 获取当前的surface对象
pygame.display.flip 更新整个待显示的surface对象到屏幕上
pygame.display.update 更新部分内容显示到屏幕上,如果没有参数则与flip功能相同

(2)当我们运行上述代码时,会出现一个一闪而过的窗口,这是因为程序执行完毕后会自动关闭。如果让窗口一直显示,需要使用while true循环让程序一直执行,此外,还需要设置关闭按钮。如果不设置关闭按钮,虽然在界面会显示红叉关闭按钮,但点击后就会出现程序无响应的错误,然后强制关闭了程序。

在pycharm演示如下

代码:

运行:

点击红叉就会关闭窗口。

上述代码中,添加了轮询时间监测。pygame.event.get()能够获取事件队列,使用for  in遍历事件,然后根据type属性判断事件类型。这里的事件处理方式与GUI类似,如event.type等于pygame.QUIT表示检测到关闭pygame窗口事件,pygame.KEYDOWN表示键盘按下事件,pygame.MOUSEBUTTONDOWN表示鼠标按下事件等。

(3)在窗口中添加小球。我们先准备一张ball.png图片,然后加载图片,最后将图片显示在窗口中,在pycharm中演示如下。

代码:

运行:

上述代码中,使用image模块的load方法加载图片,返回值ball是一个surface对象。surface是用来代表图片的pygame对象,可以对一个surface对象进行涂画、变形、复制等各种操作。事实上,屏幕也只是一个surface,pygame.display.set_mode就返回了一个屏幕surface对象。如果将ball这个surface对象画到screen surface对象,需要使用blit()方法,最后使用display方法更新整个待显示的surface对象到屏幕上。surface对象常用方法如下:

方法名 功能
pygame.Surface.blit 将一个图像画到另一个图像上
pygame.Surface.convert 转换图像的像素格式
pygame.Surface.convert_alpha 转换图像的像素格式,包含alpha通道的转换
pygame.Surface.fill 使用颜色填充surface
pygame.Surface.get_rect 获取surface的矩形区域

 (4)上面的小球是静止的,下面我们该让小球动起来了。ball.get_rect()方法返回值ballrect是一个rec对象,该对象有一个move()方法可以用于移动矩形。move(x,y)函数有两个参数,第一个参数是x轴移动的距离,第二个参数是y轴移动的距离。窗体左上角坐标为(0,0)。

为了实现小球不停地移动,将move()函数添加到while循环内,具体代码如下:

我们在原代码的基础上加上了这两行代码。运行后却发现小球一闪而过,但小球并没有真正的笑死,而是移动到窗体之外,此时需要添加碰撞监测的功能。当小球与窗体的任意边缘发生碰撞,则更改小球的移动方向。

代码如下:

在原有代码中添加上面的碰撞判断代码,运行如下

小球在界面飞速运动。然后我们需要控制小球移动的速度。首先介绍一下上面的代码,上面代码中,添加了碰撞监测功能。如果碰到左右边缘,这则更改x轴数据为负数;如果碰到上下边缘,则更改y轴数据为负数。

那么我们怎样控制小球移动的速度呢?这时我们需要添加一个“时钟”来控制程序运行的时间。这时就需要使用pygame的time模块。使用pygame时钟之前,必须先创建clock对象的一个实例,然后再while循环中设置多长时间运行一次。代码如下【也就是最终代码,由于运动效果无法展示,各位还是自行运行查看效果^_^】:

# -*- coding:utf-8 -*-
import sys  # 导入sys模块
import pygame  # 导入pygame模块
 
pygame.init()  # 初始化pygame
size = width, height = 640, 480  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
 
ball = pygame.image.load("ball.png")  # 加载图片
ballrect = ball.get_rect()  # 获取矩形区域
 
speed = [5, 5]  # 设置移动的X轴、Y轴距离
clock = pygame.time.Clock()  # 设置时钟
# 执行死循环,确保窗口一直显示
while True:
    clock.tick(60)  # 每秒执行60次
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击关闭窗口,则退出
            sys.exit()
 
    ballrect = ballrect.move(speed)  # 移动小球
    # 碰到左右边缘
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    # 碰到上下边缘
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
 
    screen.fill(color)  # 填充颜色
    screen.blit(ball, ballrect)  # 将图片画到窗口上
    pygame.display.flip()  # 更新全部显示
 
pygame.quit()  # 退出pygame

上述代码中在上面代码中添加了:

clock=pygame.time.Clock()      #设置时钟

以及循环中的

clock.tick(60)           #每秒执行60次

这样我们再次运行就会出现小球缓慢移动并碰撞边缘改变方向的效果了。

总结

到此这篇关于pygame模块制作跳跃小球小游戏的文章就介绍到这了,更多相关pygame跳跃小球小游戏内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
  • python自动化办公操作PPT的实现

    这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
  • Python getsizeof()和getsize()区分详解

    这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • 解决python 两个时间戳相减出现结果错误的问题

    这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12
  • Python绘制的爱心树与表白代码(完整代码)

    这篇文章主要介绍了Python绘制的爱心树与表白代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06