python语言入门必须要学习的模块化编程案例游戏---小恐龙【源码大全】

导入模块和初始化 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值