前言
无论是寻找一种创造有趣游戏的方式,还是追求开发令人难忘互动体验的途径,Python 的游戏开发库——pygame,都是一个值得深入探索的强大工具。在当今飞速发展的科技世界中,创造自己的游戏已经不再是高不可攀的梦想。有了pygame,您可以在短短十秒内,即刻踏上游戏开发的旅程。
或许你曾想过,游戏开发需要庞大的团队和复杂的编程技巧,但是pygame向我们证明,通过简洁的代码和丰富的功能,每个人都可以成为游戏开发的艺术家。无论是制作经典的像素游戏,还是创建引人入胜的图形化体验,pygame都为你提供了丰富多样的工具和资源,只需一点点的学习和探索,你就能够轻松地将想法变成现实。
在本篇博客中,我们将带您深入了解如何在短短十秒内掌握pygame的各种小功能。无需长时间的等待,你将会在创造中体验乐趣,在实践中获得成就感。无论您是完全的游戏开发新手还是有一些经验的开发者,本文都将为您揭开pygame这个神奇世界的一角。
准备好了吗?在我们的“十秒玩转pygame”之旅中,您将会掌握以下小功能:从窗口的创建到基本图形的绘制,从动画精灵的运动到用户输入的响应,每一步都离不开对pygame更深入的了解。让我们一起投入这个充满创意和乐趣的学习过程吧!
一,一个可以关闭的空白窗体
# 使用pygame创建一个可以关闭的空白窗体
# 导入了pygame模块和sys模块
import pygame, sys
# pygame初始化
pygame.init()
# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))
# 设置死循环不让窗口关闭
while True:
# pygame事件检测
for event in pygame.event.get():
# 退出事件检测
if event.type == pygame.QUIT:
# 退出窗口,系统回收
pygame.quit()
sys.exit()
# 持续更新pygame屏幕
pygame.display.flip()
上述代码便是一个最基本的pygame窗体的创建,需要注意的是,每一个pygame项目都必须有一个死循环,这样才能使窗体不会自动退出,另外sys.exit()也可以换成quit()。
二,设置pygame窗体图标,标题,窗口大小,背景颜色
# 导入相关模块
import pygame, sys
# 初始化pygame
pygame.init()
# 设置屏幕大小
screen = pygame.display.set_mode((800, 600))
# 设置背景颜色为白色
screen.fill((255, 255, 255))
# 上传窗口图标图片
icon = pygame.image.load("icon.png")
# 将图标加入窗口
pygame.display.set_icon(icon)
# 设置窗口标题
pygame.display.set_caption("这是个标题")
# 设置死循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 持续更新pygame屏幕
pygame.display.flip()
在这一组代码中,我们对于创建出来的窗体加入了标题,背景色,图标图片等元素!
三,使用精灵显示背景并实现背景的循环播放
# 导入相关模块
import pygame, sys
# 定义背景类
class Backgroud(pygame.sprite.Sprite):
def __init__(self, name, top_left):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
self.rect.topleft = top_left
# 定义背景更新函数实现背景循环
def update(self):
self.rect.top += 10
if self.rect.top >= 700:
self.rect.top = -700
# 定义游戏管理总类
class GameManage:
def __init__(self):
# 初始化pygame
pygame.init()
# 定义帧数控制
self.clock = pygame.time.Clock()
# 设置窗体大小
self.screen = pygame.display.set_mode((480, 700))
# 定义背景组管理背景实例
self.bg_group = pygame.sprite.Group()
# 创建背景实例(由于需要实现背景的循环,所以需要两个背景实例)
self.bg_1 = Backgroud("background.png", (0, 0))
self.bg_2 = Backgroud("background.png", (0, -700))
# 将两个背景实例加入背景组
self.bg_1.add(self.bg_group)
self.bg_2.add(self.bg_group)
# 设置标题
pygame.display.set_caption("pygame测试")
def run(self):
# 设置死循环
while True:
# 设置帧数
self.clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将背景图片加入到窗口
self.bg_group.update()
self.bg_group.draw(self.screen)
# 持续更新屏幕
pygame.display.flip()
# 创建游戏管理实例
gm = GameManage()
gm.run()
在这段代码中我们使用类的功能实现了将图片加入背景并且使图片背景循环播放,这已经初步实现了一个pygame项目的窗体准备。
四,使用精灵玩家并使玩家可以移动
import pygame, sys
# 初始化pygame
pygame.init()
# 初始化窗口大小
screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption("pygame测试")
# 上传背景图片
bk = pygame.image.load("background.png")
# 上传玩家图片
player = pygame.image.load("me1.png")
# 得到玩家矩形
player_rect = player.get_rect()
# 设置死循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将背景图片加入到屏幕
screen.blit(bk, (0, 0))
# 将玩家图片加入到屏幕
screen.blit(player, player_rect)
# 设置键盘事件使玩家可以动起来
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_LEFT] and player_rect.left >= 0:
player_rect.left -= 5
if key_pressed[pygame.K_RIGHT] and player_rect.right <= 480:
player_rect.left += 5
if key_pressed[pygame.K_UP] and player_rect.top >= 0:
player_rect.top -= 5
if key_pressed[pygame.K_DOWN] and player_rect.bottom <= 700:
player_rect.top += 5
# 持续更新屏幕
pygame.display.flip()
我们在这个代码中实现了使用控制键盘事件来使玩家进行移动。
五,使用精灵显示道具,玩家与道具进行碰撞检测
import pygame, sys, random
# 创建道具组
class ItemSprite(pygame.sprite.Sprite):
def __init__(self, name, center):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
self.rect.center = center
def update(self):
self.rect.top += 10
if self.rect.top >= 700:
self.rect.top = -700
# 创建道具管理组
class ItemManage:
def __init__(self, gm):
self.gm = gm
# 创建道具组
self.item_group = pygame.sprite.Group()
self.born_gap = 2
# 创建道具出现函数
def born(self):
self.born_gap -= 0.1
if self.born_gap <= 0:
item = ItemSprite("life.png", (random.randint(0, 480),0))
item.add(self.item_group)
self.born_gap = 2
def update(self):
self.born()
self.item_group.update()
self.item_group.draw(self.gm.screen)
# 创建玩家精灵类
class Player(pygame.sprite.Sprite):
def __init__(self, name, center):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
self.rect.center = center
# 使用键盘事件操控玩家进行移动
def move(self):
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_LEFT] and self.rect.left >= 0:
self.rect.left -= 5
if key_pressed[pygame.K_RIGHT] and self.rect.right <= 480:
self.rect.left += 5
if key_pressed[pygame.K_UP] and self.rect.top >= 0:
self.rect.top -= 5
if key_pressed[pygame.K_DOWN] and self.rect.bottom <= 700:
self.rect.top += 5
def update(self):
self.move()
# 创建玩家管理组
class PlayerManage:
def __init__(self, gm):
self.gm = gm
# 创建玩家组
self.player_group = pygame.sprite.Group()
# 创建玩家实例加入玩家组
self.player = Player("me1.png", (240, 600))
self.player.add(self.player_group)
def update(self):
self.player_group.update()
self.player_group.draw(self.gm.screen)
# 创建游戏总类
class GameManage:
def __init__(self):
# 初始化pygame
pygame.init()
# 设置屏幕及大小
self.screen = pygame.display.set_mode((480, 700))
# 上传背景图片
self.bg = pygame.image.load("background.png")
# 设置标题
pygame.display.set_caption("pygame测试")
# 将玩家管理组加入到游戏管理组
self.player_manage = PlayerManage(self)
# 将道具管理组加入到游戏管理组
self.item_manage = ItemManage(self)
# 设置帧数控制
self.clock = pygame.time.Clock()
# 创建碰撞事件
def collision_check(self):
pygame.sprite.groupcollide(self.item_manage.item_group, self.player_manage.player_group, True, False)
def run(self):
# 设置死循环
while True:
self.clock.tick(20)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将背景图片加入到屏幕
self.screen.blit(self.bg, (0, 0))
self.item_manage.update()
self.player_manage.update()
# 持续更新屏幕
self.collision_check()
pygame.display.flip()
# 创建游戏总类实例
gm = GameManage()
gm.run()
我们在这里使用类的方法来进行游戏中各种角色实例的管理。
六,UI的使用
import pygame, sys
# 创建工具类
class Utils:
# 创建静态函数判断鼠标是否点击了UI按钮精灵
@staticmethod
def check_click(sprite):
if pygame.mouse.get_pressed()[0]:
if sprite.rect.collidepoint(pygame.mouse.get_pos()):
return True
return False
# 创建UI按钮精灵类
class ButtonSprite(pygame.sprite.Sprite):
def __init__(self, name, center):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
self.rect.center = center
# 创建UI按钮精灵管理类
class ButtonManage:
def __init__(self, gm):
self.gm = gm
# 创建UI按钮管理组
self.button_group = pygame.sprite.Group()
# 创建UI按钮实例并加入UI按钮管理组
self.button_start = ButtonSprite("start_but.png", (240, 350))
self.button_restart = ButtonSprite("restart_but.png", (240, 250))
self.button_exit = ButtonSprite("exit_but.png", (240, 450))
self.button_start.add(self.button_group)
self.button_restart.add(self.button_group)
self.button_exit.add(self.button_group)
def update(self):
self.button_group.draw(self.gm.screen)
# 判断按钮点击事件
if Utils.check_click(self.button_start):
print("玩家点击了开始游戏")
if Utils.check_click(self.button_restart):
print("玩家点击了重新开始游戏")
if Utils.check_click(self.button_exit):
print("玩家点击了退出游戏")
pygame.quit()
sys.exit()
# 创建游戏总类
class GameManage:
def __init__(self):
# 初始化pygame
pygame.init()
# 创建窗口
self.screen = pygame.display.set_mode((480, 700))
# 设置标题
pygame.display.set_caption("pygame测试")
# 上传背景图片
self.bg = pygame.image.load("background.png")
# 将按钮管理加入游戏管理
self.button_manage = ButtonManage(self)
def run(self):
# 定义死循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将背景图片加入到屏幕
self.screen.blit(self.bg, (0, 0))
# 更新UI按钮管理
self.button_manage.update()
# 使屏幕一直保持更新
pygame.display.flip()
# 定义游戏总类实例
gm = GameManage()
gm.run()
在这个代码中我们便完成了对于UI按钮类的创建于初步使用,那在这几个小目标完成之后,我们也就掌握了pygame基础框架的使用,也就可以开始进行pygame项目的实战了!
结束语
当您完成这个充满创意和乐趣的“十秒玩转pygame”之旅时,相信您已经对pygame的强大功能有了更深入的了解。游戏开发不再是遥不可及的领域,而是您可以随时随地展开创作的广阔舞台。
通过学习本文介绍的各种小功能,您已经掌握了创建窗口、绘制图形、处理动画和用户输入等关键技能。但请记住,掌握游戏开发是一个持续的过程。继续挑战自己,尝试更复杂的功能和创意,您将逐步成为一名更加熟练的游戏开发者。
pygame不仅仅是一个工具,它还代表了创造力和想象力的延伸。将您的想法转化为实际可见的游戏世界,让玩家们沉浸在您构建的体验中,无疑是一种令人满足的成就感。
感谢您的阅读和学习!无论您是将所学运用于个人项目还是与他人合作开发,都希望您能够享受这个过程,不断挖掘游戏开发的无限可能性。祝愿您在未来的创作道路上取得更大的成功,创造出令人惊叹的游戏作品。期待在未来的某个角落,能够见证您的精彩绽放!
如果您还有任何关于pygame或游戏开发的疑问,请随时回到这里或者继续探索更多相关资源。愿创作的火焰在您心中燃烧不息!