关于制作一个Python面向对象的小游戏

本文详细介绍了如何使用pygame进行游戏开发,包括安装、基本操作(如创建窗口、设置标题、游戏循环)、帧率控制、精灵和精灵组的使用,以及游戏中的事件监听。旨在帮助初学者掌握pygame的基本游戏开发框架。
摘要由CSDN通过智能技术生成

目录

前言:

1.pygame的使用:

1.1 安装pygame:

1. 2导入pygame

1.3初始化pygame

1.4 创建窗口

1.5设置窗口标题

1.6. 游戏循环

1.7. 加载图像

1.8. 绘制图像

 1.9. 更新屏幕

1. 10. 退出pygame

1.11. 帧率控制

2.关于游戏的内容

2.1游戏的循环和游戏的时钟

2.2游戏初始化:

 2.3绘制图像初始位置

2.4设置游戏时钟

2.3游戏循环:

2.3.1设置刷新帧率:

2.3.2检测用户的交互:

2.3.3更新所有图像的位置:

2.3.4更新屏幕显示

2.4简单的动画实现:

2.5游戏中的监听事件:

2.6精灵和精灵组

2.6.1存储图像数据image,和图像位置rect

2.6.2更新所有精灵组

2.6.3添加精灵

结语:在这里的我们先了解了如何去使用pygame和在制作游戏中需要注意的东西,还讲了精灵组和它的应用,还有关于游戏的监听事件,当然其实这些都是我个人关于这方面的学习和查找资料结合的,可能会有所遗漏,或者做的不好,也请大家多多见谅,同时也欢迎大家一起讨论交流,一起成长,一起进步。


前言:

昨天我们已经初步的去了解了关于面向对象的小游戏的初始化,和更新屏幕,今天我们将继续去学习面向对象的后面的制作,当然这些都是我个人的学习内容,可能不是很全面,如果我有哪里有问题也欢迎大家给我斧正,也可以私信我.

今天我先教大家比较完整的pygame的使用:

1.pygame的使用:

1.1 安装pygame:

首先,确保你已经安装了pygame库。如果没有,你可以使用pip(Python的包管理器)来安装它:

pip install pygame

1. 2导入pygame

在你的Python脚本中,你需要导入pygame模块才能使用它

import pygame

1.3初始化pygame

在使用pygame的任何功能之前,你都需要调用pygame.init()函数来初始化pygame库:

pygame.init()

1.4 创建窗口

使用pygame.display.set_mode()函数来创建一个窗口。这个函数接受一个元组作为参数,元组中的两个值分别代表窗口的宽度和高度:

screen = pygame.display.set_mode((0, 0))

1.5设置窗口标题

你可以使用pygame.display.set_caption()函数来设置窗口的标题

pygame.display.set_caption("My Game")

1.6. 游戏循环

游戏通常运行在一个循环中,这个循环会不断地处理事件、更新游戏状态并绘制图像到屏幕上。下面是一个简单的游戏循环的例子:

running = True  
while running:  
    # 处理事件  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  # 如果用户点击了关闭按钮  
            running = False  # 退出游戏循环  
  
    # 在这里添加你的游戏逻辑代码  
  
    # 更新屏幕显示  
    pygame.display.flip()  # 或者使用 pygame.display.update()

1.7. 加载图像

如果你想在游戏中使用图像,你可以使用pygame.image.load()函数来加载它们:

image = pygame.image.load('path_to_your_image.png')

1.8. 绘制图像

使用blit方法来将图像绘制到屏幕上。这通常在一个循环中完成,例如在上面的游戏循环中:

screen.blit(image, (x, y))  # x和y是图像左上角的坐标

 1.9. 更新屏幕

在绘制了所有内容之后,你需要使用pygame.display.flip()pygame.display.update()来更新屏幕显示:

pygame.display.flip()

1. 10. 退出pygame

当你的游戏结束时,确保调用pygame.quit()来清理并退出pygame:

pygame.quit()

1.11. 帧率控制

通常,你还需要控制游戏的帧率,以确保游戏运行得不过快或过慢。你可以使用pygame.time.Clock()对象来实现这一点:

clock = pygame.time.Clock()  
# 在游戏循环中  
clock.tick(60)  # 这将限制游戏循环到每秒60次迭代

2.关于游戏的内容

2.1游戏的循环和游戏的时钟

游戏的动画实现:跟电影的原理相似,游戏中的动画效果,本质上是快速的在屏幕上绘制图像.多张图像快速的,连续的播放,产生的连贯效果

一般电脑上每秒绘制60次,就能达到很高品质的动画效果,每次绘制的结果被称为帧.

2.2游戏初始化:

设置游戏窗口,首先,你需要使用pygame来初始化一个游戏窗口。这通常是通过调用pygame.init()来完成的,然后你可以使用pygame.display.set_mode()来创建一个指定大小的窗口。

import pygame  
pygame.init()  
  
# 设置游戏窗口大小  
screen = pygame.display.set_mode((480, 700))  
pygame.display.set_caption('飞机大战')

 2.3绘制图像初始位置

在游戏初始化阶段,你还需要设置游戏中所有精灵(如背景、敌机、英雄飞机等)的初始位置。这通常是在各个精灵类的__init__方法中完成的

