精华内容
下载资源
问答
  • 2020-11-25 06:27:24

    1 importsys2

    3 importpygame4 from bullet importBullet5 from alien importAlien6 from time importsleep7

    8 defcheck_events(ai_setting, screen, stats, sb, play_button, ship, aliens, bullets):9 """响应按键和鼠标事件"""

    10 for event inpygame.event.get():11 if event.type ==pygame.QUIT:12 sys.exit()13

    14 elif event.type ==pygame.KEYDOWN:15 if event.key ==pygame.K_RIGHT:16 #向右移动飞船

    17 ship.moving_right =True18 elif event.key ==pygame.K_LEFT:19 ship.moving_left =True20 elif event.key ==pygame.K_SPACE:21 #创建一颗子弹,并将其加入到编组bullets中

    22 if len(bullets)

    <

    更多相关内容
  • Python编程——从入门到实践外星人入侵项目代码,内含各个代码文件,包括外星人入侵项目中需要用到的图片
  • pygame小游戏,外星人入侵(alien_invasion);里面代码图片资源包齐全,代码有注释,可直接运行
  • pygame外星人入侵

    千次阅读 多人点赞 2022-04-10 22:16:35
    现在让hacker带领你们走进pygame的世界 外星人入侵 游戏开始前的注意事项 《外星人入侵》游戏简介 开始游戏项目实战开发 游戏中需要的所有模块 alien_invasion.py alien.py bullet.py button.py game_functions.py ...

    ✅作者简介:大家好我是hacker707,大家可以叫我hacker,新星计划第三季python赛道Top1🥇🥇🥇
    📃个人主页:hacker707的csdn博客
    🔥系列专栏:python
    💬推荐一款模拟面试、刷题神器👉点击跳转进入网站

    最近在看一本《python:从入门到实践》,这本书是我看的第一本python书籍,也是一本非常推荐大家阅读的书籍,干货满满。现在让hacker带领你们走进pygame的世界🔥🔥🔥

    在这里插入图片描述

    游戏开始前的注意事项💬💬💬

    1:游戏《外星人入侵》将包含很多文件,请在你的D盘中新建一个空文件夹,并将其命名为alien_invasion.请务必将所有文件存储在这个文件夹中,这样游戏才能正常运行。
    2:在开始编码前请安装pygame库(在pycharm终端pip install pygame即可)
    如果在安装时遇到以下情况,请更新pip版本(将以下内容复制粘贴到下面回车即可)
    在这里插入图片描述

    《外星人入侵》游戏简介

    在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用方向键左右移动飞<<船,还可以使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务就是射杀这些外星人。玩家将所有的外星人全部射杀,将会出现一群新的外星人群。他们的移动速度更快。只要有外星人撞到玩家的飞船或者屏幕底部,玩家就损失一艘飞船,。玩家损失三艘飞船后游戏结束。

    开始游戏项目实战开发

    在D盘的alien_invasion文件夹中新建一个images文件夹,将外星人的图像命名为alien,将飞船图像命名为ship
    alien.bmp
    在这里插入图片描述
    ship.bmp
    在这里插入图片描述

    游戏中需要的所有模块🎉🎉🎉

    在这里插入图片描述
    下面将为大家介绍各个模块 仅供学习参考,最好还是自己多敲多练习

    alien_invasion.py

    创建pygame窗口
    只需运行文件alien_invasion.py即可开始游戏,其他文件内容会被间接或直接导入到该文件

    import sys
    import pygame
    from pygame.sprite import Group
    from settings import Settings
    from game_stats import GameSrats
    from scoreboard import Scoreboard
    from button import Button
    from ship import Ship
    from alien import Alien
    import game_functions as gf
    
    
    def run_game():
        # 初始化pygame,设置和屏幕对象
        pygame.init()
        ai_settings = Settings()
        screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
        pygame.display.set_caption("外星人入侵")
    
        # 创建play按钮
        play_button = Button(ai_settings, screen, "play")
    
        # 创建存储游戏统计信息的实例,并创建得分牌
        stats = GameSrats(ai_settings)
        sb = Scoreboard(ai_settings, screen, stats)
    
        # 创建一艘飞船,一个子弹编组和一个外星人编组
        ship = Ship(ai_settings, screen)
        bullets = Group()
        aliens = Group()
    
        # 创建外星人群
        gf.create_fleet(ai_settings, screen, ship, aliens)
    
        # 开始游戏主循环
        while True:
            gf.cheak_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, screen, stats, sb, ship, aliens, bullets)
    
            gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
    
    
    run_game()
    
    

    alien.py

    管理外星人类

    import pygame
    from pygame.sprite import Sprite
    
    
    class Alien(Sprite):
        """表示单个外星人的类"""
    
        def __init__(self, ai_settings, screen):
            """初始化外星人并设置其初始位置"""
            super().__init__()
            self.screen = screen
            self.ai_settings = ai_settings
    
            # 加载外星人图像,并设置其rect属性
            self.image = pygame.image.load('images/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 cheak_edgs(self):
            """如果外星人位于屏幕边缘,就返回True"""
            screen_rect = self.screen.get_rect()
            if self.rect.right >= screen_rect.right:
                return True
            elif self.rect.left <= 0:
                return True
    
        def update(self):
            """向左或向右移动外星人人"""
            self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
            self.rect.x = self.x
    
    

    bullet.py

    创建子弹类,将子弹存储到编组Group中

    import pygame
    from pygame.sprite import Sprite
    
    
    class Bullet(Sprite):
        """一个对飞船发射的子弹进行管理的类"""
    
        def __init__(self, ai_settings, screen, ship):
            """在飞船所处位置创建一个子弹对象"""
            super().__init__()
            self.screen = screen
    
            # 在(0,0)处创建一个表示子弹的矩形,再设置正确的位置
            self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)
            self.rect.centerx = ship.rect.centerx
            self.rect.top = ship.rect.top
    
            # 存储用小数表示的子弹位置
            self.y = float(self.rect.y)
    
            self.color = ai_settings.bullet_color
            self.speed_factor = ai_settings.bullet_speed_factor
    
        def update(self):
            """向上发射子弹"""
            # 更新表示子弹的小数值
            self.y -= self.speed_factor
            # 更新表示子弹的rect的位置
            self.rect.y = self.y
    
        def draw_bullet(self):
            """在屏幕上绘制子弹"""
            pygame.draw.rect(self.screen, self.color, self.rect)
    
    

    button.py

    按键类,实例化按键,添加play按钮

    import pygame.font
    
    
    class Button():
    
        def __init__(self, ai_settings, screen, msg):
            """初始化按钮的属性"""
            self.screen = screen
            self.screen_rect = screen.get_rect()
    
            # 设置按钮的尺寸和其他属性
            self.width, self.hieght = 200, 50
            self.button_color = (0, 255, 0)
            self.text_color = (255, 255, 255)
            self.font = pygame.font.SysFont(None, 48)
    
            # 创建按钮的rect对象,并将其居中
            self.rect = pygame.Rect(0, 0, self.width, self.hieght)
            self.rect.center = self.screen_rect.center
    
            # 按钮的标志只需创建一次
            self.prep_msg(msg)
    
        def prep_msg(self, msg):
            """将msg渲染为图像,并将其在按钮中居中"""
            self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
            self.msg_image_rect = self.msg_image.get_rect()
            self.msg_image_rect.center = self.rect.center
    
        def draw_button(self):
            """绘制一个用颜色填充的按钮,再绘制文本"""
            self.screen.fill(self.button_color, self.rect)
            self.screen.blit(self.msg_image, self.msg_image_rect)
    
    

    game_functions.py

    文件game_functions.py包含一系列函数,需要响应按键和鼠标事件,游戏大部分工作都是由它们完成的。

    import sys
    from time import sleep
    import pygame
    from bullet import Bullet
    from alien import Alien
    
    
    def cheak_keydowen_events(event, ai_settings, screen, ship, bullets):
        """响应按键"""
        if event.key == pygame.K_RIGHT:
            ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            ship.moving_left = True
        elif event.key == pygame.K_SPACE:
            fire_bullet(ai_settings, screen, ship, bullets)
        elif event.key == pygame.K_q:
            sys.exit()
    
    
    def fire_bullet(ai_settings, screen, ship, bullets):
        """如果还没到达限制,就发射一颗子弹"""
        # 创建一颗子弹,并将其加入到编组bullets中
        if len(bullets) < ai_settings.bullets_allowed:
            news_bullet = Bullet(ai_settings, screen, ship)
            bullets.add(news_bullet)
    
    
    def cheak_keyup_events(event, ship):
        """响应松开"""
        if event.key == pygame.K_RIGHT:
            ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            ship.moving_left = False
    
    
    def cheak_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets):
        """响应按键和鼠标事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                cheak_keydowen_events(event, ai_settings, screen, ship, bullets)
            elif event.type == pygame.KEYUP:
                cheak_keyup_events(event, ship)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_x, mouse_y = pygame.mouse.get_pos()
                cheak_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y)
    
    
    def cheak_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y):
        """在玩家单击play按钮时开始新游戏"""
        bullets_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)
        if bullets_clicked and not stats.game_active:
            # 重置游戏设置
            ai_settings.initialize_dynamic_settings()
            # 隐藏光标
            pygame.mouse.set_visible(False)
            # 重置游戏统计信息
            stats.reset_stats()
            stats.game_active = True
    
            # 重置记分牌对象
            sb.prep_score()
            sb.prep_high_score()
            sb.prep_level()
            sb.prep_ships()
    
            # 清空外星人列表和子弹列表
            aliens.empty()
            bullets.empty()
    
            # 创建一群新的外星人,并让飞船居中
            create_fleet(ai_settings, screen, ship, aliens)
            ship.center_ship()
    
    
    def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button):
        """更新屏幕上的图像,并切换到新屏幕"""
        # 每次循环都重绘屏幕
        screen.fill(ai_settings.bg_color)
        # 在飞船和外星人后面重绘所有子弹
        for bullet in bullets.sprites():
            bullet.draw_bullet()
        ship.blitme()
        aliens.draw(screen)
    
        # 显示得分
        sb.show_score()
    
        # 如果游戏处于非活动状态,就绘制play按钮
        if not stats.game_active:
            play_button.draw_button()
    
        # 让最近绘制的屏幕可见
        pygame.display.flip()
    
    
    def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):
        """更新子弹的位置,并删除已消失子弹"""
        # 更新子弹位置
        bullets.update()
    
        # 删除已消失的子弹
        for bullet in bullets.copy():
            if bullet.rect.bottom <= 0:
                bullets.remove(bullet)
        cheak_bullets_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets)
    
    
    def cheak_bullets_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets):
        """响应子弹和外星人碰撞"""
        # 删除发生碰撞的子弹和外星人
        collections = pygame.sprite.groupcollide(bullets, aliens, True, True)
    
        if collections:
            for aliens in collections.values():
                stats.score += ai_settings.alien_points * len(aliens)
                sb.prep_score()
            cheak_high_score(stats, sb)
    
        if len(aliens) == 0:
            # 如果整群外星人都被消灭,就提高一个等级
            # 删除现有的子弹,加快游戏节奏,并创建一群新的外星人
            bullets.empty()
            ai_settings.increase_speed()
    
            # 提高等级
            stats.level += 1
            sb.prep_level()
    
            create_fleet(ai_settings, screen, ship, aliens)
    
    
    def get_number_alien_x(ai_settings, alien_width):
        """计算每行可容纳多少外星人"""
        available_space_x = ai_settings.screen_width - 2 * alien_width
        number_alien_x = int(available_space_x / (2 * alien_width))
        return number_alien_x
    
    
    def get_number_rows(ai_settings, ship_height, alien_height):
        """计算屏幕可容纳多少行机器人"""
        available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height)
        number_rows = int(available_space_y / (2 * alien_height))
        return number_rows
    
    
    def create_alien(ai_settings, screen, aliens, alien_number, row_number):
        # 创建第一行外星人并将其加入当前行
        alien = Alien(ai_settings, screen)
        alien_width = alien.rect.width
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
        aliens.add(alien)
    
    
    def create_fleet(ai_settings, screen, ship, aliens):
        """创建外星人群"""
        # 创建一个外星人,并计算一行可容纳多少个外星人
        # 外星人间距为外星人宽度
        alien = Alien(ai_settings, screen)
        number_alien_x = get_number_alien_x(ai_settings, alien.rect.width)
        number_rows = get_number_rows(ai_settings, ship.rect.height, alien.rect.height)
    
        # 创建外星人群
        for row_number in range(number_rows):
            for alien_number in range(number_alien_x):
                create_alien(ai_settings, screen, aliens, alien_number, row_number)
    
    
    def cheak_fleet_edges(ai_settings, aliens):
        """有外星人到达屏幕边缘时采取相应的措施"""
        for alien in aliens.sprites():
            if alien.cheak_edgs():
                change_fleet_direction(ai_settings, aliens)
                break
    
    
    def change_fleet_direction(ai_settings, aliens):
        """将整群外星人下移,并改变它们的位置"""
        for alien in aliens.sprites():
            alien.rect.y += ai_settings.fleet_drop_speed
        ai_settings.fleet_direction *= -1
    
    
    def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets):
        """响应被外星人撞到的飞船"""
        if stats.ships_left > 0:
            # 将ships_left减1
            stats.ships_left -= 1
    
            # 更新记分牌
            sb.prep_ships()
    
            # 清空外星人列表和子弹列表
            aliens.empty()
            bullets.empty()
    
            # 创建一群新的外星人,并将飞船放在屏幕底端中央
            create_fleet(ai_settings, screen, ship, aliens)
            ship.center_ship()
    
            # 暂停
            sleep(0.5)
    
        else:
            stats.game_active = False
            pygame.mouse.set_visible(True)
    
    
    def cheak_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets):
        """检查是否有外星人到达了屏幕底端"""
        screen_rect = screen.get_rect()
        for alien in aliens.sprites():
            if alien.rect.bottom >= screen_rect.bottom:
                # 像飞船被撞到一样进行处理
                ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)
                break
    
    
    def update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets):
        """检查是否有外星人位于屏幕边缘,并更新整群外星人的位置"""
        cheak_fleet_edges(ai_settings, aliens)
        aliens.update()
    
        # 检查外星人和飞船之间的碰撞
        if pygame.sprite.spritecollideany(ship, aliens):
            ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)
    
        # 检查是否有外星人到达屏幕底端
        cheak_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets)
    
    
    def cheak_high_score(stats, sb):
        """检查是否诞生了新的最高得分"""
        if stats.score > stats.high_score:
            stats.high_score = stats.score
            sb.prep_high_score()
    
    

    game_stats.py

    跟踪统计游戏信息类

    class GameSrats():
        """跟踪游戏的统计信息"""
    
        def __init__(self, ai_settings):
            """初始化统计信息"""
            self.ai_settings = ai_settings
            self.reset_stats()
    
            # 游戏刚启动时处于活动状态
            self.game_active = False
    
            # 在任何情况下都不应重置最高得分
            self.high_score = 0
    
        def reset_stats(self):
            """初始化在游戏运行期间可能变化的统计信息"""
            self.ships_left = self.ai_settings.ship_limit
            self.score = 0
            self.level = 1
    
    

    scoreboard.py

    创建scoerboard类,用来显示当前得分,最高得分,玩家等级,余下的飞船数。

    import pygame.font
    from pygame.sprite import Group
    from ship import Ship
    
    
    class Scoreboard():
        """显示得分信息的类"""
    
        def __init__(self, ai_settings, screen, stats):
            """初始化显示得分涉及的属性"""
            self.screen = screen
            self.screen_rect = screen.get_rect()
            self.ai_settings = ai_settings
            self.stats = stats
    
            # 显示得分信息时使用的字体设置
            self.text_color = (30, 30, 30)
            self.font = pygame.font.SysFont(None, 48)
    
            # 准备包含得分的初始图像
            self.prep_score()
            self.prep_high_score()
            self.prep_level()
            self.prep_ships()
    
        def prep_ships(self):
            """显示还余下多少搜飞船"""
            self.ships = Group()
            for ship_number in range(self.stats.ships_left):
                ship = Ship(self.ai_settings, self.screen)
                ship.rect.x = 10 + ship_number * ship.rect.width
                ship.rect.y = 10
                self.ships.add(ship)
    
        def prep_level(self):
            """将等级转换为渲染的图像"""
            self.level_image = self.font.render(str(self.stats.level), True, self.text_color, self.ai_settings.bg_color)
    
            # 将等级放在得分下方
            self.level_rect = self.level_image.get_rect()
            self.level_rect.right = self.score_rect.right
            self.level_rect.top = self.score_rect.bottom + 10
    
        def prep_high_score(self):
            """将最高得分转换为渲染的图像"""
            high_score = int(round(self.stats.high_score, -1))
            high_score_str = str("{:,}".format(high_score))
            self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color)
    
            # 将最高得分放在屏幕顶部中央
            self.high_score_rect = self.high_score_image.get_rect()
            self.high_score_rect.centerx = self.screen_rect.centerx
            self.high_score_rect.top = self.screen_rect.top
    
        def prep_score(self):
            """将得分转换为一幅渲染的图像"""
            rounded_score = int(round(self.stats.score, -1))
            score_str = "{:,}".format(rounded_score)
            self.score_image = self.font.render(score_str, True, self.text_color, self.ai_settings.bg_color)
    
            # 将得分放在屏幕右上角
            self.score_rect = self.score_image.get_rect()
            self.score_rect.right = self.screen_rect.right - 20
            self.score_rect.top = 20
    
        def show_score(self):
            """在屏幕上显示得分"""
            self.screen.blit(self.score_image, self.score_rect)
            self.screen.blit(self.high_score_image, self.high_score_rect)
            self.screen.blit(self.level_image, self.level_rect)
    
            # 绘制飞船
            self.ships.draw(self.screen)
    
    

    settings.py

    存储游戏所有设置类

    class Settings():
        """存储外星人入侵所有设置的类"""
    
        def __init__(self):
            """初始化游戏静态设置"""
            # 屏幕设置
            self.screen_width = 1200
            self.screen_height = 800
            self.bg_color = (230, 230, 230)
    
            # 飞船的速度设置
            self.ship_speed_factor = 1.5
            self.ship_limit = 3
    
            # 子弹设置
            self.bullet_speed_factor = 10
            self.bullet_width = 10
            self.bullet_height = 15
            self.bullet_color = 60, 60, 60
            self.bullets_allowed = 3
    
            # 外星人设置
            self.alien_speed_factor = 1
            self.fleet_drop_speed = 5
            # fleet_direction为1表示向右移,为-1表示向左移
            self.fleet_direction = 1
    
            # 加快游戏节奏的速度
            self.speedup_scale = 1.1
    
            # 外星人点数的提高速度
            self.score_scale = 1.5
    
            self.initialize_dynamic_settings()
    
        def initialize_dynamic_settings(self):
            """初始化随游戏进行而变化的位置"""
            self.ship_speed_factor = 1.5
            self.bullet_speed_factor = 3
            self.alien_speed_factor = 1
    
            # fleet_direction为1表示向右,为-1表示向左
            self.fleet_direction = 1
    
            # 记分
            self.alien_points = 100
    
        def increase_speed(self):
            """提高速度设置和外星人点数"""
            self.ship_speed_factor *= self.speedup_scale
            self.bullet_speed_factor *= self.speedup_scale
            self.alien_speed_factor *= self.speedup_scale
    
            self.alien_points = int(self.alien_points * self.score_scale)
    
    

    ship.py

    管理飞船类

    import pygame
    from pygame.sprite import Sprite
    
    
    class Ship(Sprite):
    
        def __init__(self, ai_settings, screen):
            """初始化飞船,并设置其初始位置"""
            super().__init__()
            self.screen = screen
            self.ai_settings = ai_settings
    
            # 加载飞船图像并获取其外接矩形
            self.image = pygame.image.load('images/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 center_ship(self):
            """让飞船在屏幕上居中"""
            self.center = self.screen_rect.centerx
    
        def update(self):
            """根据移动标志调整飞船的位置"""
            # 更新飞船的center值,而不是rect
            if self.moving_right and self.rect.right < self.screen_rect.right:
                self.center += self.ai_settings.ship_speed_factor
            if self.moving_left and self.rect.left > 0:
                self.center -= self.ai_settings.ship_speed_factor
    
            # 根据self.center更新rect对象
            self.rect.centerx = self.center
    
        def blitme(self):
            """在指定位置绘制飞船"""
            self.screen.blit(self.image, self.rect)
    
    

    结束语🏆🏆🏆

    🔥推荐一款模拟面试、刷题神器网站
    点击链接注册即可
    1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
    2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
    3、大厂笔试真题:字节跳动、美团、百度、腾讯…

    在这里插入图片描述

    展开全文
  • """存储《外星人入侵》的所有设置的类""" def __init__(self): """初始化游戏的设置""" #屏幕设置 self.screen_width = 1200 self.screen_height = 800 self.bg_color = (230,230,230) #飞船的设置 self.ship_speed...

    按照书上写的武装飞船,写到能够左右移动了,但到了射击(装子弹)时候,按照书上的代码照搬了,运行时没显示代码有问题,但就是按了空格键,不见有子弹,其他都正常。

    代码:

    alien_invasion.py

    import sys

    import pygame

    from pygame.sprite import Group

    from settings import Settings

    from ship import Ship

    import game_functions as gf

    def run_game():

    #初始化pygame、设置和屏幕对象

    pygame.init()

    ai_settings = Settings()

    screen = pygame.display.set_mode(

    (ai_settings.screen_width,ai_settings.screen_height))

    pygame.display.set_caption("Alien Invasion")

    #创建一艘飞船

    ship = Ship(ai_settings,screen)

    #创建一个用于存储子弹的编组

    bullets = Group()

    #开始游戏主循环

    while True:

    gf.check_events(ai_settings,screen,ship,bullets)

    ship.update()

    bullets.update()

    gf.update_screen(ai_settings,screen,ship,bullets)

    run_game()

    **game_functions.py**

    import sys

    import pygame

    from bullet import Bullet

    def check_keydown_events(event,ai_settings,screen,ship,bullets):

    """响应按键"""

    if event.key == pygame.K_RIGHT:

    ship.moving_right = True

    elif event.key == pygame.K_LEFT:

    ship.moving_left = True

    elif event.key == pygame.K_SPACE:

    #创建一颗子弹,并将其加入到编组bullets中

    new_bullet = Bullet(ai_settings,screen,ship)

    bullets.add(new_bullet)

    def check_keyup_events(event,ship):

    """响应松开"""

    if event.key == pygame.K_RIGHT:

    ship.moving_right = False

    elif event.key == pygame.K_LEFT:

    ship.moving_left = False

    def check_events(ai_settings,screen,ship,bullets):

    """响应按键和鼠标事件"""

    for event in pygame.event.get():

    if event.type == pygame.QUIT:

    sys.exit()

    elif event.type == pygame.KEYDOWN:

    check_keydown_events(event,ai_settings,screen,ship,bullets)

    elif event.type == pygame.KEYUP:

    check_keyup_events(event,ship)

    def update_screen(ai_settings,screen,ship,bullets):

    """更新屏幕上的图像,并切换到新屏幕"""

    #每次循环时都重绘屏幕

    screen.fill(ai_settings.bg_color)

    ship.blitme()

    #让最近绘制的屏幕可见

    pygame.display.flip()

    #在飞船和外星人后面重绘所有子弹

    for bullet in bullets.sprites():

    bullet.draw_bullet()

    **bullet.py**

    import pygame

    from pygame.sprite import Sprite

    class Bullet(Sprite):

    """一个对飞船发射的子弹进行管理的类"""

    def __init__(self,ai_settings,screen,ship):

    """在飞船所处的位置创建一个子弹对象"""

    super(Bullet,self). __init__()

    self.screen = screen

    #在(0,0)处创建一个表示子弹的举行,再设置正确的位置

    self.rect = pygame.Rect(0,0,ai_settings.bullet_width,

    ai_settings.bullet_height)

    self.rect.centerx = ship.rect.centerx

    self.rect.top = ship.rect.top

    #存储用小数表示的子弹位置

    self.y = float(self.rect.y)

    self.color = ai_settings.bullet_color

    self.speed_factor = ai_settings.bullet_speed_factor

    def update(self):

    """向上移动子弹"""

    #更新表示子弹位置的小数值

    self.y -= self.speed_factor

    #更新表示子弹的rect的位置

    self.rect.y = self.y

    def draw_bullet(self):

    """在屏幕上绘制子弹"""

    pygame.draw.rect(self.screen,self.color,self.rect)

    settings.py

    class Settings():

    """存储《外星人入侵》的所有设置的类"""

    def __init__(self):

    """初始化游戏的设置"""

    #屏幕设置

    self.screen_width = 1200

    self.screen_height = 800

    self.bg_color = (230,230,230)

    #飞船的设置

    self.ship_speed_factor = 1.5

    #子弹设置

    self.bullet_speed_factor = 1

    self.bullet_width = 3

    self.bullet_height = 15

    self.bullet_color = 60,60,60

    ship.py

    import pygame

    class Ship():

    def __init__(self,ai_settings,screen):

    """初始化飞船并设置其初始位置"""

    self.screen = screen

    self.ai_settings = ai_settings

    #加载飞船图像并获取其外接矩形

    self.image = pygame.image.load("images/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.center += self.ai_settings.ship_speed_factor

    if self.moving_left and self.rect.left > 0:

    self.center -= self.ai_settings.ship_speed_factor

    #根据self.center更新rect对象

    self.rect.centerx = self.center

    def blitme(self):

    """在指定位置绘制飞船"""

    self.screen.blit(self.image,self.rect)

    展开全文
  • PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下准备工作:下载python,比如Anaconda3(64 bit),导入pygame游戏包1.外星人设置,alien.py,代码:import pygamefrom pygame.sprite import Spriteclass ...

    PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下

    准备工作:下载python,比如Anaconda3(64 bit),导入pygame游戏包

    201704181156515.png

    201704181156516.png

    201704181156517.png

    201704181156518.png

    201704181156529.png

    1.外星人设置,alien.py,代码:

    import pygame

    from pygame.sprite import Sprite

    class Alien(Sprite):

    """表示单个外星人的类"""

    def __init__(self,ai_settings,screen):

    """初始化外星人并设置其他位置"""

    super(Alien,self).__init__()

    self.screen = screen

    self.ai_settings = ai_settings

    #加载外星人图像,并设置其rect属性

    self.image = pygame.image.load('images/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.get_rect()

    if self.rect.right >= screen_rect.right:

    return True

    elif self.rect.left <= 0:

    return True

    def update(self):

    """向右移动外星人"""

    self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)

    self.rect.x = self.x

    2.游戏主程序,alien_invasion.py,代码:

    import pygame

    from settings import Settings

    from game_stats import GameStats

    from button import Button

    from ship import Ship

    from pygame.sprite import Group

    import game_functions as gf

    from scoreboard import Scoreboard

    def run_game():

    pygame.init() # 初始化背景设置

    ai_settings = Settings() # 全局设置

    screen = pygame.display.set_mode( # 创建screen显示窗口

    (ai_settings.screen_width,ai_settings.screen_height)

    )

    pygame.display.set_caption('Alien Invasion') # 标题

    #新建Play按钮

    play_button = Button(ai_settings,screen,"Play")

    #创建一个用于存储游戏统计信息的实例,并创建记分牌

    stats = GameStats(ai_settings)

    sb = Scoreboard(ai_settings, screen, stats)

    # 创建飞船

    ship = Ship(ai_settings,screen)

    # 创建子弹编组

    bullets = Group()

    #创建一个外星人

    aliens = Group()

    #创建外星人群

    gf.create_fleet(ai_settings,screen,ship,aliens)

    # 开始游戏主循环

    while True:

    # 监视键盘和鼠标事件

    gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)

    if stats.game_active:

    # 移动飞船

    gf.update_ship(ship)

    # 更新子弹位置

    gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)

    #更新外星人

    gf.update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets)

    # 更新屏幕

    gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)

    run_game()

    3.设置子弹,bullet.py,代码:

    import pygame

    from pygame.sprite import Sprite

    import time

    class Bullet(Sprite):

    '''飞船子弹进行管理'''

    def __init__(self,ai_settings,screen,ship):

    super(Bullet,self).__init__()

    self.screen = screen

    # 创建子弹矩形初始位置(0,0,3,15)分别对应lef,top,宽,高

    self.rect = pygame.Rect(0,0,

    ai_settings.bullet_width, ai_settings.bullet_height)

    self.rect.centerx = ship.rect.centerx # 设置中心点x轴坐标跟飞船一致

    self.rect.top = ship.rect.top # 设置y轴坐标顶部跟飞船一致

    # 设置成小数进行计算

    self.top = float(self.rect.top)

    self.color = ai_settings.bullet_color

    self.speed_factor = ai_settings.bullet_speed_factor

    def update(self):

    self.top -=self.speed_factor

    self.rect.top = self.top

    print(self.rect.top)

    def draw_bullet(self):

    pygame.draw.rect(self.screen,self.color,self.rect)

    4.设置Play按钮,button.py,代码:

    import pygame.font

    class Button():

    def __init__(self,ai_settings,screen,msg):

    """初始化按钮属性"""

    self.screen = screen

    self.screen_rect = screen.get_rect()

    #设置按钮的尺寸和其他属性

    self.width,self.height = 200,50

    self.button_color = (0,255,0)

    self.text_color = (255,255,255)

    self.font = pygame.font.SysFont(None,48)

    #创建按钮的rect对象,并使其居中

    self.rect = pygame.Rect(0,0,self.width,self.height)

    self.rect.center = self.screen_rect.center

    #按钮的标签只需创建一次

    self.prep_msg(msg)

    def prep_msg(self,msg):

    """将msg渲染为图像,并使其在按钮上居中"""

    self.msg_image = self.font.render(msg,True,self.text_color,self.button_color)

    self.msg_image_rect = self.msg_image.get_rect()

    self.msg_image_rect.center =self.rect.center

    def draw_button(self):

    #绘制一个用颜色填充的按钮,再绘制文本

    self.screen.fill(self.button_color,self.rect)

    self.screen.blit(self.msg_image,self.msg_image_rect)

    5.设置游戏功能,game_functions.py,代码:

    import sys

    import pygame

    from bullet import Bullet

    from alien import Alien

    from time import sleep

    def check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets):

    # 监视键盘和鼠标事件

    for event in pygame.event.get():

    if event.type == pygame.QUIT: # 关闭窗口退出

    sys.exit()

    elif event.type == pygame.KEYDOWN:

    check_keydown_events(event,ai_settings,screen,ship,bullets)

    elif event.type == pygame.KEYUP:

    check_keyup_events(event,ship)

    elif event.type == pygame.MOUSEBUTTONDOWN:

    mouse_x, mouse_y = pygame.mouse.get_pos()

    check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x, mouse_y)

    def check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x, mouse_y):

    """在玩家单击Play按钮时开始游戏"""

    button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)

    if button_clicked and not stats.game_active:

    #重置游戏设置

    ai_settings.initialize_dynamic_settings()

    #隐藏光标

    pygame.mouse.set_visible(False)

    #重置游戏统计信息

    stats.reset_stats()

    stats.game_active = True

    #重置计分牌图像

    sb.prep_score()

    sb.prep_high_score()

    sb.prep_level()

    sb.prep_ships()

    #清空外星人列表和子弹列表

    aliens.empty()

    bullets.empty()

    #创建一群新的外星人,并让飞船居中

    create_fleet(ai_settings,screen,ship,aliens)

    ship.center_ship()

    def update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button):

    '''更新屏幕上的图片,并切换到新屏幕'''

    screen.fill(ai_settings.bg_color) # 设置背景颜色

    ship.blitme() # 绘制飞船

    aliens.draw(screen)

    # 循环子弹组里面的元素,进行绘制 为空时不执行

    for bullet in bullets.sprites():

    bullet.draw_bullet() # 绘制子弹

    #显示得分

    sb.show_score()

    #如果游戏处于非活跃状态,就显示Play按钮

    if not stats.game_active:

    play_button.draw_button()

    # 显示最新屏幕,擦拭旧屏幕

    pygame.display.flip()

    # print('1')

    def check_keydown_events(event,ai_settings,screen,ship,bullets):

    if event.key == pygame.K_RIGHT:

    ship.moving_right = True

    elif event.key == pygame.K_LEFT:

    ship.moving_left = True

    elif event.key == pygame.K_SPACE:

    fire_bullet(ai_settings,screen,ship,bullets)

    elif event.key == pygame.K_q:

    sys.exit()

    def check_keyup_events(event,ship):

    if event.key == pygame.K_RIGHT:

    ship.moving_right = False

    elif event.key == pygame.K_LEFT:

    ship.moving_left = False

    def update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets):

    '''更新子弹位置,删除子弹'''

    bullets.update() # 子弹组每个成员执行self.update()操作

    for bullet in bullets.sprites():

    if bullet.rect.bottom <= 0: # 子弹出界 删除

    bullets.remove(bullet)

    check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets)

    def check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets):

    """响应外星人和子弹的碰撞"""

    #删除发生碰撞的子弹和外星人

    collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)

    if collisions:

    for aliens in collisions.values():

    stats.score += ai_settings.alien_points * len(aliens)

    sb.prep_score()

    check_high_score(stats,sb)

    if len(aliens)==0:

    #删除现有的子弹并新建一群外星人,加快游戏进度节奏

    bullets.empty()

    ai_settings.increase_speed()

    #提高等级

    stats.level += 1

    sb.prep_level()

    create_fleet(ai_settings,screen,ship,aliens)

    def update_ship(ship):

    ship.update()

    def fire_bullet(ai_settings,screen,ship,bullets):

    # 创建一个子弹对象 加入到子弹组

    if len(bullets) < ai_settings.bullets_allowed: # 子弹少于允许值时再生成

    new_bullet = Bullet(ai_settings, screen, ship)

    bullets.add(new_bullet)

    def get_number_aliens_x(ai_settings,alien_width):

    """计算每行可容纳多少个外星人"""

    available_space_x = ai_settings.screen_width - 2 * alien_width

    number_aliens_x = int(available_space_x / (2 * alien_width))

    return number_aliens_x

    def get_number_rows(ai_settings,ship_height,alien_height):

    """计算屏幕可容纳多少行外星人"""

    available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height)

    number_rows = int(available_space_y / (2 * alien_height))

    return number_rows

    def create_aliens(ai_settings,screen,aliens,alien_number,row_number):

    """创建一个外星人并将其放在当期行"""

    alien = Alien(ai_settings,screen)

    alien_width = alien.rect.width

    alien.x = alien_width + 2 * alien_width * alien_number

    alien.rect.x = alien.x

    alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number

    aliens.add(alien)

    def create_fleet(ai_settings,screen,ship,aliens):

    """创建外星人群"""

    #创建一个外星人,并计算一行可以容纳多少个外星人

    #外星人间距为外星人宽度

    alien = Alien(ai_settings,screen)

    number_aliens_x = get_number_aliens_x(ai_settings,alien.rect.width)

    number_rows = get_number_rows(ai_settings,ship.rect.height,alien.rect.height)

    #创建第一行外星人

    for row_number in range(number_rows):

    for alien_number in range(number_aliens_x):

    #创建一个外星人并将其加入当前行

    create_aliens(ai_settings,screen,aliens,alien_number,row_number)

    def check_fleet_edges(ai_settings,aliens):

    """有外星人到达边缘时采取相应措施"""

    for alien in aliens.sprites():

    if alien.check_edges():

    change_fleet_direction(ai_settings,aliens)

    break

    def change_fleet_direction(ai_settings,aliens):

    """将整群外星人下移,并改变他们的运动方向"""

    for alien in aliens.sprites():

    alien.rect.y += ai_settings.fleet_drop_speed

    ai_settings.fleet_direction *= -1

    def ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets):

    """响应被外星人撞到的飞船"""

    if stats.ships_left > 0:

    #将ship_left减1

    stats.ships_left -= 1

    #更新记分牌

    sb.prep_ships()

    #清空外星人列表和子弹列表

    aliens.empty()

    bullets.empty()

    #创建一群新的外星人,并将飞船放到屏幕低端中央

    create_fleet(ai_settings,screen,ship,aliens)

    ship.center_ship()

    #暂停

    sleep(0.5)

    else:

    stats.game_active = False

    pygame.mouse.set_visible(True)

    def check_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets):

    """检查是否有外星人到达屏幕低端"""

    screen_rect = screen.get_rect()

    for alien in aliens.sprites():

    if alien.rect.bottom >= screen_rect.bottom:

    #像飞船被撞到一样进行处理

    ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)

    break

    def update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets):

    """更新外星人群中所有外星人的位置"""

    check_fleet_edges(ai_settings,aliens)

    aliens.update()

    #检测外星人和飞船之间的碰撞

    if pygame.sprite.spritecollideany(ship,aliens):

    ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)

    #检查是否有外星人到达屏幕低端

    check_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets)

    def check_high_score(stats,sb):

    """检查是否诞生了新的最高纪录"""

    if stats.score > stats.high_score:

    stats.high_score = stats.score

    sb.prep_high_score()

    6.游戏统计信息,game_stats.py,代码:

    class GameStats():

    """跟踪游戏的统计信息"""

    def __init__(self,ai_settings):

    """初始化统计信息"""

    self.ai_settings = ai_settings

    self.reset_stats()

    #游戏刚启动时处于非活动状态

    self.game_active = False

    #在任何情况下不应该重置最高分

    self.high_score = 0

    self.level = 1

    def reset_stats(self):

    """初始化在游戏运行期间可能变化的统计信息"""

    self.ships_left = self.ai_settings.ship_limit

    self.score = 0

    7.分数设置,scoreboard.py,代码:

    import pygame.font

    from pygame.sprite import Group

    from ship import Ship

    class Scoreboard():

    """显示得分信息的类"""

    def __init__(self, ai_settings, screen, stats):

    """初始化显示得分涉及的属性"""

    self.screen =screen

    self.screen_rect = screen.get_rect()

    self.ai_settings = ai_settings

    self.stats = stats

    #显示得分信息时使用的字体设置

    self.text_color = (30, 30, 30)

    self.font = pygame.font.SysFont(None, 48)

    #准备初始化得分图像和当前最高分数

    self.prep_score()

    self.prep_high_score()

    self.prep_level()

    self.prep_ships()

    def prep_score(self):

    """将得分转换为一幅渲染的图像"""

    rounded_score = int(round(self.stats.score, -1))

    score_str = "{:,}".format(rounded_score)

    self.score_image = self.font.render(score_str, True, self.text_color, self.ai_settings.bg_color)

    #将得分放在右上角

    self.score_rect = self.score_image.get_rect()

    self.score_rect.right = self.screen_rect.right - 20

    self.score_rect.top = 5

    def prep_high_score(self):

    """将最高得分转换为渲染图像"""

    high_score = int(round(self.stats.high_score, -1))

    high_score_str = "{:,}".format(high_score)

    self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color)

    #将最高分放在屏幕最中央

    self.high_score_rect = self.high_score_image.get_rect()

    self.high_score_rect.centerx = self.screen_rect.centerx

    self.high_score_rect.top = 5

    def prep_level(self):

    """将等级转换为渲染图像"""

    self.level_image = self.font.render(str(self.stats.level), True, self.text_color, self.ai_settings.bg_color)

    #将得分放在右上角

    self.level_rect = self.score_image.get_rect()

    self.level_rect.right = self.screen_rect.right

    self.level_rect.top = self.score_rect.bottom

    def prep_ships(self):

    """显示还剩下多少艘飞船"""

    self.ships = Group()

    for ship_number in range(self.stats.ships_left):

    ship = Ship(self.ai_settings, self.screen)

    ship.rect.x = 10 + ship_number * ship.rect.width

    ship.rect.y = 10

    self.ships.add(ship)

    def show_score(self):

    """在屏幕上显示得分和等级"""

    self.screen.blit(self.score_image, self.score_rect)

    self.screen.blit(self.high_score_image, self.high_score_rect)

    self.screen.blit(self.level_image, self.level_rect)

    #绘制飞船

    self.ships.draw(self.screen)

    8.设置,settings.py,代码:

    class Settings():

    '''存储外星人入侵中所有的设置'''

    def __init__(self):

    '''初始化设置'''

    #屏幕设置

    self.screen_width = 1200

    self.screen_height = 600

    self.bg_color = (230,230,230) # 设置背景色 灰色

    #飞船设置

    self.ship_limit = 3

    self.ship_image_path = 'images/ship.bmp' # 飞船图片路径

    #子弹设置

    self.bullet_width = 3

    self.bullet_height = 15

    self.bullet_color = 60,60,60

    self.bullets_allowed = 3 # 允许屏幕中出现子弹的数量

    #外星人设置

    self.fleet_drop_speed = 10

    #以什么样的速度加快游戏节奏

    self.speedup_scale = 1.1

    #外星人点数提高速度

    self.score_scale = 1.5

    self.initialize_dynamic_settings()

    def initialize_dynamic_settings(self):

    """初始化随游戏进行而变化的设置"""

    self.ship_speed_factor = 1.5

    self.bullet_speed_factor = 3

    self.alien_speed_factor = 1

    #fleet_direction为1表示向右移,为-1表示向左移

    self.fleet_direction = 1

    #计分

    self.alien_points = 50

    def increase_speed(self):

    """提高速度设置,外星人点数"""

    self.ship_speed_factor *= self.speedup_scale

    self.bullet_speed_factor *= self.speedup_scale

    self.alien_speed_factor *= self.speedup_scale

    self.alien_points = int(self.alien_points * self.score_scale)

    print(self.alien_points)

    9.飞船设置,ship.py,代码:

    import pygame

    from pygame.sprite import Sprite

    class Ship(Sprite):

    '''飞船所有信息'''

    def __init__(self,ai_settings,screen):

    """初始化飞船,并设置其起始位置"""

    super(Ship,self).__init__()

    self.screen=screen

    self.ai_settings = ai_settings

    # 加载飞船图片、获取外接矩形

    self.image = pygame.image.load(self.ai_settings.ship_image_path) # 加载图片

    self.image = pygame.transform.smoothscale(self.image,(40,60))

    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.center = float(self.rect.centerx) # self.rect.centerx设置不了浮点数 只能另设置一个变量进行运算

    # 移动标志

    self.moving_right = False

    self.moving_left = False

    def blitme(self):

    '''在指定位置绘制飞船'''

    self.screen.blit(self.image,self.rect)

    def update(self):

    # 向右移动飞船

    if self.moving_right and self.rect.right < self.screen_rect.right:

    self.center +=self.ai_settings.ship_speed_factor

    # 向左移动飞船

    if self.moving_left and self.rect.left > self.screen_rect.left:

    self.center -= self.ai_settings.ship_speed_factor

    self.rect.centerx = self.center

    def center_ship(self):

    """让飞船在屏幕上居中"""

    self.center = self.screen_rect.centerx

    效果展示:

    2017041811565210.png

    游戏资源:图片资源

    2017418120021325.jpg

    2017418120046186.jpg

    更多关于python游戏的精彩文章请点击查看以下专题:

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 打包好的pygame经典入门小游戏:外星人入侵原始1.0版本的文件,包括py文件和图片文件,运行alien_invasion即可。 其中alien是专门写外星人的,alien_invasion是主程序,bullet是控制子弹及相关参数的,button是控制...
  • python外星人入侵

    2018-08-10 10:59:02
    Python编程从入门到实践,,外星人入侵的程序代码,后续资料之后再上传,上传的只是其中一个模块
  • 分别为飞船和外星人图片。 1、首先去到 http://www.ituring.com.cn/book/1861 网站,就会看到有关Python编程从入门到实践这本书。 2、在右边有个随书下载,点击进入,看到Python源代码文件更新.zip。点击下载并解压...
  • 外星人入侵_python

    2021-08-05 07:47:54
    素材 main.py # 游戏的主文件,使用该文件来启动游戏 import pygame import sys import time from game_config import GameConfig ...self.height = 600 # 高度 self.title = '外星人入侵' # 游戏的标题 self.bg_color...
  • Python外星人入侵游戏——添加飞船和外星人图片

    万次阅读 多人点赞 2018-07-26 15:11:22
    Python外星人入侵游戏是自己在《Python编程从入门到实践》在本书里学到的。本篇主要介绍该游戏中所需要的两个图片。分别为飞船和外星人图片。 1、首先去到 http://www.ituring.com.cn/book/1861 网站,就会看到有关...
  • 外星人入侵python.rar

    2019-10-23 21:17:11
    Python编程:从入门到实践 项目一:外星人入侵 ,可运行exe与代码,图片
  • python教程中外星人入侵全部代码,已跑通,可供参考,游戏图片为网上找的,可自行修改,编辑器为geany
  • 《Python编程:从入门到实践》第二部分项目1:外星人入侵。小游戏开发自写。对游戏的开始程序进行了优化和重构。添加start_game函数,按P开始游戏,添加了计分板文字,调整外星人在屏幕中的位置。
  • self.rect = self.image.get_rect() # 每个外星人最初都在屏幕左上角附近 self.rect.x = self.rect.width self.rect.y = self.rect.height # 存储外星人的准确位置 self.x = float(self.rect.x) # 外星人设置 self....
  • 外星人入侵

    2017-09-03 23:19:31
    自己亲手打的《Python编程 从入门到实践》中的第一个项目:外星人入侵。 使用PyCharm编写运行成功。 自己亲手打的《Python编程 从入门到实践》中的第一个项目:外星人入侵。 使用PyCharm编写运行成功。
  • 外星人入侵项目,亲自敲下并运行过的,包括了图片资源。整个项目打包过来,打分功能请自行学完后自己动手完善。
  • 设置背景图片: 可以设置背景颜色的话当然也可以设置背景图片的啦,以下是我在pymage里实现的背景图片代码,这是在方法也是在run_game(self)前和末尾进行的,敬请参考: def run_game(self): background = pygame....
  • 这是我们外星人入侵项目的第一个环节,首先要有飞船,并且能够射出子弹。并且初步给大家介绍了游戏开发过程中计划的制定;使用pygame编写游戏的基本框架;包括设置背景色的方式、将设置存储在可供游戏的各个部分访问...
  • 下面来编写有关游戏《外星人入侵》的描述,其中虽然没有涵盖这款游戏的所有细节,但能让你清楚地知道该如何动手开发它。 在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键...
  • 分析外星人入侵作为一个入门小游戏项目,整体来说思路是比较简单,代码行也不多,总计就是500+行,除去一些缩进空行,就没有多少了。当我们去做一个项目的时候,无论是难的还是简单的,都是需要进行一个分析,这样我...
  • score = stats.score sb.prep_high_score() 准备 我们的外星人生成逻辑是这样的: 距离飞船两个外星人的距离,距离顶端一个外星人的距离 一行中每隔一个外星人的宽度生成一个外星人,同样是两边各留一个外星人的距离...
  • 最后将含有两个必须图片的images文件夹复制到此文件夹下,此时再打开alien_invasion.exe即可成功运行游戏。 注:button.py模块中将字体none改成了‘arial' 参考文章: ...
  • Python从入门到实践里的《外星人入侵》Python外星人入侵问题分享助世界上从来不缺少风景,缺少的只是欣赏的心情。Python项目外星人入侵添加爆照效果有没有原码《Python编程从入门到实践》书中的外星人入侵很简单啊在...
  •   从上篇文章,我们已经开始进入项目应用阶段,上篇文章给大家介绍了《外星人入侵》的基本玩法以及环境的安装,最后将游戏的背景设置出来;本文继续给大家介绍武装飞船的相关内容。首先给大家介绍添加飞船的图像。...
  • 2 * alien.rect.height *row_number aliens.add(alien)defcreate_fleet(ai_settings,screen,ship,aliens):"""创建外星人群""" #创建一个外星人,并计算一行可以容纳多少个外星人 #外星人间距为外星人宽度 alien =...
  • Python-项目实战-《外星人入侵》Pygame小游戏-阶段一:武装飞船(含教程)_Kox233的博客-CSDN博客 程序描述: 此程序为《外星人入侵》开发的第二个阶段。 主要功能是生成一群外星人,这群外星人能够向两边和下面...
  • Python项目:外星人入侵(汇总)

    千次阅读 2022-01-30 17:10:19
    直接上成品: 本次项目一共用到的八个文件(图片文件省略) 每个文件源代码如下: ... '''表示单个外星人的... '''初始化外星人并设置其起始位置''' super().__init__() self.screen = ai_game.screen sel
  • 游戏编程思维导图游戏思路函数编写第一次做思维导图,做的有点乱解释:跟着《python编程从入门到实践》写完游戏程序后,写一下自己的心得体会。...首先是飞船,通过载入图片把飞船画在屏幕正下方并使...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 549
精华内容 219
关键字:

外星人入侵图片