精华内容
下载资源
问答
  • 外星人入侵

    2017-09-03 23:19:31
    自己亲手打的《Python编程 从入门到实践》中的第一个项目:外星人入侵。 使用PyCharm编写运行成功。 自己亲手打的《Python编程 从入门到实践》中的第一个项目:外星人入侵。 使用PyCharm编写运行成功。
  • 外星人入侵-源码

    2021-02-27 06:24:12
    外星人入侵
  • 外星人入侵 这是Python Crash Course中的Python游戏项目。 关于该项目 建于 Python Python-PyGame 过程和我学到的东西 流程 我从Python Crash Course开始学习Python,这是一本很棒的书,其中包含许多教程和实践。 这...
  • 外星人入侵代码

    2019-02-21 11:55:18
    学习python的入门练手项目-外星人入侵-源码,适合python初学者
  • python外星人入侵

    2018-08-10 10:59:02
    Python编程从入门到实践,,外星人入侵的程序代码,后续资料之后再上传,上传的只是其中一个模块
  • 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游戏的精彩文章请点击查看以下专题:

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

    展开全文
  • 外星人入侵源代码

    2019-02-21 15:36:08
    适合python初学者的外星人入侵项目,对理解python项目、练手python开发有很好的帮助
  • 外星人入侵python.rar

    2019-10-23 21:17:11
    Python编程:从入门到实践 项目一:外星人入侵 ,可运行exe与代码,图片
  • 外星人入侵游戏-源码

    2021-02-18 10:14:51
    外星人入侵游戏
  • 外星人入侵基本版

    2018-07-30 18:34:48
    开发环境pycharm+python3.6+pygame 外星人入侵基本版本,实现了飞船的上下左右移动与射击,有最高分与当前分的显示,飞船剩余数量的显示
  • python教程中外星人入侵全部代码,已跑通,可供参考,游戏图片为网上找的,可自行修改,编辑器为geany
  • 外星人入侵game.rar

    2021-08-05 07:45:17
    外星人入侵,python开发
  • 一个简单的外星人入侵小游戏,玩家操纵飞船进行射击,消灭外星飞船并计分。利用pygame进行的游戏项目开发。
  • 开学自学的python,通过敲代码练习的项目《外星人入侵》。游戏介绍:游戏在玩家每消灭一群向下移动的外星人后,都将玩家的等级提高一个等级;而等级越高,游戏的节奏越快,难度越大我使用的是python 3.7,在Windows...

    开学自学的python,通过敲代码练习的项目《外星人入侵》。

    游戏介绍:游戏在玩家每消灭一群向下移动的外星人后,都将玩家的等级提高一个等级;而等级越高,游戏的节奏越快,难度越大

    我使用的是python 3.7,在Windows系统中首先要检查是否安装了pip,开发2D游戏前,还得安装Pygame。

    下面游戏的模板,包含各种类。

    alien_invasion.py , game_functions.py , ship.py , alien.py , bullet.py , game_stats.py , settings.py , button.py , scoreboard.py 。

    代码:

    alien_invasion.py:

    # -*-coding:utf-8-*-

    import pygame#pygame库

    from settings import Settings

    from ship import Ship

    import game_functions as gf

    from pygame.sprite import Group

    from alien import Alien

    from game_stats import GameStats

    from scoreboard import Scoreboard

    from button import Button

    def run_game():

    pygame.init()

    ai_settings=Settings()

    (ai_settings.screen_width,ai_settings.screen_height))

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

    #创建一个用于存储游戏统计信息的事例

    stats=GameStats(ai_settings)

    sb=Scoreboard(ai_settings,screen,stats)

    ship=Ship(ai_settings,screen)

    bullets=Group()

    alien=Alien(ai_settings,screen)

    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,stats,sb,screen,ship,aliens,bullets)

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

    play_button)

    run_game()

    game_functions.py:

    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_bullet(ai_settings,screen,ship,bullets)

    elif event.key==pygame.K_q:

    sys.exit()

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

    if len(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,stats,sb,play_button,ship,aliens,bullets):

    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:

    check_play_button(ai_settings,screen,ship,aliens,stats,sb,bullets,

    play_button,mouse_x,mouse_y)

    def check_play_button(ai_settings,screen,ship,aliens,stats,sb,bullets,

    play_button,mouse_x,mouse_y):

    if button_clicked and not stats.game_active:

    ai_settings.initialize_dynamic_settings()

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

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

    bullets.update()

    for bullet in bullets.copy():

    bullets.remove(bullet)

    #print(len(bullets))

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

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

    alien=Alien(ai_settings,screen)

    alien.x=alien_width+2*alien_width*alien_number

    alien.rect.x=alien.x

    aliens.add(alien)

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

    alien=Alien(ai_settings,screen)

    #available_space_x=ai_settings.screen_width-2*alien_width

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

    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)

    #alien=Alien(ai_settings,screen)

    #alien.x=alien_width+2*alien_width*alien_number

    #alien.rect.x=alien.x

    #aliens.add(alien)

    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,sb,screen,ship,aliens,bullets):

    if stats.ships_left>0:

    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

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

    screen_rect=screen.get_rect()

    for alien in aliens.sprites():

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

    break

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

    check_fleet_edges(ai_settings,aliens)

    aliens.update()

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

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

    def check_high_score(stats,sb):

    if stats.score>stats.high_score:

    stats.high_score= stats.score

    sb.prep_high_score()

    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.screen_rect=screen.get_rect()

    self.moving_right=False

    self.moving_left=False

    def update(self):

    self.center += self.ai_settings.ship_speed_factor

    self.center -= self.ai_settings.ship_speed_factor

    def blitme(self):

    def center_ship(self):

    self.center=self.screen_rect.centerx

    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

    self.x=float(self.rect.x)

    def blitme(self):

    def check_edges(self):

    return True

    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:

    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.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

    self.rect.y=self.y

    def draw_bullet(self):

    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

    def reset_stats(self):

    self.ships_left=self.ai_settings.ship_limit

    self.score = 0

    self.level=1

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

    self.ship_limit=2

    self.bullet_speed_factor=6

    self.bullet_width=3000

    self.bullet_height=20

    self.bullet_color=150,150,150

    self.bullets_allowed=1200

    self.alien_speed_factor=2

    self.fleet_drop_speed=10

    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

    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)

    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)

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

    self.prep_msg(msg)

    def prep_msg(self,msg):

    self.button_color)

    self.msg_image_rect=self.msg_image.get_rect()

    def draw_button(self):

    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=(255,30,30)

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

    self.prep_score()

    self.prep_high_score()

    self.prep_level()

    self.prep_ships()

    def prep_score(self):

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

    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 prep_high_score(self):

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

    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_level(self):

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

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

    ship.rect.y=10

    def show_score(self):

    ps:

    1、游戏中使用的飞船和外星人图形文件,使用的是位图(.bmp),首先你得把图形文件新建一个images文件和类放在一起。

    2、最后执行alien_invasion.py,游戏界面就会出现。

    展开全文
  • 外星人入侵python编写

    2020-07-05 21:32:39
    在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀...
  • python游戏外星人入侵

    2018-08-06 13:05:25
    用python的pygame做的小项目游戏外星人入侵,飞船发射子弹消灭外星人
  • pygame外星人入侵源码,和飞机大战差不了太多。 功能实现:全屏切换、游戏暂停、记录得分、显示最高分、点击按钮开始游戏、按空格发射子弹、击杀外星人得分、外星人移动逼近 游戏描述:玩家有3次机会,外星人群会...
  • Python小游戏源码-外星人入侵游戏源码
  • PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下 准备工作:下载python,比如Anaconda3(64 bit),导入pygame游戏包 1.外星人设置,alien.py,代码: import pygame from pygame.sprite import Sprite...
  • Python 项目练习1 外星人入侵(武装飞船)2020年07月30日| 萬仟网IT编程 | 我要评论 本项目具体步骤在书本《Python编程:从入门到实践》第十二章中安装pygame可通过pip安装:python -m pip install --user pygame-...

    Python 项目练习1 外星人入侵(武装飞船)

    2020年07月30日

    | 萬仟网IT编程

    | text-message.png我要评论

    本项目具体步骤在书本《Python编程:从入门到实践》第十二章中安装pygame可通过pip安装:python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whlPygame窗口alien_invasion.pyimport sys import pygame from settings import Settingsfrom ship import Shipimport game_functions as gffrom p

    本项目具体步骤在书本《Python编程:从入门到实践》第十二章中

    安装pygame

    可通过pip安装:

    python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whl

    Pygame窗口

    alien_invasion.py

    import sys

    import pygame

    from settings import Settings

    from ship import Ship

    import game_functions as gf

    from pygame.sprite import Group

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

    gf.update_bullets(bullets)

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

    run_game()

    设置类

    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

    self.bullets_allowed = 3

    飞船图像

    图片放到 images 文件夹里,图片名为 ship.bmp

    图片后缀为.bmp

    b_0_202007301629494642.bmp

    Ship 类

    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)

    响应模块 game_functions

    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:

    fire_bullet(ai_settings, screen, ship, bullets)

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

    """如果还没有到达限制,就发射一颗子弹"""

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

    if len(bullets) < ai_settings.bullets_allowed:

    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)

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

    for bullet in bullets.sprites():

    bullet.draw_bullet()

    ship.blitme()

    # 让最近绘制的屏幕可见

    pygame.display.flip()

    def update_bullets(bullets):

    """更新子弹的位置,并删除已消失的子弹"""

    # 更新子弹的位置

    bullets.update()

    # 删除已消失的子弹

    for bullet in bullets.copy():

    if bullet.rect.bottom <= 0:

    bullets.remove(bullet)

    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)

    效果图:

    b_0_202007301629491570.png

    b_0_202007301629507184.jpg

    本文地址:https://blog.csdn.net/qq_41657977/article/details/107674229

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    相关文章:

    最近,在终端启动python时,报了一个错误:failed calling sys.__interactivehook__traceback (most rec...

    gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

    在某些特殊情况下,我们的 python 脚本需要调用父目录下的其他模块。例如:在编写 gne 的测试用例时,有一个脚本 generate_new_cases.p...

    python 界有条不成文的准则: 计算密集型任务适合多进程,io 密集型任务适合多线程。本篇来作个比较。通常来说多线程相对于多进程有优势,因为创建一个进程开销...

    bfs"""# @time : 2020/11/8# @author : jimou chen"""# 广搜def bfs(graph, start): q...

    1、使用xlrd模块读取数据# 将excel表格内容导入到tables列表中def import_excel(tab): # 创建一个空列表,存储excel的数...

    在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到的使用return能够进行多值输出,这才是我...

    gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

    使用程序难免会有出错的时候,如何从大篇代码中找出错误,不仅考验能力,还要考验小伙们的耐心。辛辛苦苦敲出的代码运行不出结果,非常着急是可以理解的。那么我们在pyt...

    一、准备工作:1、安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据(以上工作直接用navicat for...

    gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

    通过fiddler抓包比较,基本可以确定是javascript生成加密cookie导致原来的请求返回521。发现问题:  打开fiddler软件,用浏览器打开目...

    gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

    1.self只有在类的方法中才会有,其他函数或方法是不必带self的。2.在调用时不必传入相应的参数。3.在类的方法中(如__init__),第一参数永远是se...

    网友评论

    pichead_null.gif

    验证码:

    641630.html

    展开全文
  • 外星人入侵小游戏.zip

    2021-02-18 16:37:57
    外星人入侵小游戏.zip
  • 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()

    展开全文
  • python断断续续的学了一段实践,基础课程终于看完了,现在跟着做三个小项目,第一个是外星人入侵的小游戏:一 Pygamepygame 是一组功能强大而有趣的模块,可用于管理图形,动画乃至声音,让你轻松的开发出想要的游戏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,973
精华内容 1,589
关键字:

外星人入侵