From de2c373b59a91f43ac3aff03a91626e76751f38b Mon Sep 17 00:00:00 2001 From: 206530104 <2892864848@qq.com> Date: Wed, 23 Jun 2021 12:27:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- settings.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ ship.py | 50 ++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 settings.py create mode 100644 ship.py diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..69e21a8 --- /dev/null +++ b/settings.py @@ -0,0 +1,73 @@ +import pygame + +class Settings(): + """储存《外星人入侵》所有设置的类""" + + def __init__(self): + """初始化游戏的设置""" + # 屏幕设置 + self.screen_width = 1200 + self.screen_height = 800 + self.bg_color = (0, 0, 0) + self.lb_bg_color = (10, 10, 10) + self.lb_text_color = (230, 230, 230) + + # 飞船设置 + self.ship_limit = 3 + + # 子弹设置 + self.bullet_width = 3 + self.bullet_height = 15 + self.bullet_color = (180, 180, 180) + self.bullets_allowed = 5 + + # 超级子弹设置 + self.super_bullet_color = (0, 255, 0) + self.super_bullet_width = 6 + self.super_bullet_height = 150 + self.points_of_power = 1000 + + # 外星人设置 + self.fleet_drop_speed = 10 + self.alien_bullet_color = (220, 220, 0) + + # 游戏加快节奏参数 + self.speedup_scale = 1.1 + + # 击中外星人得分点数的提高速度 + self.score_scale = 1.2 + + # 音效设置 + self.bullet_sound = pygame.mixer.Sound("sounds/bullet.wav") + self.super_bullet_sound = pygame.mixer.Sound("sounds/super_bullet.wav") + self.ship_hit_sound = pygame.mixer.Sound("sounds/ship_hit.wav") + self.start_new_level_sound = pygame.mixer.Sound("sounds/start_new_level.wav") + self.super_mode_sound = pygame.mixer.Sound("sounds/super_mode.wav") + self.gameover_sound = pygame.mixer.Sound("sounds/gameover.wav") + self.recordbroken_sound = pygame.mixer.Sound("sounds/recordbroken.wav") + + # 初始化游戏动态设置 + 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.super_bullet_speed_factor = 30 + + # 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) diff --git a/ship.py b/ship.py new file mode 100644 index 0000000..5b3ab97 --- /dev/null +++ b/ship.py @@ -0,0 +1,50 @@ +import pygame +from pygame.sprite import Sprite + +class Ship(Sprite): + + def __init__(self, ai_settings, screen): + """初始化飞船并设置其初始位置""" + super().__init__() + self.ai_settings = ai_settings + self.screen = screen + + # 加载飞船图像并获得其外接矩形 + 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 + + # 无敌标志 + self.super_mode = False + + 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 blitme(self): + """在指定位置绘制飞船""" + self.screen.blit(self.image, self.rect) + + if self.super_mode: + # 无敌模式,绘制金色边框 + pygame.draw.rect(self.screen, (200, 200, 0),(self.rect), 2) + + def center_ship(self): + self.rect.centerx = self.screen_rect.centerx