在实现这个游戏的代码中,总共分成了以下的代码文件

  1. alien文件:

    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("alien version/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

    self.center = float(self.rect.centerx)

    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 += 1
                self.center += self.ai_settings.ship_speed
            if self.moving_left and self.rect.left > 0:
                self.center -= self.ai_settings.ship_speed
            self.rect.centerx = self.center

    def blitme(self):
            self.screen.blit(self.image,self.rect)

    def center_ship(self):
            self.center = self.screen_rect.centerx

  2. alien invasion文件:

    import sys
    #模块sys用来退出游戏
    import pygame
    from settings import Setting
    from ship import Ship
    from alien import Alien
    from game_stats import GameStats
    from button import Button
    from scoreboard import Scoreboard

    #导入刚刚创建的设置类
    import game_functions as gf
    from pygame.sprite import Group

    def run_game():
        pygame.init()#初始化屏幕对象
        ai_settings = Setting()
        # 创建Setting类的实例,并存储在ai_settings变量中
        screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))#创建显示窗口
        #设置窗口标题
        pygame.display.set_caption("Alien Invasion")
        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:
                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()

  3. bullet文件:

    import pygame
    from pygame.sprite import Sprite

    class Bullet(Sprite):
        def __init__(self,ai_settings,screen,ship):
            super().__init__()
            self.screen = screen
            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 = ai_settings.bullet_speed

    def update(self):
            self.y -= self.speed
            self.rect.y = self.y

    def draw_bullet(self):
            pygame.draw.rect(self.screen, self.color, self.rect)

  4. button文件:

    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 = 150,50
                self.button_color = (0,255,0)
                self.text_color = (255,255,255)
                self.font = pygame.font.SysFont(None, 36)

    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):
                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_function文件:

    import sys
    import pygame
    from bullet import Bullet
    from alien import Alien
    from time import  sleep

    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_bullets(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 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):
        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)
        for bullet in bullets.sprites():
            bullet.draw_bullet()
        ship.blitme()
        aliens.draw(screen)
        sb.show_score()

    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)

    check_bulleet_alien_collisions(ai_settings, screen,stats,sb,ship ,aliens,bullets)
    def fire_bullets(ai_settings, screen, ship,bullets):
        if len(bullets) < ai_settings.bullets_allowed:

    new_bullet = Bullet(ai_settings, screen, ship)
            bullets.add(new_bullet)

    def check_bulleet_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 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_alien(ai_settings, screen, aliens, alien_number,row_number)

    def get_number_aliens_x(ai_settings,alien_width):
        available_space_x = ai_settings.screen_width - 3.5 * alien_width
        number_aliens_x = int(available_space_x / (5 * alien_width))
        return number_aliens_x

    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 get_number_rows(ai_settings, ship_height,alien_height):
        avaiable_space_y = ai_settings.screen_height - (3*alien_height) - ship_height
        number_rows = int(avaiable_space_y / (2 * alien_height))
        return  number_rows

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

    if pygame.sprite.spritecollideany(ship,aliens):
            ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets)
        check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets)

    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,screen,stats,sb,ship,aliens,bullets):
        if stats.ship_left >0:
            stats.ship_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,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 check_high_score(stats, sb):
        if stats.score > stats.high_score:
            stats.high_score = stats.score
            sb.prep_high_score()

  6. game_stats文件:

    class GameStats():
        def __init__(self,ai_settings):
            self.ai_settings = ai_settings
            self.reset_stats()
            self.high_score = 0
            self.game_active = False

    def reset_stats(self):
            self.ship_left = self.ai_settings.ship_limit
            self.level = 1
            self.score = 0

  7. scoreboard文件:

    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,24)

    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 = 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)

    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 = self.score_rect.top

    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_ships(self):
            self.ships = Group()
            for ship_number in range(self.stats.ship_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)

  8. setting文件:

    class Setting():
        def __init__ (self):
            #屏幕设置
            self.screen_width = 1200
            self.screen_height = 800
            self.bg_color = (230,230,230)
            self.ship_speed = 1.5
            self.ship_limit = 3

    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.initialize_dynamic_settings()

    self.score_scale = 1.5

    def initialize_dynamic_settings(self):
            self.ship_speed = 1.5
            self.bullet_speed = 1
            self.alien_speed_factor = 0.2
            self.fleet_direction = 1
            self.alien_points = 5 #击落一个外星人得分五分

    def increase_speed(self):
            self.ship_speed *= self.speedup_scale
            self.bullet_speed *= self.speedup_scale
            self.alien_speed_factor *= self.speedup_scale

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

  9. ship文件:

    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("alien version/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

    self.center = float(self.rect.centerx)

    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 += 1
                self.center += self.ai_settings.ship_speed
            if self.moving_left and self.rect.left > 0:
                self.center -= self.ai_settings.ship_speed
            self.rect.centerx = self.center

    def blitme(self):
            self.screen.blit(self.image,self.rect)

    def center_ship(self):
            self.center = self.screen_rect.centerx

注:在这里面导入的照片路径肯定与你们自己的不一样,这个需要自己去复制图片的路径,其他的代码跟我的一样就行

外星人入侵Python代码相关推荐

  1. python外星人入侵代码提示has no attri_Python外星人入侵完整代码和注释(四)

    四.重构:模块game_function,创建game_function.py 文件名 1.创建game_function.py(用来存储项目的大部分函数) 2.函数check_events() :响 ...

  2. Python项目:《外星人入侵》代码及笔记 via:《Python变成入门到实战》

    Python项目:<外星人入侵>代码及笔记 (via:<Python变成入门到实战>) [项目代码] alien_invasion.py import pygame from ...

  3. 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。

    关于zeromq的创建,绑定本地,和绑定其他客户端的方法. 网上一大堆关于zmq的通信模式的介绍,包括三种类型,具体我就不在描述. 但是他们给的demo,都是创建本地作为server服务端,也作为cl ...

  4. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!

    我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...

  5. OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...

    OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...

  6. 主成分分析(PCA)Python代码实现

    主成分分析(Principal Components Analysis, PCA)简介可以参考: http://blog.csdn.net/fengbingchun/article/details/7 ...

  7. resnet keras 结构_Wandb用起来,一行Python代码实现Keras模型可视化

    大数据文摘出品 来源:wandb 编译:邢畅.宁静 在训练神经网络的过程中,我们可能会希望可视化网络的性能和中间的结构,很多可视化代码的冗长复杂使得我们望而却步,有没有一行代码就能解决可视化的所有问题 ...

  8. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

  9. Python代码编写过程中有哪些重要技巧?

    近几年,转行做Python技术岗的人越来越多,大家对于Python的关注越来越高,尤其是工作后,很多人都想知道Python代码编写过程中有哪些重要技巧?小编告诉大家,在编写Python代码过程中,除了 ...

最新文章

  1. Centos7 下nginx nginx-1.13.4 安装
  2. postgresql批量插入数据脚本_每日踩坑 2020-11-04 PostgreSQL 批量插入数据
  3. ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)
  4. html开启页面离线缓存,HTML5 离线缓存
  5. python Web抓取(一)[没写完]
  6. Python入门(01) -- 列表简介
  7. centos7使用记录
  8. NTP服务器搭建教程
  9. 解决Android 应用运行报Unable to resolve superclass of L错误
  10. 《ANSYS Workbench有限元分析实例详解(静力学)》——2.5 Windows界面相应操作
  11. WinDriver简介(或介绍)
  12. linux 系统安装Iso,linux系统安装iso文件方法
  13. mtk android 关机充电,MTK充电开机关机过程
  14. Python获取字符串中特定的内容
  15. codeforces 1153D Serval and Rooted Tree
  16. 连上WiFi就能打电话?“手机营业厅”中的神奇功能火了
  17. 使用纸壳CMS创建多语言网站
  18. moses 编译_moses工具的配置详解
  19. CAJ转换为PDF+英语文献翻译
  20. 数据库之逻辑设计阶段(候选码、主码、外码、范式…)

热门文章

  1. c 语言小学生心算测试,C-WISC韦氏儿童智力测试
  2. 惊人的预测——来自2019麦肯锡报告《中国与世界》完整版
  3. 人工智能之线性代数应用
  4. matlab鼠标光标变黑,技术员应对win7系统鼠标光标变成黑色方块了的解决办法
  5. 关于CCIR656/sRGB的一点基础了解
  6. 股票下跌30%,特斯拉投资者劝放手推特 马斯克:花在推特上的时间不到5%
  7. 李航 统计学习方法 第二版 课后习题答案 机器学习
  8. mysql数据库应用从入门到精通 王飞飞_《MYSQL数据库应用从入门到精通(第2版)(含盘)》王飞飞 崔洋 贺亚茹著【摘要 书评 在线阅读】-苏宁易购图书...
  9. python 图形界面窗体设计_Python 图形界面(GUI)设计
  10. JavaScript百炼成仙读书笔记