当前位置:   article > 正文

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

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

目录

前言:

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. 游戏循环

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

  1. running = True
  2. while running:
  3. # 处理事件
  4. for event in pygame.event.get():
  5. if event.type == pygame.QUIT: # 如果用户点击了关闭按钮
  6. running = False # 退出游戏循环
  7. # 在这里添加你的游戏逻辑代码
  8. # 更新屏幕显示
  9. 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()对象来实现这一点:

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

2.关于游戏的内容

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

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

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

2.2游戏初始化:

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

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

 2.3绘制图像初始位置

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

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

2.4设置游戏时钟

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

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

2.3游戏循环:

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

2.3.1设置刷新帧率:

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

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

2.3.2检测用户的交互:

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

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

2.3.3更新所有图像的位置:

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

  1. # 更新背景位置
  2. background.update()
  3. # 更新英雄飞机位置
  4. hero.update()
  5. # 更新敌机位置
  6. enemies.update()

2.3.4更新屏幕显示

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

  1. # 绘制背景
  2. screen.blit(background.image, background.rect)
  3. # 绘制英雄飞机
  4. screen.blit(hero.image, hero.rect)
  5. # 绘制敌机
  6. for enemy in enemies:
  7. screen.blit(enemy.image, enemy.rect)
  8. # 更新屏幕显示
  9. pygame.display.flip()

2.4简单的动画实现:

实现飞机的移动

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

2.5游戏中的监听事件:

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

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

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

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

2.6精灵和精灵组

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

  1. pygame.sprite.Sprite()#:创建精灵对象()
  2. def __init__(self:)

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

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

2.6.2更新所有精灵组

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

2.6.3添加精灵

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

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

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

  1. def add(): #向组中添加精灵
  2. def draw(): #让组中所有的精灵对象通过blit方法绘制到屏幕上
  3. def update():# 让组中的所有精灵对象调用自己的update方法

结语:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/204738
推荐阅读
相关标签
  

闽ICP备14008679号