【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。

2023-10-31

开发环境

pycharm+anconda3;
第三方库: pygame;(从标题看这句略显多余)

第三方库安装

方法一:直接在pycharm里面安装。

files->seting->project->python Interpreter
在左侧界面的最左侧边栏上面有个加号,点击后在弹出页面搜索需要的第三方库,然后直接安装。

方法二:pip安装。

因为用的是anconda所以需要在终端里面将目录切换至anconda3/Scripts后再安装。
命令:pip installs pygame

在这里插入图片描述

任务介绍
本任务是开发一个猴子接香蕉的小游戏,通过键盘控制猴子运动,接住随机掉落的香蕉。读者需要自行准备背景图片,猴子图片,香蕉图片三张,当然,如果不喜欢猴子或香蕉也可以选择其它物品的图片作为素材。
在这里插入图片描述

大概实现思路

我们需要编写两个类:猴子类,和香蕉类

两个类都需要有图片路径,运动速度,初始位置等属性。还需要有让他们运动的方法。其中,香蕉只需要编写从上至下运动,猴子类需要让猴子可以在上下左右不同方向运动。
主函数里面需要用键盘来控制猴子运动,随机生成香蕉从上到下运动,并且检测猴子是否碰到香蕉

具体实现流程

游戏背景界面
首先是做一个[游戏]的背景界面,这里面需要引入背景图片,并且实现手动开关游戏界面。
主函数:
import pygame
import sys


def main():
    pygame.init()#初始化pygame
    size = width, height = 450, 560#界面尺寸
    screen = pygame.display.set_mode(size)#设置界面尺寸
    bg = pygame.image.load('background.jpg')#加载背景图片
    pygame.display.set_caption("游戏")#设置标题
    while True:
        #检测事件发生
        for event in pygame.event.get():
            if event.type == pygame.QUIT:#发生的事件类型为关闭时
                sys.exit()                #退出
        screen.blit(bg, bg.get_rect())  #显示图片
        pygame.display.update()            #更新
        pygame.time.Clock().tick(60)    #设置游戏频率为60


if __name__ == '__main__':
    main()