# 创建背景精灵  
background = Background()  
  
# 创建英雄飞机精灵  
hero = Hero()  
  
# 创建敌机精灵  
enemies = pygame.sprite.Group()  
for i in range(5):  
    enemy = Enemy()  
    enemies.add(enemy)

2.4设置游戏时钟

为了控制游戏的帧率(即每秒更新的次数),你需要设置一个游戏时钟。这可以通过pygame.time.Clock()来实现

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

2.3游戏循环:

游戏循环是游戏的主体部分,它不断运行直到用户退出游戏。在这个循环中,你会设置刷新帧率、检测用户的交互、更新所有图像的位置以及更新屏幕显示。

2.3.1设置刷新帧率:

在游戏循环中,你需要控制游戏的刷新率,这通常是通过调用clock.tick()方法来实现的,并传入你想要的帧率(例如60帧/秒)

# 游戏主循环  
running = True  
while running:  
    # 设置刷新帧率  
    clock.tick(60)  
      
    # ... (其他代码,如事件处理、更新、绘制等)

2.3.2检测用户的交互:

在每次循环中,你需要检测用户的交互,例如键盘输入和鼠标点击。这可以通过pygame.event.get()来实现。

for event in pygame.event.get():  
    if event.type == pygame.QUIT:  
        running = False  
    # 可以添加其他事件处理,如按键检测等

2.3.3更新所有图像的位置:

接下来,你需要更新所有精灵的位置。这通常是通过调用每个精灵的update()方法来实现的。

# 更新背景位置  
background.update()  
  
# 更新英雄飞机位置  
hero.update()  
  
# 更新敌机位置  
enemies.update()

2.3.4更新屏幕显示

最后,你需要将更新后的图像绘制到屏幕上。这通常是通过调用pygame.display.flip()来实现的

# 绘制背景  
screen.blit(background.image, background.rect)  
  
# 绘制英雄飞机  
screen.blit(hero.image, hero.rect)  
  
# 绘制敌机  
for enemy in enemies:  
    screen.blit(enemy.image, enemy.rect)  
  
# 更新屏幕显示  
pygame.display.flip()

2.4简单的动画实现:

实现飞机的移动

While True:
    clock.tick(60)
    #更新图片位置
    me_rect.y-=1
    #调用blit方法绘制位置
    #绘制背景
    s.blit(img2,(0,o))
    s.blit(me,me_rect)
    pygame.display.update()
    pass

2.5游戏中的监听事件:

事件:event,游戏启动后,用户针对游戏所做的所有操作,例如:点击鼠标,按下键盘

监听:在游戏循环中,判断用户的具体操作,捕捉到用户的操作之后,才能有针对性的做出响应

通过pygame.event.get()可以获取当前用户所做事件列表

        for event in pygame.event.get():  # event是列表中的事件对象pygame.event.get()获取的是列表3
            if event.type == plane_sprites.ENEMY_EVENT:  # 每隔一秒执行这里的内容
                print('敌机出场')
                # 在这里实例化创建精灵,添加到精灵组,分开写,可以重复出现飞机,精灵组只要一个就可以了,精灵可以重复
                enemy = plane_sprites.Enemy()  # 在内部不断地循环
                self.enemy_group.add(enemy)
            elif event.type == plane_sprites.FIRE:
                print('子弹出场')
                self.hero.fire()

            elif event.type == pygame.QUIT:
                pygame.quit()

2.6精灵和精灵组

在Pygame中,pygame.sprite.Sprite 是一个基类,用于创建游戏精灵(Sprite)。精灵通常代表游戏中的可移动对象,如玩家角色、敌人、子弹等。每个精灵通常都有一个图像(image)和一个矩形区域(rect),该矩形区域定义了图像在游戏世界中的位置和大小

pygame.sprite.Sprite()#:创建精灵对象()

def __init__(self:)

2.6.1存储图像数据image,和图像位置rect

# 加载精灵的图像  
sprite_image = pygame.image.load('path_to_your_image.png').convert_alpha()
# 创建rect对象,它包含位置和大小信息  
self.rect = pygame.Rect(x, y, width, height)

2.6.2更新所有精灵组

# 创建精灵组  
sprite_group = pygame.sprite.Group()  
  
# 将精灵添加到精灵组  
sprite_group.add(my_sprite)  
  
# 在游戏循环中更新所有精灵  
sprite_group.update()

2.6.3添加精灵

def add(): #向组中添加精灵

def draw(): #让组中所有的精灵对象通过blit方法绘制到屏幕上

def update():# 让组中的所有精灵对象调用自己的update方法

def add(): #向组中添加精灵

def draw(): #让组中所有的精灵对象通过blit方法绘制到屏幕上

def update():# 让组中的所有精灵对象调用自己的update方法

结语:

在这里的我们先了解了如何去使用pygame和在制作游戏中需要注意的东西,还讲了精灵组和它的应用,还有关于游戏的监听事件,当然其实这些都是我个人关于这方面的学习和查找资料结合的,可能会有所遗漏,或者做的不好,也请大家多多见谅,同时也欢迎大家一起讨论交流,一起成长,一起进步。

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yz_518 Nemo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值