Python-基于Pygame的小游戏(障碍赛车)(一)

前言:障碍赛车小游戏是一种以赛车为主题的游戏,玩家需要驾驶赛车在充满障碍物的赛道上进行比赛。游戏的目标通常是在避开障碍物的同时,尽可能的获得更高的积分。这类游戏通常具有简单的操作方式,适合各种年龄段的玩家。本期,我们一起来学习障碍赛车小游戏的编程过程。

编程思路:本次编程我们将会用到pygame,random库。其中pygame库是Python的第三方库,需要我们自行下载(这里就不再过多缀述了,不懂的小白可以看我前几篇文章下载pygame的教程)。

第一步:准备游戏相关图片

游戏的图片是需要我们自行准备的(包括赛车,障碍等)

这里我给大家一些参考图片(注意:图片像素不宜过大,200x200以内最好)

                                      障碍一

60a97ca52158463c82f4fd5f9121f9dd.png

障碍二

 

6111d7642a294801a30ec07db235c1d6.png

障碍三

8f180ade6c6e4efb90261cec10bcacda.png

                                   赛车一

99320081ca8040c8bb576b9385d1de2f.png

赛车二

baac138a3f9648b089d18742a68042d3.png

                                        障碍三

2b394cad64d5484ca736afbecbef03a9.png

(需要原图片的同学也可以私信我哦)

第二步:完整代码展示

#导入所需的模块
import pygame
import random

# 设置游戏窗口大小
WIDTH = 1500
HEIGHT = 750

# 游戏类
class Game:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        pygame.display.set_caption('障碍赛车')
        self.clock = pygame.time.Clock()

        # 加载小车和两种障碍的图片
        self.car_image = pygame.image.load('car.png').convert_alpha()
        self.obstacle1_image = pygame.image.load('barrier_1.png').convert_alpha()
        self.obstacle2_image = pygame.image.load('barrier_2.png').convert_alpha()

        self.car_rect = self.car_image.get_rect()
        self.car_rect.center = (WIDTH // 2, HEIGHT - 50)
        #设置小车的速度
        self.car_speed = 10

        self.obstacles = []
        self.score = 0
        self.font = pygame.font.Font(None, 36)
        self.game_over = False

        # 初始化按键状态
        self.left_pressed = False
        self.right_pressed = False
    def create_obstacle(self):
        obstacle_type = random.randint(1, 2)
        if obstacle_type == 1:
            obstacle_rect = self.obstacle1_image.get_rect()
        else:
            obstacle_rect = self.obstacle2_image.get_rect()
        obstacle_rect.x = random.randint(0, WIDTH - obstacle_rect.width)
        obstacle_rect.y = -obstacle_rect.height
        self.obstacles.append((obstacle_type, obstacle_rect))

    def check_collision(self):
        for obstacle_type, obstacle_rect in self.obstacles:
            if self.car_rect.colliderect(obstacle_rect):
                self.game_over = True


    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.game_over = True
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    self.left_pressed = True
                elif event.key == pygame.K_RIGHT:
                    self.right_pressed = True
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT:
                    self.left_pressed = False
                elif event.key == pygame.K_RIGHT:
                    self.right_pressed = False

    def move_car(self):
        if self.left_pressed and self.car_rect.left > 0:
            self.car_rect.x -= self.car_speed
        if self.right_pressed and self.car_rect.right < WIDTH:
            self.car_rect.x += self.car_speed

    def draw(self):
        self.screen.fill((255, 255, 255))
        self.screen.blit(self.car_image, self.car_rect)
        for obstacle_type, obstacle_rect in self.obstacles:
            if obstacle_type == 1:
                self.screen.blit(self.obstacle1_image, obstacle_rect)
            else:
                self.screen.blit(self.obstacle2_image, obstacle_rect)
        score_text = self.font.render(f"Score: {self.score}", True, (0, 0, 0))
        self.screen.blit(score_text, (10, 10))
        if self.game_over:
            game_over_text = self.font.render("游戏结束", True, (0, 0, 0))
            self.screen.blit(game_over_text, (WIDTH // 2 - 50, HEIGHT // 2))
        pygame.display.flip()

    def run(self):
        while not self.game_over:
            self.clock.tick(60)
            self.handle_events()
            self.move_car()
            if random.randint(0, 100) < 2:
                self.create_obstacle()
            for _, obstacle_rect in self.obstacles:
                obstacle_rect.y += 3
                if obstacle_rect.y > HEIGHT:
                    self.obstacles.remove((_, obstacle_rect))
            self.check_collision()
            self.score += 0.5
            self.draw()

        pygame.quit()

#游戏主函数
if __name__ == '__main__':
    game = Game()
    game.run()

第三步:运行效果展示

f7c4fa631c194597ba020942a3ba67ab.png

767b34db33de4bafa09c92a30a9afc09.png

d90e85046d3c452aa5a062e922731cb9.png

(后面我还会继续更新哦)

第四步:

玩法介绍:左,右方向键控制移动方向

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值