导入模块和初始化 pygame
import pygame
import random
# 初始化 pygame
pygame.init()
这段代码导入了pygame库用于游戏开发,同时导入了random模块用于生成随机数。然后调用pygame.init()初始化pygame库。
设置屏幕尺寸和创建屏幕
# 屏幕尺寸
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 400
# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("小恐龙游戏")
这里定义了游戏屏幕的宽度为 800 像素,高度为 400 像素。然后使用pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))创建一个游戏窗口,并设置窗口标题为 “小恐龙游戏”。
颜色定义
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
定义了两个颜色常量,白色和黑色,分别用 RGB 值表示。这些颜色将在游戏中用于绘制不同的元素。
小恐龙类定义
# 小恐龙类
class Dinosaur:
def __init__(self):
self.x = 50
self.y = SCREEN_HEIGHT - 100
self.jump_speed = -15
self.gravity = 1
self.is_jumping = False
定义了一个Dinosaur类表示小恐龙。在构造函数中,初始化小恐龙的横坐标x为 50,纵坐标y为屏幕高度减去 100,这样小恐龙初始位置在屏幕底部。设置跳跃速度jump_speed为 -15,重力gravity为 1,初始状态下小恐龙不是在跳跃中,即is_jumping为False。
def jump(self):
if not self.is_jumping:
self.is_jumping = True
self.y += self.jump_speed
这个方法用于让小恐龙跳跃。如果小恐龙当前不在跳跃状态,将is_jumping设置为True,并根据跳跃速度改变小恐龙的纵坐标。
def update(self):
if self.is_jumping:
self.y += self.jump_speed
self.jump_speed += self.gravity
if self.y >= SCREEN_HEIGHT - 100:
self.y = SCREEN_HEIGHT - 100
self.is_jumping = False
self.jump_speed = -15
这个方法用于更新小恐龙的状态。如果小恐龙在跳跃中,根据跳跃速度和重力更新纵坐标,并检查是否落地。如果小恐龙落地,将其纵坐标设置为屏幕底部,重置跳跃状态和跳跃速度。
障碍物类定义
# 障碍物类
class Obstacle:
def __init__(self):
self.x = SCREEN_WIDTH
self.y = SCREEN_HEIGHT - 50
self.speed = 5
定义了一个Obstacle类表示障碍物。在构造函数中,初始化障碍物的横坐标x为屏幕宽度,纵坐标y为屏幕高度减去 50,设置障碍物的移动速度speed为 5。
def update(self):
self.x -= self.speed
这个方法用于更新障碍物的位置,让障碍物向左移动。
创建游戏时钟
# 游戏时钟
clock = pygame.time.Clock()
创建一个游戏时钟对象,用于控制游戏的帧率。
创建小恐龙对象和障碍物列表
# 创建小恐龙对象
dino = Dinosaur()
# 创建障碍物列表
obstacles = []
创建一个小恐龙对象和一个空的障碍物列表,用于存储游戏中的障碍物。
游戏主循环
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
dino.jump()
这是游戏的主循环,当running为True时持续运行。循环中遍历pygame的事件队列,如果检测到窗口关闭事件(pygame.QUIT),则设置running为False,结束游戏。如果检测到键盘按下事件(pygame.KEYDOWN),并且按下的键是空格键(pygame.K_SPACE),则调用小恐龙的jump方法让小恐龙跳跃。
# 更新小恐龙状态
dino.update()
更新小恐龙的状态,根据小恐龙的当前状态更新其位置。
# 更新障碍物状态
for obstacle in obstacles:
obstacle.update()
if obstacle.x < -50:
obstacles.remove(obstacle)
遍历障碍物列表,更新每个障碍物的位置。如果障碍物移动到屏幕左侧(横坐标小于 -50),则从障碍物列表中移除该障碍物。
# 随机生成障碍物
if random.randint(1, 100) < 10:
new_obstacle = Obstacle()
obstacles.append(new_obstacle)
随机生成障碍物。使用random.randint(1, 100)生成一个 1 到 100 之间的随机数,如果这个随机数小于 10,则创建一个新的障碍物对象,并添加到障碍物列表中。
# 绘制背景
screen.fill(WHITE)
用白色填充屏幕,作为游戏的背景。
# 绘制小恐龙
pygame.draw.rect(screen, BLACK, (dino.x, dino.y, 50, 50))
在屏幕上绘制小恐龙,用黑色绘制一个矩形表示小恐龙,矩形的位置根据小恐龙的坐标和大小(50x50 像素)确定。
# 绘制障碍物
for obstacle in obstacles:
pygame.draw.rect(screen, BLACK, (obstacle.x, obstacle.y, 30, 30))
遍历障碍物列表,在屏幕上绘制每个障碍物,用黑色绘制一个矩形表示障碍物,矩形的大小为 30x30 像素。
pygame.display.flip()
clock.tick(30)
更新屏幕显示,使用clock.tick(30)控制游戏帧率为每秒 30 帧。
退出游戏
pygame.quit()
完整代码
import pygame
import random
# 初始化 pygame
pygame.init()
# 屏幕尺寸
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 400
# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("小恐龙游戏")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 小恐龙类
class Dinosaur:
def __init__(self):
self.x = 50
self.y = SCREEN_HEIGHT - 100
self.jump_speed = -15
self.gravity = 1
self.is_jumping = False
def jump(self):
if not self.is_jumping:
self.is_jumping = True
self.y += self.jump_speed
def update(self):
if self.is_jumping:
self.y += self.jump_speed
self.jump_speed += self.gravity
if self.y >= SCREEN_HEIGHT - 100:
self.y = SCREEN_HEIGHT - 100
self.is_jumping = False
self.jump_speed = -15
# 障碍物类
class Obstacle:
def __init__(self):
self.x = SCREEN_WIDTH
self.y = SCREEN_HEIGHT - 50
self.speed = 5
def update(self):
self.x -= self.speed
# 游戏时钟
clock = pygame.time.Clock()
# 创建小恐龙对象
dino = Dinosaur()
# 创建障碍物列表
obstacles = []
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
dino.jump()
# 更新小恐龙状态
dino.update()
# 更新障碍物状态
for obstacle in obstacles:
obstacle.update()
if obstacle.x < -50:
obstacles.remove(obstacle)
# 随机生成障碍物
if random.randint(1, 100) < 10:
new_obstacle = Obstacle()
obstacles.append(new_obstacle)
# 绘制背景
screen.fill(WHITE)
# 绘制小恐龙
pygame.draw.rect(screen, BLACK, (dino.x, dino.y, 50, 50))
# 绘制障碍物
for obstacle in obstacles:
pygame.draw.rect(screen, BLACK, (obstacle.x, obstacle.y, 30, 30))
pygame.display.flip()
clock.tick(30)
pygame.quit()