首页  > 经典回顾

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

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

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

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

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

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

障碍一

障碍二

障碍三

赛车一

赛车二

障碍三

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

第二步:完整代码展示

#导入所需的模块

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()

第三步:运行效果展示

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

第四步:

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