当前位置:   article > 正文

pygame的使用技巧_pygame如何使用

pygame如何使用

         pygame是python的一个模块,可以帮助我们创造一个游戏,以下是pygame的相关知识。

一,检查与安装pygame
描述

Pygame是一个用于开发2D游戏和多媒体应用程序的Python库

检查

pip list可以查看已经安装的文件模块,但是要在pycharm的终端上运行,或者是win+r,输入cmd,然后输入pip list即可,安装成功如下:



安装

和检查一样,我们在安装pygame时需要在终端或win+r,输入cmd然后进行命令输入,命令为:pip install pygame


# 上述的代码在pycharm终端执行时,要注意代码前端要有虚拟环境(venv)的提示才可以运行。

二,案例知识点

1.创建一个空白窗体

  1. # 创建窗口
  2. import pygame
  3. import sys
  4. pygame.display.set_mode((600,400))
  5. # # 创造一个长开着的窗口
  6. while True:
  7. pygame.display.set_mode((600, 400))
  8. # 创造一个可以关闭的窗口
  9. screen = pygame.display.set_mode((600,400)) # 将一个变量来存储创建的窗口,方便后来的调用
  10. while True:
  11. for event in pygame.event.get():
  12. if event.type == pygame.QUIT:
  13. pygame.quit()
  14. sys.exit()
  15. # pygame.event.get()可以搜集所有的事件,列表的形式可以被遍历

在创建游戏时,我们需要先将pygame和sys导入

pygame.display.set_mode((600,400))是pygame自带的函数内置方法,括号内的内容就是窗口的大小,通过这个方法我们可以创造一个长600,宽400的窗口。

2.保持打开的窗口

我们发现刚刚的代码只能出现一瞬间的窗口,如果我们想创造一个自动关闭的窗口,我们就需要设置一个条件,来对于窗口进行一个限制,代码如下:

  1. import pygame,sys
  2. window_width, window_height = 800, 600
  3. window = pygame.display.set_mode((window_width, window_height))
  4. while True:
  5. for event in pygame.event.get():
  6. if event.type == pygame.QUIT:
  7. pygame.quit()
  8. sys.exit()

在上文中,我们设置了一个条件,第一步我们用变量event储存了全部的pygame.event.get(),pygame.event.get()可以将所有的事件都统计起来,返回一个列表的形式,对于它进行遍历,每一个值都是一个事件,event.type的事件通过来进行鉴别他的具体事件,比如说pygame.QUIT就是代表着我们点击到了“X”的关闭键,我们就进行pygame.quit()-----关闭窗口

3.绘制图形

  1. import pygame,sys
  2. window_width, window_height = 800, 600
  3. window = pygame.display.set_mode((window_width, window_height))
  4. while True:
  5. window.fill((255, 255, 0))
  6. pygame.draw.circle(window, (0, 0, 0), (400, 300), 50)
  7. pygame.display.flip()
  8. for event in pygame.event.get():
  9. if event.type == pygame.QUIT:
  10. pygame.quit()
  11. sys.exit()

window.fill是一种涂色的方式,括号内的内容需要存放颜色,(255,255,255)是一个代表红色的元组,

4.使用精灵显示背景, 背景的循环展示

  1. # 要在Pygame中使用精灵显示背景并实现循环展示,你可以按照以下步骤进行操作:
  2. #1. 导入Pygame模块:
  3. import pygame
  4. # 2. 初始化Pygame:
  5. pygame.init()
  6. # 3. 创建窗口并设置窗口标题:
  7. width = 800 # 窗口宽度
  8. height = 600 # 窗口高度
  9. window = pygame.display.set_mode((width, height))
  10. pygame.display.set_caption("bg.png")
  11. # 4. 创建背景精灵类:
  12. class Background(pygame.sprite.Sprite):
  13. def __init__(self, image_path):
  14. super().__init__()
  15. self.image = pygame.image.load(image_path)
  16. self.rect = self.image.get_rect()
  17. self.rect.bottom = height # 设置背景精灵的底部与窗口底部对齐
  18. def update(self):
  19. self.rect.move_ip(-1, 0) # 控制背景模拟向左移动
  20. # 当背景完全移出窗口时,重新放置在窗口右侧
  21. if self.rect.right <= 0:
  22. self.rect.left = width
  23. # 5. 创建背景精灵对象并添加到精灵组:
  24. background_image = "bg.png" # 背景图片路径
  25. background = Background(background_image)
  26. all_sprites = pygame.sprite.Group()
  27. all_sprites.add(background)
  28. # 6. 设置游戏循环:
  29. running = True
  30. clock = pygame.time.Clock()
  31. while running:
  32. clock.tick(60) # 设置游戏帧率为60
  33. # 检查事件
  34. for event in pygame.event.get():
  35. if event.type == pygame.QUIT:
  36. running = False
  37. # 更新精灵
  38. all_sprites.update()
  39. # 绘制精灵
  40. all_sprites.draw(window)
  41. # 窗口更新
  42. pygame.display.flip()
  43. # 游戏退出,释放资源
  44. pygame.quit()

