python--pygame04
1.创建子弹
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 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) #子弹向上移动所以是y坐标,用float小数微调子弹的速度。 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): pygame.draw.rect(self.screen,self.color,self.rect)
2.setting.py
class Settings(): def __init__(self,bg_color): #__init__是类的方法。每创建新实例时会自动调用 screen_width = input("please input what you like the screen width,default 800") self.screen_width = int(screen_width) screen_height = input("please input what you like the screen height,default 1200") self.screen_height = int(screen_height) self.bg_color = bg_color self.ship_speed_factor=0.5 self.bullet_speed_factor=0.3 self.bullet_width=1 self.bullet_height=8 self.bullet_color=29,25,26
4.game_function.py
import sys import pygame from setting import Settings from ship import Ship 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: 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.blitime() pygame.display.flip()
3.allien_invasion.py
import pygame
import game_functions as gf
from pygame.sprite import Group
from bullet import Bullet
from ship import Ship
from setting import Settings
def run_game():
pygame.init()
ai_settings=Settings('white')
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()
至此:子弹创建成功