PYTHON第三天(飞机大战)

有一说一,《PYTHON从入门到实践》这本书到了PYGAME这一章节写的十分乱。。真的想吐槽。。之前就因为类与类的复杂语法没看懂,导致这本书没看后续的章节。。也可能是我自己的基础不太扎实。。许多类里的用法真的搞不清。。包括GROUP和Spirte。。今晚被这个搞烦了。。去看视频了。

  • 不过今天还是有收获…搞清楚昨天的飞机上下移动为啥会出去的问题了,还有就是今天把子弹做出来了。。就是子弹的调用还是不太清楚。。等等去看看别的教程找一下父类子类的东西。
import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
#就是这个啥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)
       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_buller(self):
       pygame.draw.rect(self.screen,self.color,self.rect)

然后就是调用子弹部分,这部分还是容易理解的。但是做到这步,自己老是在纠结能不能按空格的时候一直发射子弹,放掉则发射子弹指示停止。明天尝试一下~

import sys
import pygame
from bullet import Bullet
def check_keydown_events(event,ship,ai_settings,screen,bullets):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
        print(event.key)
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
        print(event.key)
    elif event.key == pygame.K_UP:
        ship.moving_up = True
        print(event.key)
    elif event.key == pygame.K_DOWN:
        ship.moving_down = True
        print(event.key)
    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
    elif event.key == pygame.K_UP:
        ship.moving_up = False
    elif event.key == pygame.K_DOWN:
        ship.moving_down = False



def check_events(ship,ai_settings,screen,bullets):
    #控制飞船移动
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event,ship,ai_settings,screen,bullets)
            #Event就是for循环里的event
        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_buller()

    ship.blitme()
    ship.update()

    pygame.display.flip()

猜你喜欢

转载自blog.csdn.net/weixin_49712647/article/details/112549551