pygame.display.set_caption("bg.png")括号内的内容就是我们窗口的名字,

上述代码中,我们创建了一个Background类作为背景精灵,它继承自pygame.sprite.Sprite类。在update方法中,我们通过改变精灵的位置来实现背景的移动,当背景完全移出窗口时,将其放置在窗口右侧。

self.rect.move_ip(-1,0)是一种内置函数,括号内部(-1,0)代表x-1,y不动

在游戏循环中,我们使用clock.tick(60)设置游戏帧率为60(需要导入time模块),在事件处理后,更新精灵的状态并绘制在窗口上,最后通过pygame.display.flip()更新窗口。

我们可以将背景图片路径background_image更改为特定的背景图片路径,并根据需要调整窗口尺寸、帧率等参数。同时,你还可以根据需要添加其他精灵,以实现更复杂的游戏场景。

5.创建一个小的红色方块,通过上下左右键移动

  1. import pygame
  2. # 初始化Pygame:
  3. pygame.init()
  4. # 创建窗口并设置窗口标题:
  5. width = 800 # 窗口宽度
  6. height = 600 # 窗口高度
  7. window = pygame.display.set_mode((width, height))
  8. pygame.display.set_caption("My Game")
  9. # 创建玩家精灵类:
  10. class Player(pygame.sprite.Sprite):
  11. def __init__(self):
  12. super().__init__()
  13. self.image = pygame.Surface((50, 50)) # 创建一个50x50的矩形作为玩家精灵的图像
  14. self.image.fill((255, 0, 0)) # 填充颜色为红色
  15. self.rect = self.image.get_rect()
  16. self.rect.center = (width // 2, height // 2) # 设置玩家精灵的初始位置
  17. def update(self):
  18. keys = pygame.key.get_pressed() # 获取当前按下的按键
  19. if keys[pygame.K_LEFT]:
  20. self.rect.x -= 5 # 向左移动5个单位
  21. if keys[pygame.K_RIGHT]:
  22. self.rect.x += 5 # 向右移动5个单位
  23. if keys[pygame.K_UP]:
  24. self.rect.y -= 5 # 向上移动5个单位
  25. if keys[pygame.K_DOWN]:
  26. self.rect.y += 5 # 向下移动5个单位
  27. # 创建玩家精灵对象并添加到精灵组:
  28. player = Player()
  29. all_sprites = pygame.sprite.Group()
  30. all_sprites.add(player)
  31. # 设置游戏循环:
  32. running = True
  33. clock = pygame.time.Clock()
  34. while running:
  35. clock.tick(60) # 设置游戏帧率为60
  36. # 检查事件
  37. for event in pygame.event.get():
  38. if event.type == pygame.QUIT:
  39. running = False
  40. # 更新精灵
  41. all_sprites.update()
  42. # 绘制精灵
  43. window.fill((0, 0, 0)) # 使用黑色清空窗口
  44. all_sprites.draw(window)
  45. # 窗口更新
  46. pygame.display.flip()
  47. # 游戏退出,释放资源
  48. pygame.quit()

在上述代码中,我们创建了一个Player类作为玩家精灵,它继承自pygame.sprite.Sprite类。玩家精灵的图像是一个50x50的红色矩形。在update方法中,我们通过检测按键来移动玩家精灵的位置。

在游戏循环中,我们先调用time模块,使用clock.tick(60)设置游戏帧率为60,在事件处理后,更新精灵的状态并绘制在窗口上。为了避免显示玩家精灵的残影,我们在绘制前先使用黑色清空窗口。

6.使用UI(字体,鼠标点击测试)

  1. # 要在Pygame中使用UI元素,包括自定义字体和鼠标点击检测,你可以按照以下步骤进行操作:
  2. # 1. 导入Pygame模块:
  3. import pygame
  4. # 2. 初始化Pygame:
  5. pygame.init()
  6. # 3. 创建窗口并设置窗口标题:
  7. width = 800 # 窗口宽度
  8. height = 600 # 窗口高度
  9. window = pygame.display.set_mode((width, height))
  10. pygame.display.set_caption("My Game")
  11. # 4. 创建字体对象并加载字体文件:
  12. font = pygame.font.Font("font.ttf", 28) # 字体文件路径和字体大小
  13. # 5. 创建UI元素:
  14. text = font.render("Hello, World!", True, (255, 255, 255)) # 渲染文本,设置为白色
  15. text_rect = text.get_rect()
  16. text_rect.center = (width // 2, height // 2) # 设置文本位置居中
  17. # 6. 设置游戏循环:
  18. running = True
  19. clock = pygame.time.Clock()
  20. while running:
  21. clock.tick(60) # 设置游戏帧率为60
  22. # 检查事件
  23. for event in pygame.event.get():
  24. if event.type == pygame.QUIT:
  25. running = False
  26. elif event.type == pygame.MOUSEBUTTONDOWN: # 鼠标点击事件
  27. mouse_pos = pygame.mouse.get_pos()
  28. if text_rect.collidepoint(mouse_pos): # 检测鼠标点击是否在文本矩形范围内
  29. print("Text clicked!")
  30. # 绘制UI元素
  31. window.fill((0, 0, 0)) # 使用黑色清空窗口
  32. window.blit(text, text_rect)
  33. # 窗口更新
  34. pygame.display.flip()
  35. # 游戏退出,释放资源
  36. pygame.quit()

在上述代码中,我们使用pygame.font.Font创建了一个字体对象,并加载字体文件(.ttf格式)。然后,使用字体对象的render方法渲染文本,传入文本内容、是否启用抗锯齿以及文本颜色。接着,获取文本的矩形并进行位置设置,将其居中显示。

在游戏循环中,我们先处理QUIT事件(窗口关闭事件),然后检测MOUSEBUTTONDOWN事件(鼠标点击事件)。通过pygame.mouse.get_pos()获取鼠标点击的位置,然后使用collidepoint方法检测该位置是否在文本矩形范围内。如果是,则输出文本被点击的消息。

在绘制UI元素时,我们使用黑色清空窗口,并使用blit方法将文本绘制在窗口上。

7.精灵碰撞

  1. import pygame
  2. # 初始化Pygame
  3. pygame.init()
  4. # 创建窗口
  5. window_width, window_height = 800, 600
  6. window = pygame.display.set_mode((window_width, window_height))
  7. pygame.display.set_caption('游戏')
  8. # 定义颜色
  9. BLACK = (0, 0, 0)
  10. WHITE = (255, 255, 255)
  11. # 创建精灵类
  12. class Sprite(pygame.sprite.Sprite):
  13. def __init__(self, x, y, width, height, color):
  14. super().__init__()
  15. self.image = pygame.Surface((width, height))
  16. self.image.fill(color)
  17. self.rect = self.image.get_rect()
  18. self.rect.topleft = (x, y)
  19. # 创建道具类
  20. class Item(Sprite):
  21. def __init__(self, x, y, width, height, color):
  22. super().__init__(x, y, width, height, color)
  23. # 创建玩家类
  24. class Player(Sprite):
  25. def __init__(self, x, y, width, height, color):
  26. super().__init__(x, y, width, height, color)
  27. def update(self):
  28. # 获取键盘输入
  29. keys = pygame.key.get_pressed()
  30. if keys[pygame.K_LEFT]:
  31. self.rect.x -= 5
  32. if keys[pygame.K_RIGHT]:
  33. self.rect.x += 5
  34. if keys[pygame.K_UP]:
  35. self.rect.y -= 5
  36. if keys[pygame.K_DOWN]:
  37. self.rect.y += 5
  38. # 创建精灵组
  39. all_sprites = pygame.sprite.Group()
  40. # 创建玩家对象
  41. player = Player(100, 100, 50, 50, WHITE)
  42. all_sprites.add(player)
  43. # 创建道具对象
  44. item = Item(300, 300, 30, 30, WHITE)
  45. all_sprites.add(item)
  46. # 游戏循环
  47. running = True
  48. clock = pygame.time.Clock()
  49. while running:
  50. for event in pygame.event.get():
  51. if event.type == pygame.QUIT:
  52. running = False
  53. # 碰撞检测
  54. if pygame.sprite.collide_rect(player, item):
  55. print('玩家与道具碰撞!')
  56. # 更新精灵位置
  57. all_sprites.update()
  58. # 绘制背景
  59. window.fill(BLACK)
  60. # 绘制精灵
  61. all_sprites.draw(window)
  62. # 刷新画面
  63. pygame.display.flip()
  64. # 控制帧率
  65. clock.tick(60)
  66. # 退出游戏
  67. pygame.quit()

8.音效设置

  1. # 导入Pygame库
  2. import pygame
  3. # 初始化Pygame库
  4. pygame.init()
  5. # 设置窗口的宽和高
  6. window_width, window_height = 800, 600
  7. # 创建窗口
  8. window = pygame.display.set_mode((window_width, window_height))
  9. # 加载背景音乐
  10. # pygame.mixer.music.load("bg_music.mp3")
  11. # 播放背景音乐(循环播放)
  12. # pygame.mixer.music.play(-1)
  13. # 加载爆炸音效
  14. # explode_sound = pygame.mixer.Sound("explode.wav")
  15. # 设置程序运行标志为True
  16. running = True
  17. # 进入主循环
  18. while running:
  19. # 遍历所有事件
  20. for event in pygame.event.get():
  21. # 如果事件类型为退出事件,则退出程序
  22. if event.type == pygame.QUIT:
  23. running = False
  24. # 如果触发了键盘按键事件
  25. if event.type == pygame.KEYDOWN:
  26. # 如果按下的按键是空格键,播放爆炸音效
  27. if event.key == pygame.K_SPACE:
  28. # explode_sound.play()
  29. pass
  30. # 填充窗口背景为白色
  31. window.fill((255, 255, 255))
  32. # 刷新窗口
  33. pygame.display.flip()
  34. # 停止播放背景音乐
  35. # pygame.mixer.quit()

这段代码使用了Pygame库来创建一个窗口并播放背景音乐。它还加载了一个爆炸音效,并在用户按下空格键时播放。窗口的尺寸为800x600像素,并且在主循环中不断刷新窗口以更新显示。

如果点击窗口的关闭按钮,程序会退出。如果用户按下空格键,爆炸音效会播放。

请注意,为了使代码能够正常运行,你需要确保已经安装了Pygame库,并且有名为"bg_music.mp3"和"explode.wav"的音频文件。你可以将这些文件放在与代码文件相同的目录中,或者根据需要更改文件路径。

三、游戏创造思路

当编写游戏代码时,以下是一种基本的思路:

1. 导入所需的模块:首先,导入所需的模块,例如Pygame,以使我们能够使用相关功能和工具。

2. 初始化游戏:在代码的早期阶段,我们需要初始化游戏模块,例如使用`pygame.init()`来初始化Pygame模块。

3. 创建窗口:通过使用`pygame.display.set_mode()`创建游戏窗口,我们可以指定窗口的尺寸和其他相关设置。

4. 定义游戏元素:通过创建自定义的类来表示并管理游戏中的元素,例如玩家、敌人、道具等。这些类可以继承自Pygame提供的基类,例如`pygame.sprite.Sprite`。

5. 处理输入:我们需要检测和处理玩家输入,例如键盘按键、鼠标点击等。这可以通过使用Pygame提供的事件系统和相关方法来完成。

6. 更新游戏状态:在游戏循环中,我们需要更新元素的状态,例如位置、速度等。这可以通过更新元素的属性和调用相关的方法来实现。

7. 碰撞检测:游戏中经常需要进行碰撞检测,例如检测玩家与敌人的碰撞、玩家与道具的碰撞等。可以使用Pygame提供的碰撞检测方法来完成。

8. 绘制画面:我们需要在每个循环迭代中绘制游戏画面,包括背景、元素、文字等。可以使用Pygame提供的绘制方法和工具来实现。

9. 控制游戏流程:游戏流程管理涉及到开始游戏、游戏结束、切换关卡等逻辑。可以通过使用适当的条件和控制语句来实现。

10. 游戏循环:使用一个主循环来驱动游戏的进行,循环中处理事件、更新游戏状态、绘制画面、控制帧率等。

11. 退出游戏:在游戏循环结束之后,应该进行清理工作,例如释放资源、关闭窗口等。

以上是一个基本的游戏开发思路,当然在具体的开发过程中还会涉及到更多的细节和技术。要根据具体的游戏需求和个人技术水平进行相应的学习和实践。

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

闽ICP备14008679号