前言:障碍赛车小游戏是一种以赛车为主题的游戏,玩家需要驾驶赛车在充满障碍物的赛道上进行比赛。游戏的目标通常是在避开障碍物的同时,尽可能的获得更高的积分。这类游戏通常具有简单的操作方式,适合各种年龄段的玩家。本期,我们一起来学习障碍赛车小游戏的编程过程。
编程思路:本次编程我们将会用到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()
第三步:运行效果展示
(后面我还会继续更新哦)
第四步:
玩法介绍:左,右方向键控制移动方向