游戏开发是一个充满乐趣和挑战的领域,而Python作为一种易学且功能强大的语言,在游戏开发中也有着广泛的应用。今天,我们就来聊聊如何用Python进行游戏开发,并介绍6个热门的游戏开发引擎。
1. Pygame
简介: Pygame 是一个开源的 Python 模块,专门用于编写视频游戏。它基于 SDL(Simple DirectMedia Layer)库,提供了丰富的功能,如图像处理、声音播放、事件处理等。
安装:
pip install pygame
示例代码:
import pygame
import sys
# 初始化 Pygame
pygame.init()
# 设置窗口大小
screen = pygame.display.set_mode((800, 600))
# 设置窗口标题
pygame.display.set_caption("Pygame 示例")
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 填充背景颜色
screen.fill((0, 0, 0))
# 绘制一个红色矩形
pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 150))
# 更新屏幕
pygame.display.flip()
# 退出 Pygame
pygame.quit()
sys.exit()
解释:
pygame.init()
:初始化 Pygame。pygame.display.set_mode((800, 600))
:设置窗口大小为 800x600。pygame.display.set_caption("Pygame 示例")
:设置窗口标题。pygame.event.get()
:获取事件队列中的所有事件。pygame.QUIT
:检测是否点击了关闭按钮。screen.fill((0, 0, 0))
:填充背景颜色为黑色。pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 150))
:绘制一个红色矩形。pygame.display.flip()
:更新屏幕显示。pygame.quit()
和sys.exit()
:退出 Pygame 并关闭程序。
2. Panda3D
简介: Panda3D 是一个免费的、开源的 3D 游戏引擎,支持 Python 和 C++ 编程。它提供了强大的 3D 图形渲染、物理模拟和音频处理功能。
安装:
pip install panda3d
示例代码:
from direct.showbase.ShowBase import ShowBase
from panda3d.core import Point3
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# 加载模型
self.model = self.loader.loadModel("models/environment")
self.model.reparentTo(self.render)
self.model.setScale(0.25, 0.25, 0.25)
self.model.setPos(-8, 42, 0)
# 创建一个旋转任务
self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
def spinCameraTask(self, task):
angleDegrees = task.time * 6.0
angleRadians = angleDegrees * (3.14159 / 180.0)
self.camera.setPos(20 * np.sin(angleRadians), -20 * np.cos(angleRadians), 3)
self.camera.lookAt(Point3(0, 0, 0))
return task.cont
app = MyApp()
app.run()
解释:
ShowBase
:Panda3D 的基础类,用于创建和管理游戏窗口。self.loader.loadModel("models/environment")
:加载 3D 模型。self.model.reparentTo(self.render)
:将模型添加到场景中。self.model.setScale(0.25, 0.25, 0.25)
:设置模型的缩放比例。self.model.setPos(-8, 42, 0)
:设置模型的位置。self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
:添加一个任务,使相机旋转。self.camera.setPos(20 * np.sin(angleRadians), -20 * np.cos(angleRadians), 3)
:设置相机的位置。self.camera.lookAt(Point3(0, 0, 0))
:使相机看向指定点。
3. Pyglet
简介: Pyglet 是一个跨平台的窗口和多媒体库,支持 Python。它可以用来创建窗口、处理用户输入、播放音频和视频等。
安装:
pip install pyglet
示例代码:
import pyglet
# 创建窗口
window = pyglet.window.Window(width=800, height=600, caption="Pyglet 示例")
# 加载图片
image = pyglet.resource.image('example.png')
@window.event
def on_draw():
window.clear()
image.blit(0, 0)
# 运行应用程序
pyglet.app.run()
解释:
pyglet.window.Window(width=800, height=600, caption="Pyglet 示例")
:创建一个 800x600 的窗口。pyglet.resource.image('example.png')
:加载图片资源。@window.event
:装饰器,用于绑定事件处理函数。on_draw()
:绘制事件处理函数,清除窗口并绘制图片。pyglet.app.run()
:启动应用程序。
4. Godot
简介: Godot 是一个免费的、开源的 2D 和 3D 游戏引擎,支持多种脚本语言,包括 Python(通过 GDScript)。虽然 Godot 默认使用 GDScript,但可以通过插件支持 Python。
安装: 下载 Godot 引擎并安装。
示例代码:
extends Node2D
func _ready():
print("游戏初始化完成")
func _process(delta):
print("游戏运行中")
解释:
extends Node2D
:继承自Node2D
类,表示这是一个 2D 节点。_ready()
:当节点准备好时调用的函数。_process(delta)
:每帧调用的函数,delta
表示上一帧到当前帧的时间间隔。
5. Arcade
简介: Arcade 是一个现代的 Python 游戏开发库,专注于 2D 游戏。它提供了丰富的功能,如精灵管理、碰撞检测、物理引擎等。
安装:
pip install arcade
示例代码:
import arcade
# 设置窗口参数
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "Arcade 示例"
class MyGame(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
# 设置背景颜色
arcade.set_background_color(arcade.color.WHITE)
def setup(self):
# 初始化游戏对象
self.player_sprite = arcade.Sprite("player.png", 0.5)
self.player_sprite.center_x = 100
self.player_sprite.center_y = 100
def on_draw(self):
# 开始绘制
arcade.start_render()
# 绘制玩家角色
self.player_sprite.draw()
def on_update(self, delta_time):
# 更新游戏状态
pass
def main():
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
game.setup()
arcade.run()
if __name__ == "__main__":
main()
解释:
arcade.Window
:创建一个游戏窗口。arcade.set_background_color(arcade.color.WHITE)
:设置背景颜色为白色。self.player_sprite = arcade.Sprite("player.png", 0.5)
:加载玩家角色的精灵图,并设置缩放比例。self.player_sprite.center_x = 100
和self.player_sprite.center_y = 100
:设置玩家角色的初始位置。arcade.start_render()
:开始绘制。self.player_sprite.draw()
:绘制玩家角色。arcade.run()
:启动游戏循环。
6. PyOpenGL
简介: PyOpenGL 是 Python 的 OpenGL 绑定库,用于创建高性能的图形应用程序。它允许开发者直接使用 OpenGL API 进行图形渲染。
安装:
pip install PyOpenGL PyOpenGL_accelerate
示例代码:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
vertices = (
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1)
)
edges = (
(0, 1),
(1, 2),
(2, 3),
(3, 0),
(4, 5),
(5, 6),
(6, 7),
(7, 4),
(0, 4),
(1, 5),
(2, 6),
(3, 7)
)
def draw_cube():
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()
def main():
pygame.init()
display = (800, 600)
pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)
glTranslatef(0.0, 0.0, -5)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glRotatef(1, 3, 1, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
draw_cube()
pygame.display.flip()
pygame.time.wait(10)
if __name__ == "__main__":
main()
解释:
pygame.init()
:初始化 Pygame。pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
:设置窗口模式为双缓冲和 OpenGL。gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)
:设置透视投影。glTranslatef(0.0, 0.0, -5)
:将视图平移。glRotatef(1, 3, 1, 1)
:旋转立方体。glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
:清除颜色和深度缓冲区。draw_cube()
:绘制立方体。pygame.display.flip()
:更新屏幕显示。pygame.time.wait(10)
:等待 10 毫秒。
实战案例:制作一个简单的 2D 射击游戏
需求:
玩家可以控制一个飞船,使用键盘移动和射击。 敌人会从屏幕上方随机出现,向下移动。 玩家射击敌人得分,被敌人碰到则游戏结束。
实现:
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置窗口大小
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("2D 射击游戏")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 玩家飞船
player_size = 50
player_pos = [350, 500]
player_speed = 10
# 子弹
bullet_size = 10
bullet_speed = 15
bullets = []
# 敌人
enemy_size = 50
enemy_speed = 5
enemies = []
enemy_count = 5
# 分数
score = 0
font = pygame.font.SysFont("monospace", 35)
# 游戏主循环
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:
bullet_pos = [player_pos[0] + player_size // 2, player_pos[1]]
bullets.append(bullet_pos)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_pos[0] -= player_speed
if keys[pygame.K_RIGHT]:
player_pos[0] += player_speed
# 更新子弹位置
for bullet in bullets:
bullet[1] -= bullet_speed
if bullet[1] < 0:
bullets.remove(bullet)
# 生成敌人
if len(enemies) < enemy_count:
enemy_pos = [random.randint(0, 750), 0]
enemies.append(enemy_pos)
# 更新敌人位置
for enemy in enemies:
enemy[1] += enemy_speed
if enemy[1] > 600:
enemies.remove(enemy)
# 检测碰撞
for enemy in enemies:
if (player_pos[0] < enemy[0] < player_pos[0] + player_size and
player_pos[1] < enemy[1] < player_pos[1] + player_size):
running = False
for bullet in bullets:
if (enemy[0] < bullet[0] < enemy[0] + enemy_size and
enemy[1] < bullet[1] < enemy[1] + enemy_size):
enemies.remove(enemy)
bullets.remove(bullet)
score += 1
# 绘制背景
screen.fill(BLACK)
# 绘制玩家
pygame.draw.rect(screen, GREEN, (player_pos[0], player_pos[1], player_size, player_size))
# 绘制子弹
for bullet in bullets:
pygame.draw.rect(screen, RED, (bullet[0], bullet[1], bullet_size, bullet_size))
# 绘制敌人
for enemy in enemies:
pygame.draw.rect(screen, WHITE, (enemy[0], enemy[1], enemy_size, enemy_size))
# 显示分数
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_text, (10, 10))
# 更新屏幕
pygame.display.flip()
# 控制帧率
pygame.time.Clock().tick(30)
# 退出 Pygame
pygame.quit()
解释:
player_pos
和player_speed
:玩家飞船的位置和速度。bullets
:存储子弹的位置。enemies
:存储敌人的位置。score
:玩家得分。keys = pygame.key.get_pressed()
:获取按键状态。for bullet in bullets:
:更新子弹位置并检测子弹是否超出屏幕。if len(enemies) < enemy_count:
:生成新的敌人。for enemy in enemies:
:更新敌人位置并检测敌人是否超出屏幕。if (player_pos[0] < enemy[0] < player_pos[0] + player_size and player_pos[1] < enemy[1] < player_pos[1] + player_size):
:检测玩家与敌人的碰撞。if (enemy[0] < bullet[0] < enemy[0] + enemy_size and enemy[1] < bullet[1] < enemy[1] + enemy_size):
:检测子弹与敌人的碰撞。pygame.draw.rect(screen, color, (x, y, width, height))
:绘制矩形。pygame.display.flip()
:更新屏幕显示。pygame.time.Clock().tick(30)
:控制帧率为 30 FPS。
本文介绍了如何用 Python 进行游戏开发,并详细讲解了 Pygame、Panda3D、Pyglet、Godot、Arcade 和 PyOpenGL 六个热门的游戏开发引擎。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。