美文网首页
Python外星人入侵游戏(四):飞船左右移动

Python外星人入侵游戏(四):飞船左右移动

作者: 微风细雨007 | 来源:发表于2020-03-15 08:20 被阅读0次

    今日任务:

    • 控制飞船

    动手前思考

    • 1.如何实现左右移动;游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成
    • 2.考虑到习惯,我们通常点击后不松开就会一直移动;移动不能出屏幕,考虑好之后,代码如下

    实现代码
    alien_invasion.py

    import sys
    import pygame
    from setting import Settings
    from ship import Ship
    
    
    def run_game():
        # 初始化游戏并创建一个屏幕对象
        pygame.init()
        ai_settings = Settings()
        screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
        pygame.display.set_caption("外星人入侵")
    
        # 创建一艘飞船
        ship = Ship(ai_settings, screen)
    
        # 开始游戏主循环
        while True:
            check_events(ship)
            ship.update()
            update_screen(ai_settings, screen, ship)
    
    
    # 监测事件
    def check_events(ship):
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                check_keydown_events(event, ship)
            elif event.type == pygame.KEYUP:
                check_keyup_events(event, ship)
    
    
    def check_keydown_events(event, ship):
        """响应按键"""
        if event.key == pygame.K_RIGHT:
            ship.moving_right = True
        if event.key == pygame.K_LEFT:
            ship.moving_left = True
    
    
    def check_keyup_events(event, ship):
        """响应松开"""
        if event.key == pygame.K_RIGHT:
            ship.moving_right = False
        if event.key == pygame.K_LEFT:
            ship.moving_left = False
    
    
    # 更新屏幕
    def update_screen(ai_settings, screen, ship):
        # 每次循环都重绘屏幕
        screen.fill(ai_settings.bg_color)
    
        ship.blitme()
    
        # 让最近绘制的屏幕可见
        pygame.display.flip()
    
    
    run_game()
    
    

    ship.py

    import pygame
    
    
    class Ship:
        def __init__(self, ai_settings, screen):
            """初始化飞船并设置初始位置"""
            self.screen = screen
    
            # 加载飞船图像并设置其初始位置
            self.image = pygame.image.load('img/ship.png')
            self.rect = self.image.get_rect()
            self.screen_rect = screen.get_rect()
    
            # 将每艘新飞船放在屏幕底部中央
            self.rect.centerx = self.screen_rect.centerx
            self.rect.bottom = self.screen_rect.bottom
            self.ai_settings = ai_settings
    
            # 移动标志
            self.moving_right = False
            self.moving_left = False
    
        def update(self):
            """根据移动标志调整飞船位置"""
            if self.moving_right and self.rect.right < self.screen_rect.right:
                self.rect.centerx += self.ai_settings.ship_speed_factor
            elif self.moving_left and self.rect.left > 0:
                self.rect.centerx -= self.ai_settings.ship_speed_factor
    
        def blitme(self):
            """在指定位置绘制飞船"""
            self.screen.blit(self.image, self.rect)
    
    

    小结

    Python 使用不是main函数哦,注意变量的使用,到这里,我终于知道,为什么要建一个设置类,去存储常量,不是Java随便找个地方设置一个全局变量了。

    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

    在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

    相关文章

      网友评论

          本文标题:Python外星人入侵游戏(四):飞船左右移动

          本文链接:https://www.haomeiwen.com/subject/dyalhhtx.html