【Python】赛车小游戏实战制作流程

1.定义常量

class Constant:

    SCREEN_WIDTH = 400 # 页面宽度
    SCREEN_HEIGHT = 600 # 页面长度
    BLACK = (0, 0, 0) 
    RED = "#FF0000"  # 结束界面
    FPS = 60   # 帧率大小
    SCORE = 0  # 初始分数
    SPEED = 5  # 敌人的运动速度

首先定义一个类,这个类的作用是定义一些以后会用得到的常量,例如页面的长宽高,游戏帧率的大小,这里的帧率选择60帧(可以根据自身喜好调节)。

2.设置敌人

class Enemy1(pygame.sprite.Sprite):

    def __init__(self):
        super(Enemy1,self).__init__()     # 调用父类的init方法初始化对象
        x,y = (random.randint(22,378),0)
        self.image = pygame.image.load("Demo/Enemy.png")
        self.surf = pygame.Surface((42, 70))
        self.rect = self.surf.get_rect(center=(x,y))  # 设置敌人的位置

    def move(self):
        global SCORE
        self.rect.move_ip(0,Constant.SPEED)
        if self.rect.top > Constant.SCREEN_HEIGHT:  # 设置加分机制
            Constant.SCORE += 1
            self.rect.top = 0                       
            self.rect.left = random.randint(0,356)  # 随机出现

设置一个敌人命名为Enemy1,初始化Enemy1,设置基础的参数,例如敌人的位置,敌人的大小,敌人随机出现的位置。最后利用一个if语句来设置我们的加分机制使得游戏更具挑战性。在设置完成我们第一个敌人以后我们可以复制粘贴,再增加一个敌人,使得游戏具体可玩性。

3.设置玩家

class Player(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()     # 调用父类的init方法初始化对象
        x,y = (Constant.SCREEN_WIDTH/2,Constant.SCREEN_HEIGHT/2)
        self.image = pygame.image.load("Demo/Player.png")
        self.surf = pygame.Surface((40,75))
        self.rect = self.image.get_rect(left=170,bottom=Constant.SCREEN_HEIGHT -21)

    def move(self):

        press_keys = pygame.key.get_pressed()

        if press_keys[K_DOWN] and self.rect.bottom <= Constant.SCREEN_HEIGHT -21:
            self.rect.move_ip(0, 5)
        if press_keys[K_UP] and self.rect.top >= 0:
            self.rect.move_ip(0, -5)
        if press_keys[K_RIGHT] and self.rect.right <= Constant.SCREEN_WIDTH - 4:
            self.rect.move_ip(5, 0)
        if press_keys[K_LEFT] and self.rect.left >= 0:
            self.rect.move_ip(-5, 0)

还是一样,我们首先初始化玩家的属性,将玩家的位置定义在居中靠下,设置玩家的大小。在初始化完成以后,我们利用pygame的功能,设置键盘让我们的赛车跑起来,并且要注意不要让玩家跑到我们的屏幕外面去了。

4.运行

class Game:

    def __init__(self):
        pygame.init()
        # 字体和文字
        self.font_big = pygame.font.SysFont("Impact", 60)
        self.font_small = pygame.font.SysFont("Verdana", 20)
        self.game_over = self.font_big.render("GAME OVER", True, Constant.BLACK)

        self.SPEED_UP = pygame.USEREVENT + 1
        pygame.time.set_timer(self.SPEED_UP, 1000)  # 设置计时器
        
        #设置标题以及界面大小 
        pygame.display.set_caption("逆行飙车")
        size = width, height = (Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT)
        self.screen = pygame.display.set_mode(size)
        self.clock = pygame.time.Clock()

        self.background = pygame.image.load("Demo/AnimatedStreet.png")

    def run(self):
        player = Player()
        enemy1 = Enemy1()
        enemy2 = Enemy2()

        enemies = pygame.sprite.Group()
        enemies.add(enemy1,enemy2)

        all_sprites = pygame.sprite.Group()
        all_sprites.add(player)
        all_sprites.add(enemy1,enemy2)

        pygame.mixer.Sound("Demo/background.wav").play(-1)
        OUT_OF_RANGE = pygame.USEREVENT + 1

        while True:
            self.screen.blit(self.background, (0, 0))
            scores = self.font_small.render(str(Constant.SCORE), True, Constant.BLACK)
            self.screen.blit(scores, (10, 10))

            for sprite in all_sprites:
                self.screen.blit(sprite.image, sprite.rect)
                sprite.move()

            for event in pygame.event.get():

                if event.type == self.SPEED_UP:
                    Constant.SPEED += 1

                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

            if pygame.sprite.spritecollide(player, enemies, True):  # True将敌人所在的组全部清除掉

                pygame.mixer.Sound("Demo/crash.wav").play()
                time.sleep(1)
                self.screen.fill(Constant.RED)
                self.screen.blit(self.game_over, (80, 150))

                pygame.display.update()
                time.sleep(2)

                pygame.quit()
                sys.exit()


            pygame.display.update()
            self.clock.tick(Constant.FPS)

在运行这个类里面,我们可以首先设置自己想要的字体,这里的字体我们可以自己在自己的电脑里找到电脑自带的字体。

 随后我们将我们的玩家和敌人都放入到调用的pygame精灵这个库里面,使得我们的游戏运行起来。利用while循环让我们的游戏启动起来。

5.启动


if __name__=='__main__':   # 使得游戏真正运行起来
    game = Game()
    game.run()

调用这段代码使得我们的游戏真正运行起来。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作赛车小游戏可以使用Python中的Pygame模块。以下是一些实现游戏的基本功能的方法: 1. 创建游戏窗口和背景:使用Pygame创建一个窗口,并在窗口中加载背景图像。 2. 加载游戏元素:加载玩家图像,赛车图像和其他游戏元素。 3. 碰撞检测:使用Pygame提供的碰撞检测函数来检测赛车是否与其他元素相撞。 4. 移动元素:使用Pygame提供的移动函数来移动玩家和赛车。 5. 分数统计:使用Python中的变量来跟踪玩家的分数,并在游戏过程中更新。 6. 游戏结束:当赛车与其他元素相撞或到达终点时,游戏应该结束。 下面是一个伪代码示例,演示如何实现基本的游戏功能: ``` # 导入Pygame模块 # 初始化Pygame pygame.init() # 创建游戏窗口 screen = pygame.display.set_mode((800, 600)) # 加载背景图像 background = pygame.image.load("background.png") # 加载玩家图像 player = pygame.image.load("player.png") # 加载赛车图像 car = pygame.image.load("car.png") # 初始化分数变量 score = 0 # 游戏循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: # 退出游戏 pygame.quit() sys.exit() # 绘制背景 screen.blit(background, (0, 0)) # 绘制玩家 screen.blit(player, (x, y)) # 绘制赛车 screen.blit(car, (cx, cy)) # 碰撞检测 if player_rect.colliderect(car_rect): # 游戏结束 game_over() # 移动元素 x += dx y += dy cx += cdx cy += cdy # 更新分数 score += 1 # 显示分数 show_score(score) # 更新屏幕 pygame.display.update() ``` 这是一个简单的示例,您可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值