Python从入门到实践项目——外星人入侵游戏

本文介绍了一款使用Python的pygame库编写的外星人入侵小游戏。玩家通过左右键移动飞船,空格键射击,Q键退出游戏。文章详细列出了游戏的主要组成部分,包括主程序、飞船类、外星人类、游戏运行函数、设置类、子弹类、游戏统计信息类和记分板类等。
摘要由CSDN通过智能技术生成

Alien_invasion-Game

  • 用 Python 编写的外星人入侵小游戏
  • 来源 《Python编程 从入门到实践》项目1 外星人入侵

操作方法

  • 按左右键移动飞船
  • 按空格键射击
  • 按Q键退出

附上代码

  • 主程序

    import sys
    import pygame
    from  setting import Settings
    from ship import Ship
    from alien import Alien
    import game_function as gf
    from pygame.sprite import Group
    from game_stats import GameStats
    from button import Button
    from scoreboard import Scoreboard
    
    def run_game():
        
        ai_settings = Settings()#创建一个实例
        # 初始化游戏并创建一个屏幕对象
        pygame.init()
        screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    
        programIcon = pygame.image.load("image\icon.bmp")
        pygame.display.set_icon(programIcon)
        pygame.display.set_caption("外星人入侵")
    
        #创建一艘飞船
        ship = Ship(ai_settings , screen)
        
        #创建一个用于存储子弹的编组
        bullets = Group()
    
        #创建一个外星人
        #alien = Alien(ai_settings,screen)
    
        #创建外星人群
        aliens = Group()
        gf.create_fleet(ai_settings,screen,ship,aliens)
    
        #创建一个用于存储游戏信息的实例
        stats = GameStats(ai_settings)
    
        #创建记分牌
        sb = Scoreboard(ai_settings,screen,stats)
    
        # 创建play按钮
        play_button = Button(ai_settings,screen,'Play')
    
        #开始游戏的主循环
        while True:
            gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)
    
            if stats.game_active:
                ship.update()
                gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)
                gf.update_aliens(ai_settings,stats,sb,screen,ship,aliens,bullets)
            
            gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)
    
    run_game()
    
    

  • 飞船类:设置飞船的相关参数

    import pygame
    from pygame.sprite import Sprite
    
    class Ship(Sprite):
        def __init__(self,ai_settings,screen):
            '''初始化飞船并设置其初始位置'''
    
            super(Ship,self).__init__()
            # Sprite.__init__(self)
            self.screen = screen
    
            self.ai_settings = ai_settings
    
            # 加载飞船图像并获得其外接矩形
            self.image = pygame.image.load("image\ship.bmp")
            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
    
            #在飞船属性center中存储小数
            self.center = float(self.rect.centerx)
    
            # 移动标志
            self.moving_right = False
            self.moving_left = False
    
        def update(self):
            '''根据移动标志调整飞船的位置'''
            #更新飞船的center值,而不是rect
            if self.moving_right and self.rect.right < self.screen_rect.right:
                self.rect.centerx += self.ai_settings.ship_speed_factor
    
            if 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)
    
        def center_ship(self):
            '''让飞船在屏幕居中'''
            self.center = self.screen_rect.centerx
    

  • 外星人类

    import pygame
    from pygame.sprite import Sprite
    
    class Alien(Sprite):
        '''表示单个外星人的类'''
    
        def __init__(self,ai_settings,screen):
            '''初始化外星人并设置其起始位置'''
            Sprite.__init__(self)
            self.screen = screen
            self.ai_settings = ai_settings
    
            # 加载外星人图像,并设置其rect属性
            self.image = pygame.image.load("image\\alien.bmp")
            self.rect =self.image.get_rect()
    
            # 每个外星人最初都在屏幕左上角附近
            self.rect.x = self.rect.width
            self.rect.y = self.rect.height
    
            # 存储外星人的准确位置
            self.x = float(self.rect.x)
    
        def blitme(self):
            '''在指定位置上绘制外星人'''
            self.screen.blit(self.image,self.rect)
    
        def check_edges(self):
            '''如果外星人位于屏幕边缘,就返回True'''
            screen_rect = self.screen.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值