You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.6 KiB
128 lines
4.6 KiB
import random
|
|
from typing import Any
|
|
|
|
import pygame
|
|
from pygame.sprite import Sprite
|
|
from bullet import Bullet
|
|
from bullet import Bullet1
|
|
from bullet import Bullet2
|
|
|
|
|
|
class Ship(Sprite):
|
|
def __init__(self, ai_game):
|
|
super().__init__()
|
|
|
|
# 获取屏幕设置
|
|
self.screen = ai_game.screen
|
|
self.screen_rect = ai_game.screen.get_rect()
|
|
self.settings = ai_game.settings
|
|
|
|
# 加载图片
|
|
self.image = pygame.image.load("resource/image/playerShip1_green.png").convert_alpha()
|
|
# self.image.set_colorkey(self.settings.BLACK)
|
|
self.rect = self.image.get_rect()
|
|
self.radius = self.rect.width / 2
|
|
# pygame.draw.circle(self.image, self.settings.RED, self.rect.center, self.radius)
|
|
# 初始化位置
|
|
self.rect.midbottom = self.screen_rect.midbottom
|
|
self.rect.centery -= 30
|
|
# 设置飞船的移动属性
|
|
self.x = float(self.rect.x)
|
|
self.speed = 10.0
|
|
# 子弹精灵
|
|
self.bullets = self.settings.bullets
|
|
# 子弹发射
|
|
self.ready_to_fire = 0
|
|
# 飞机血条
|
|
self.hp = 100
|
|
self.alive = 1
|
|
# 目标敌人
|
|
self.target = self.settings.target
|
|
|
|
# 飞机等级
|
|
self.grade = 1
|
|
self.grade_up_time = 0
|
|
self.grade_get_time = pygame.time.get_ticks()
|
|
|
|
def update(self, *args: Any, **kwargs: Any) -> None:
|
|
self.moving()
|
|
self.fire()
|
|
self.effect_continue_time()
|
|
|
|
def moving(self):
|
|
keys = pygame.key.get_pressed()
|
|
if keys[pygame.K_UP] and self.rect.top > 0:
|
|
self.rect.y -= self.speed
|
|
if keys[pygame.K_DOWN] and self.rect.bottom <= self.screen_rect.bottom:
|
|
self.rect.y += self.speed
|
|
if keys[pygame.K_LEFT] and self.rect.left > 0:
|
|
self.rect.x -= self.speed
|
|
if keys[pygame.K_RIGHT] and self.rect.right <= self.screen_rect.right:
|
|
self.rect.x += self.speed
|
|
|
|
def fire(self):
|
|
keys = pygame.key.get_pressed()
|
|
|
|
if keys[pygame.K_SPACE]:
|
|
if self.grade == 1: # 等级1
|
|
if self.ready_to_fire == 0:
|
|
# 创建子弹
|
|
bullet = Bullet2(self)
|
|
# 加入到精灵组中
|
|
self.bullets.add(bullet)
|
|
self.ready_to_fire += 1
|
|
if self.ready_to_fire > 10:
|
|
self.ready_to_fire = 0
|
|
elif self.grade == 2: # 等级2时
|
|
if self.ready_to_fire == 0:
|
|
# 创建子弹
|
|
bullet1 = Bullet2(self)
|
|
bullet2 = Bullet2(self)
|
|
bullet1.rect.center = self.rect.midleft
|
|
bullet2.rect.center = self.rect.midright
|
|
# 加入到精灵组中
|
|
self.bullets.add(bullet1, bullet2)
|
|
self.ready_to_fire += 1
|
|
if self.ready_to_fire > 10:
|
|
self.ready_to_fire = 0
|
|
elif self.grade >= 3:
|
|
if self.ready_to_fire == 0:
|
|
# 创建子弹
|
|
bullet1 = Bullet2(self)
|
|
bullet2 = Bullet2(self)
|
|
bullet1.speed_y = 36
|
|
bullet2.speed_y = 36
|
|
bullet1.rect.center = self.rect.midleft
|
|
bullet2.rect.center = self.rect.midright
|
|
# 加入到精灵组中
|
|
self.bullets.add(bullet1, bullet2)
|
|
self.ready_to_fire += 1
|
|
if self.ready_to_fire > 5:
|
|
self.ready_to_fire = 0
|
|
|
|
if keys[pygame.K_r]:
|
|
if len(self.settings.aliens.sprites()):
|
|
temp = 10
|
|
if self.ready_to_fire == 0:
|
|
# 创建子弹
|
|
bullet = Bullet1(self)
|
|
if self.grade == 4:
|
|
temp = 1
|
|
bullet.speed = 40
|
|
# 加入到子弹精灵组中
|
|
bullet.get_close_position()
|
|
self.bullets.add(bullet)
|
|
self.ready_to_fire += 1
|
|
if self.ready_to_fire > temp:
|
|
self.ready_to_fire = 0
|
|
|
|
def grade_up(self):
|
|
self.grade += 1
|
|
self.grade_up_time = pygame.time.get_ticks()
|
|
|
|
def effect_continue_time(self):
|
|
now = pygame.time.get_ticks()
|
|
if self.grade > 1 and now - self.grade_up_time > 5000:
|
|
self.grade = 1
|
|
self.grade_up_time = now
|