赞
踩
pygame是python的一个模块,可以帮助我们创造一个游戏,以下是pygame的相关知识。
Pygame是一个用于开发2D游戏和多媒体应用程序的Python库
pip list可以查看已经安装的文件模块,但是要在pycharm的终端上运行,或者是win+r,输入cmd,然后输入pip list即可,安装成功如下:
安装
和检查一样,我们在安装pygame时需要在终端或win+r,输入cmd然后进行命令输入,命令为:pip install pygame
# 上述的代码在pycharm终端执行时,要注意代码前端要有虚拟环境(venv)的提示才可以运行。
- # 创建窗口
- import pygame
- import sys
- pygame.display.set_mode((600,400))
-
- # # 创造一个长开着的窗口
- while True:
- pygame.display.set_mode((600, 400))
-
- # 创造一个可以关闭的窗口
- screen = pygame.display.set_mode((600,400)) # 将一个变量来存储创建的窗口,方便后来的调用
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- # pygame.event.get()可以搜集所有的事件,列表的形式可以被遍历
在创建游戏时,我们需要先将pygame和sys导入
pygame.display.set_mode((600,400))是pygame自带的函数内置方法,括号内的内容就是窗口的大小,通过这个方法我们可以创造一个长600,宽400的窗口。
我们发现刚刚的代码只能出现一瞬间的窗口,如果我们想创造一个自动关闭的窗口,我们就需要设置一个条件,来对于窗口进行一个限制,代码如下:
- import pygame,sys
-
-
- window_width, window_height = 800, 600
- window = pygame.display.set_mode((window_width, window_height))
-
-
-
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
在上文中,我们设置了一个条件,第一步我们用变量event储存了全部的pygame.event.get(),pygame.event.get()可以将所有的事件都统计起来,返回一个列表的形式,对于它进行遍历,每一个值都是一个事件,event.type的事件通过来进行鉴别他的具体事件,比如说pygame.QUIT就是代表着我们点击到了“X”的关闭键,我们就进行pygame.quit()-----关闭窗口
- import pygame,sys
-
-
- window_width, window_height = 800, 600
- window = pygame.display.set_mode((window_width, window_height))
-
-
-
- while True:
- window.fill((255, 255, 0))
- pygame.draw.circle(window, (0, 0, 0), (400, 300), 50)
- pygame.display.flip()
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
window.fill是一种涂色的方式,括号内的内容需要存放颜色,(255,255,255)是一个代表红色的元组,
- # 要在Pygame中使用精灵显示背景并实现循环展示,你可以按照以下步骤进行操作:
-
- #1. 导入Pygame模块:
-
-
- import pygame
-
-
- # 2. 初始化Pygame:
- pygame.init()
-
- # 3. 创建窗口并设置窗口标题:
-
-
- width = 800 # 窗口宽度
- height = 600 # 窗口高度
-
- window = pygame.display.set_mode((width, height))
- pygame.display.set_caption("bg.png")
-
-
- # 4. 创建背景精灵类:
-
-
- class Background(pygame.sprite.Sprite):
- def __init__(self, image_path):
- super().__init__()
- self.image = pygame.image.load(image_path)
- self.rect = self.image.get_rect()
- self.rect.bottom = height # 设置背景精灵的底部与窗口底部对齐
-
- def update(self):
- self.rect.move_ip(-1, 0) # 控制背景模拟向左移动
-
- # 当背景完全移出窗口时,重新放置在窗口右侧
- if self.rect.right <= 0:
- self.rect.left = width
-
-
- # 5. 创建背景精灵对象并添加到精灵组:
-
- background_image = "bg.png" # 背景图片路径
-
- background = Background(background_image)
- all_sprites = pygame.sprite.Group()
- all_sprites.add(background)
-
-
- # 6. 设置游戏循环:
-
-
- running = True
- clock = pygame.time.Clock()
-
- while running:
- clock.tick(60) # 设置游戏帧率为60
-
- # 检查事件
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- # 更新精灵
- all_sprites.update()
-
- # 绘制精灵
- all_sprites.draw(window)
-
- # 窗口更新
- pygame.display.flip()
-
- # 游戏退出,释放资源
- 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
更改为特定的背景图片路径,并根据需要调整窗口尺寸、帧率等参数。同时,你还可以根据需要添加其他精灵,以实现更复杂的游戏场景。
- import pygame
- # 初始化Pygame:
- pygame.init()
- # 创建窗口并设置窗口标题:
- width = 800 # 窗口宽度
- height = 600 # 窗口高度
-
- window = pygame.display.set_mode((width, height))
- pygame.display.set_caption("My Game")
- # 创建玩家精灵类:
- class Player(pygame.sprite.Sprite):
- def __init__(self):
- super().__init__()
- self.image = pygame.Surface((50, 50)) # 创建一个50x50的矩形作为玩家精灵的图像
- self.image.fill((255, 0, 0)) # 填充颜色为红色
- self.rect = self.image.get_rect()
- self.rect.center = (width // 2, height // 2) # 设置玩家精灵的初始位置
-
- def update(self):
- keys = pygame.key.get_pressed() # 获取当前按下的按键
-
- if keys[pygame.K_LEFT]:
- self.rect.x -= 5 # 向左移动5个单位
- if keys[pygame.K_RIGHT]:
- self.rect.x += 5 # 向右移动5个单位
- if keys[pygame.K_UP]:
- self.rect.y -= 5 # 向上移动5个单位
- if keys[pygame.K_DOWN]:
- self.rect.y += 5 # 向下移动5个单位
- # 创建玩家精灵对象并添加到精灵组:
- player = Player()
- all_sprites = pygame.sprite.Group()
- all_sprites.add(player)
- # 设置游戏循环:
- running = True
- clock = pygame.time.Clock()
-
- while running:
- clock.tick(60) # 设置游戏帧率为60
-
- # 检查事件
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- # 更新精灵
- all_sprites.update()
-
- # 绘制精灵
- window.fill((0, 0, 0)) # 使用黑色清空窗口
- all_sprites.draw(window)
-
- # 窗口更新
- pygame.display.flip()
-
- # 游戏退出,释放资源
- pygame.quit()
在上述代码中,我们创建了一个Player
类作为玩家精灵,它继承自pygame.sprite.Sprite
类。玩家精灵的图像是一个50x50的红色矩形。在update
方法中,我们通过检测按键来移动玩家精灵的位置。
在游戏循环中,我们先调用time模块,使用clock.tick(60)
设置游戏帧率为60,在事件处理后,更新精灵的状态并绘制在窗口上。为了避免显示玩家精灵的残影,我们在绘制前先使用黑色清空窗口。
- # 要在Pygame中使用UI元素,包括自定义字体和鼠标点击检测,你可以按照以下步骤进行操作:
-
- # 1. 导入Pygame模块:
-
-
- import pygame
-
-
- # 2. 初始化Pygame:
-
- pygame.init()
-
-
- # 3. 创建窗口并设置窗口标题:
-
-
- width = 800 # 窗口宽度
- height = 600 # 窗口高度
-
- window = pygame.display.set_mode((width, height))
- pygame.display.set_caption("My Game")
-
-
- # 4. 创建字体对象并加载字体文件:
-
-
- font = pygame.font.Font("font.ttf", 28) # 字体文件路径和字体大小
-
- # 5. 创建UI元素:
-
-
- text = font.render("Hello, World!", True, (255, 255, 255)) # 渲染文本,设置为白色
- text_rect = text.get_rect()
- text_rect.center = (width // 2, height // 2) # 设置文本位置居中
-
-
- # 6. 设置游戏循环:
-
-
- running = True
- clock = pygame.time.Clock()
-
- while running:
- clock.tick(60) # 设置游戏帧率为60
-
- # 检查事件
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- elif event.type == pygame.MOUSEBUTTONDOWN: # 鼠标点击事件
- mouse_pos = pygame.mouse.get_pos()
- if text_rect.collidepoint(mouse_pos): # 检测鼠标点击是否在文本矩形范围内
- print("Text clicked!")
-
- # 绘制UI元素
- window.fill((0, 0, 0)) # 使用黑色清空窗口
- window.blit(text, text_rect)
-
- # 窗口更新
- pygame.display.flip()
-
- # 游戏退出,释放资源
- pygame.quit()
在上述代码中,我们使用pygame.font.Font
创建了一个字体对象,并加载字体文件(.ttf格式)。然后,使用字体对象的render
方法渲染文本,传入文本内容、是否启用抗锯齿以及文本颜色。接着,获取文本的矩形并进行位置设置,将其居中显示。
在游戏循环中,我们先处理QUIT事件(窗口关闭事件),然后检测MOUSEBUTTONDOWN事件(鼠标点击事件)。通过pygame.mouse.get_pos()
获取鼠标点击的位置,然后使用collidepoint
方法检测该位置是否在文本矩形范围内。如果是,则输出文本被点击的消息。
在绘制UI元素时,我们使用黑色清空窗口,并使用blit
方法将文本绘制在窗口上。
- import pygame
-
- # 初始化Pygame
- pygame.init()
-
- # 创建窗口
- window_width, window_height = 800, 600
- window = pygame.display.set_mode((window_width, window_height))
- pygame.display.set_caption('游戏')
-
- # 定义颜色
- BLACK = (0, 0, 0)
- WHITE = (255, 255, 255)
-
- # 创建精灵类
- class Sprite(pygame.sprite.Sprite):
- def __init__(self, x, y, width, height, color):
- super().__init__()
- self.image = pygame.Surface((width, height))
- self.image.fill(color)
- self.rect = self.image.get_rect()
- self.rect.topleft = (x, y)
-
- # 创建道具类
- class Item(Sprite):
- def __init__(self, x, y, width, height, color):
- super().__init__(x, y, width, height, color)
-
- # 创建玩家类
- class Player(Sprite):
- def __init__(self, x, y, width, height, color):
- super().__init__(x, y, width, height, color)
-
- def update(self):
- # 获取键盘输入
- keys = pygame.key.get_pressed()
- if keys[pygame.K_LEFT]:
- self.rect.x -= 5
- if keys[pygame.K_RIGHT]:
- self.rect.x += 5
- if keys[pygame.K_UP]:
- self.rect.y -= 5
- if keys[pygame.K_DOWN]:
- self.rect.y += 5
-
- # 创建精灵组
- all_sprites = pygame.sprite.Group()
-
- # 创建玩家对象
- player = Player(100, 100, 50, 50, WHITE)
- all_sprites.add(player)
-
- # 创建道具对象
- item = Item(300, 300, 30, 30, WHITE)
- all_sprites.add(item)
-
- # 游戏循环
- running = True
- clock = pygame.time.Clock()
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- # 碰撞检测
- if pygame.sprite.collide_rect(player, item):
- print('玩家与道具碰撞!')
-
- # 更新精灵位置
- all_sprites.update()
-
- # 绘制背景
- window.fill(BLACK)
-
- # 绘制精灵
- all_sprites.draw(window)
-
- # 刷新画面
- pygame.display.flip()
-
- # 控制帧率
- clock.tick(60)
-
- # 退出游戏
- pygame.quit()
- # 导入Pygame库
- import pygame
-
- # 初始化Pygame库
- pygame.init()
-
- # 设置窗口的宽和高
- window_width, window_height = 800, 600
- # 创建窗口
- window = pygame.display.set_mode((window_width, window_height))
-
- # 加载背景音乐
- # pygame.mixer.music.load("bg_music.mp3")
- # 播放背景音乐(循环播放)
- # pygame.mixer.music.play(-1)
-
- # 加载爆炸音效
- # explode_sound = pygame.mixer.Sound("explode.wav")
-
- # 设置程序运行标志为True
- running = True
- # 进入主循环
- while running:
- # 遍历所有事件
- for event in pygame.event.get():
- # 如果事件类型为退出事件,则退出程序
- if event.type == pygame.QUIT:
- running = False
-
- # 如果触发了键盘按键事件
- if event.type == pygame.KEYDOWN:
- # 如果按下的按键是空格键,播放爆炸音效
- if event.key == pygame.K_SPACE:
- # explode_sound.play()
- pass
-
- # 填充窗口背景为白色
- window.fill((255, 255, 255))
- # 刷新窗口
- pygame.display.flip()
-
- # 停止播放背景音乐
- # 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. 退出游戏:在游戏循环结束之后,应该进行清理工作,例如释放资源、关闭窗口等。
以上是一个基本的游戏开发思路,当然在具体的开发过程中还会涉及到更多的细节和技术。要根据具体的游戏需求和个人技术水平进行相应的学习和实践。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。