猴子类
猴子类编写
界面的坐标是左上角为(0,0),猴子的起始位置为右下角,所以坐标是(界面宽度-猴子宽度,界面高度-猴子高度)
class Monkey(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        position = 400, 510
        self.speed = [0, 0]
        self.img = pygame.image.load('monkey.png')
        self.rect = self.img.get_rect()
        self.rect.center = position
        self.image = self.img

    def move_left(self):
        self.speed = [-5, 0]
        if self.rect.left < 0:
            self.rect.left = 0
        else:
            self.rect = self.rect.move(self.speed)

    def move_right(self):
        self.speed = [5, 0]
        if self.rect.right > 450:
            self.rect.right = 450
        else:
            self.rect = self.rect.move(self.speed)

    def move_up(self):
        self.speed = [0, -5]
        if self.rect.top < 0:
            self.rect.top = 0
        else:
            self.rect = self.rect.move(self.speed)

    def move_down(self):
        self.speed = [0, 5]
        if self.rect.bottom > 560:
            self.rect.bottom = 560
        else:
            self.rect = self.rect.move(self.speed)

猴子类运行
猴子类运行时需要根据键盘所按下的键来判断猴子运动状态,需要在前面加一句 from pygame.locals import
import pygame
import sys
from pygame.locals import *

def main():
    pygame.init()#初始化pygame
    size = width, height = 450, 560#界面尺寸
    screen = pygame.display.set_mode(size)#设置界面尺寸
    bg = pygame.image.load('background.jpg')#加载背景图片
    pygame.display.set_caption("游戏")#设置标题
    mk = Monkey() #实例化猴子类
    while True:
        #检测事件发生
        for event in pygame.event.get():
            if event.type == pygame.QUIT:#发生的事件类型为关闭时
                sys.exit()                #退出
           #实例化按键类型 
          key = pygame.key.get_pressed()
          # 根据 按键类型判断运动方向
        if key[K_LEFT]:
            mk.move_left()
        if key[K_RIGHT]:
            mk.move_right()
        if key[K_UP]:
            mk.move_up()
        if key[K_DOWN]:
            mk.move_down()
        screen.blit(bg, bg.get_rect())  #显示图片
        screen.blit(mk.image, mk.rect)#显示猴子,必须放在背景图片之后
        pygame.display.update()            #更新
        pygame.time.Clock().tick(60)    #设置游戏频率为60

if __name__ == '__main__':
    main()

香蕉类
香蕉类编写
class Banana(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        x = randint(20, 430)
        position = [x, 20]
        speed = [0, 3]
        self.img = pygame.image.load('banana.png')
        self.rect = self.img.get_rect()
        self.rect.center = position
        self.image = self.img
        self.speed = speed

    def move(self):
        self.rect = self.rect.move(self.speed)


香蕉类运行
香蕉类要求随机生成香蕉在屏幕中自上而下运动,因此需要实例化精灵组,将实例化的香蕉类放入精灵组中,在达到一定条件时控制精灵组中的香蕉运动并显示在屏幕中。
import pygame
import sys
from pygame.locals import *

def main():
    pygame.init()
    size = width, height = 450, 560
    screen = pygame.display.set_mode(size)
    bg = pygame.image.load('background.jpg')
    pygame.display.set_caption("游戏")
    group = pygame.sprite.Group() #实例化精灵组
    i = 0 #作为条件判断的变量
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.blit(bg, bg.get_rect())
        i = i + 1
        if i % 30 == 0: #条件成立时
            ba = Banana() #实例化类
            group.add(ba) #添加到精灵组
        for b in group.sprites(): #从精灵组中循环
            b.move()
            screen.blit(b.img, b.rect)
        pygame.display.update()
        pygame.time.Clock().tick(60)


if __name__ == '__main__':
    main()


综合编写及碰撞检测
下面把上述内容放在一起运行,并进行碰撞检测,让猴子撞到香蕉时在终端里面显示出来。
使用pygame.sprite.collide_mask()函数检测碰撞,当两个传入的参数碰撞时,返回true.
def main():
    pygame.init()
    size = width, height = 450, 560
    screen = pygame.display.set_mode(size)
    bg = pygame.image.load('background.jpg')
    pygame.display.set_caption("游戏")
    mk = Monkey()
    group = pygame.sprite.Group()
    i = 0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    sys.exit()
        key = pygame.key.get_pressed()
        if key[K_LEFT]:
            mk.move_left()
        if key[K_RIGHT]:
            mk.move_right()
        if key[K_UP]:
            mk.move_up()
        if key[K_DOWN]:
            mk.move_down()
        screen.blit(bg, bg.get_rect())
        screen.blit(mk.image, mk.rect)
        i = i + 1
        if i % 30 == 0:
            ba = Banana()
            group.add(ba)
        for b in group.sprites():
            b.move()
            screen.blit(b.img, b.rect)
            if pygame.sprite.collide_mask(mk, b):#碰撞检测
                print("撞到")
        pygame.display.update()
        pygame.time.Clock().tick(60)


if __name__ == '__main__':
    main()

总结

最后,编程资料、学习路线图、源代码、软件安装包等!都可以【点击这里】领取!码文不易,求各位看官动动小手给个关注吧~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。 的相关文章

  • 为什么应用程序会在 sys.exit 命令之后显示?

    我正在关注这个教程 http zetcode com tutorials pyqt4 firstprograms http zetcode com tutorials pyqt4 firstprograms 在第一个示例中 我不明白为什么应
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • 通过子类化 `io.TextIOWrapper` 来子类化文件 - 但它的构造函数有什么签名?

    我正在尝试子类化io TextIOWrapper下列的这个帖子 https stackoverflow com a 23796737 974555 虽然我的目标不同 以此开始 注意 动机 https stackoverflow com a
  • 如何在 Pandas 数据框中用 NaN 替换一系列值?

    我有一个巨大的数据框 我应该如何用 NaN 替换一系列值 200 100 数据框 您可以使用pd DataFrame mask https pandas pydata org pandas docs stable generated pan
  • 升级后 pip 损坏

    我做了 pip install U easyinstall 然后 pip install U pip 来升级我的 pip 但是 当我尝试使用 pip 时 我现在收到此错误 root d8fb98fc3a66 which pip usr lo
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量

随机推荐

  • 小故事理解TCP/IP连接时的三次握手

    在TCP IP协议中 TCP协议通过三次握手建立一个可靠的连接 示意图如下 下面通过一个小故事简单理解一下这三次握手的具体含义 一天 快递员小客 客户端 准备去小服 服务器 家去送快递 准备与服务器进行连接 当走到小服家门口发现 小服家大门
  • (附源码)springboot大学生防疫封校管理系统 毕业设计632124

    大学生防疫封校管理系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来 大家都在听从政府的号召在居家隔离 不管是在城市还是在乡镇 农村 这引起我的注目 设计一套大学生防疫封校管理系统 疫情防控需要大家共同努力 团结对校园学生
  • Qt QCommandLinkButton学习

    widget h ifndef WIDGET H define WIDGET H include
  • Nginx的配置(转载)

    虚拟主机与域名解析 虚拟主机是使用特殊的软硬件技术 把一台运行在因特网上的服务器主机分成一台台 虚拟 的主机 每一台虚拟主机都具有独立的域名 具有完整的Internet服务器 WWW FTP Email等 功能 虚拟主机之间完全独立 并可由
  • CVPR 2023|3D模型分割新方法!不用人工标注,只需一次训练,未标注类别也能识别

    不需要人工标注 只需要一次训练 就能让3D模型理解语言并识别未标注过的类别 比如看下面这个例子 未标注的 unannotated 黑板和显示器 3D模型经过这个方法训练之后 就能很快 抓准 目标进行划分 再比如 给它分别输入sofa cou
  • python selenium 常用断言的使用方法

    assertEqual a b msg 测试失败时打印的信息 断言a和b是否相等 相等则测试用例通过 assertNotEqual a b msg 测试失败时打印的信息 断言a和b是否相等 不相等则测试用例通过 assertTrue x m
  • 蒙特卡洛模拟入门的几个小例子(R语言实现)

    嗯 第一个例子是怎么用蒙特卡洛模拟求pi的值 第二个是用蒙特卡洛模拟求解定积分 第三个是用蒙特卡洛模拟证券市场求解其收益 第四个是用蒙特卡洛模拟验证OLS的参数的无偏性 然后还要R是如何求导 计算导数的 R的点的形状的集合 以便于查看 转载
  • Python学习——捕获异常

    根据B站 黑马程序员 的python教程记录笔记 一 基本了解 看了标题之后可能会有疑惑 什么是捕获异常 为什么要捕获异常呢 如果在开发中 对某些代码的执行不能确定是否正确 可以增加 try 尝试 来 捕获异常 捕获异常最简单的语法格式 t
  • 在Windows中,开机自启动

    在Windows中 你可以按照以下步骤设置程序的开机自启动 1 使用快捷键 Win R 打开运行对话框 2 输入 shell startup 并点击 确定 这将打开当前用户的启动文件夹 3在启动文件夹中创建一个程序的快捷方式 可以右键点击文
  • 翻转数字,例如输入123 输出321 输入-12300 输出-321,输入1300 输出31,输入0 输出0。

    str1 input 请任意输入一串数字 第一种方法 if int str1 gt 0 判断大于0 print int str1 1 此处用int 避免str1是以0结尾字符串 int 后 0自然去除 elif int str1 lt 0
  • 【计算机网络】TCP详解

    计算机网络 传输层 TCP详解 传输层 TCP和UDP区别 优缺点 应用 用户数据报协议 UDP User Datagram Protocol 传输控制协议 TCP Transmission Control Protocol 无连接 面向连
  • vim插件3--dict

    vim插件3 dict 功能 vim dict插件主要用于从本地或者特定服务器查找相关数据 此功能正常情况下用不上 vim dict有一个不错的功能为从特定的字典文件中补全文本或单词 此外可以用 dict文件来实现不同类型代码的自动补全功能
  • HTML 展开收起

    1 授课老师教的展开收起的实现 Html部分 1 div class cont div class tab box2 table class caozuo cellspacing 0 tr th 操作详情 th th 操作人 th th 环
  • Redis学习0 -介绍及安装

    Redis 介绍 Redis是一个key value存储系统 数据库 redis支持存储的value类型有很多种 如string 字符串 list 链表 set 集合 zset 有序集合 和hash 哈希类型 安装redis库 因为我是用u
  • 简单易懂!如何制作系统启动盘(win7/win10/win11...),利用u盘重装系统!

    一 制作启动盘 1 准备一个空u盘 2 在电脑上下载光盘刻录工具 最新UltraISO官方免费下载 UltraISO软碟通中文官方网站 3 在电脑上下载光盘镜像文件 操作系统 选择自己需要的系统进行下载MSDN 我告诉你 做一个安静的工具站
  • 使用Docker容器搭建Kafka集群的详细过程讲解

    一 Kafka集群的搭建 1 拉取相关镜像 docker pull wurstmeister kafka docker pull zookeeper 2 运行zookeeper docker run d name zookeeper p 2
  • java--多态的转型

    java中的多态中的语法转换 只有在是继承关系的前提下才可以进行转型 子 gt 父 向上转型 自动转型 父 gt 子 向下转型 强制转换 以下为例子 public class duotai public static void main S
  • 打工人都在用的AI工具

    随着ChatGPT的问世 AI也算迎来了高光时刻 下文是技术宅整理的一些和ChatGPT相关的工具应用 排名不分先后 也不代表个人推荐 但真心真心好好用 主打的就是一个纯粹 本文将先分享10个有趣的AI小工具 最后3个小工具 是我们搬砖人心
  • 将纯黑的arcgis语义分割标签(单类别)(tif、png格式)转为黑白

    做建筑物分割 用arcgis做出来的标签 tif 为纯黑 转为png格式后也是纯黑 虽然在arcgis中可以正常显示 且不影响模型训练 但是的确有那么点不好看 参考其他数据集 单类别表标签均为黑白二值图 0 255 arcgis做的标签为纯
  • 【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。

    开发环境 pycharm anconda3 第三方库 pygame 从标题看这句略显多余 第三方库安装 方法一 直接在pycharm里面安装 files gt seting gt project gt python Interpreter