太空侵略者项目

太空侵略者项目,第1张

太空侵略者项目

自上次射击以来,您可以使用计数计数主循环中的循环-
如果它大于(例如)大于清除计数器并射击的10倍-在更复杂的游戏中,您可以使用pygame.time.get_ticks()以毫秒为单位进行计数自上次拍摄以来

另一种方法是仅在屏幕上少于2张的情况下才开火。

编辑:

您的代码看起来像这样-简单的示例。使用键:左,右,空格,P(用于暂停)。

还有很多事情要做。例如更好的碰撞检测-pygame.sprite.collide_rect()

我在末尾附加了位图

#-----!!!!SPACE INVADERS!!!!-----import pygamefrom pygame.locals import *#----------------------------------------------------------------------class Ship():    def __init__(self, screen_rect):        #self.image = pygame.image.load("spaceship.png")        self.image = pygame.image.load("ball1.png")        self.image = pygame.transform.scale(self.image, (100,50))        self.rect = self.image.get_rect()        # put ship bottom, center x         self.rect.bottom = screen_rect.bottom         self.rect.centerx = screen_rect.centerx        self.move_x = 0        self.shots = []        self.shots_count = 0        self.max_shots = 2    #--------------------    def event_handler(self, event):        #print "debug: Ship.event_handler"        if event.type == KEYDOWN: if event.key == K_LEFT:     self.move_x = -5 elif event.key == K_RIGHT:     self.move_x = 5 elif event.key == K_SPACE:     if len(self.shots) < self.max_shots:         self.shots.append(Bullet(self.rect.centerx, self.rect.top))        if event.type == KEYUP: if event.key in (K_LEFT, K_RIGHT):     self.move_x = 0    def update(self):        #print "debug: Ship.update: move_x", self.move_x        self.rect.x += self.move_x        for s in self.shots: s.update()        for i in range(len(self.shots)-1, -1, -1): print "debug: Ship.update: testing bullet ", i if not self.shots[i].is_alive:     print "debug: Ship.update: removing bullet ", i     del self.shots[i]    #--------------------    def draw(self, screen):        #print "debug: Ship.draw"        screen.blit(self.image, self.rect.topleft)        for s in self.shots: s.draw(screen)    def bullet_detect_collison(self, enemy_list):        for s in self.shots: for e in enemy_list:     if pygame.sprite.collide_circle(s, e):         s.is_alive = False         e.is_alive = False#----------------------------------------------------------------------class Bullet():    def __init__(self, x, y):        #self.image = pygame.image.load("SingleBullet.png")        self.image = pygame.image.load("ball2.png")        self.image = pygame.transform.scale(self.image, (25,25))        self.rect = self.image.get_rect()        self.rect.centerx = x        self.rect.centery = y        self.is_alive = True    #--------------------    def update(self):        self.rect.y -= 15        if self.rect.y < 0: self.is_alive = False    #--------------------    def draw(self, screen):        screen.blit(self.image, self.rect.topleft)#----------------------------------------------------------------------class Enemy():    def __init__(self, x, y):        self.image = pygame.image.load("ball3.png")        self.rect = self.image.get_rect()        self.rect.centerx = x        self.rect.centery = y        self.is_alive = True    #--------------------    def update(self):        self.rect.y += 1        #~ if self.rect.y < 0: #~ self.is_alive = False    #--------------------    def draw(self, screen):        screen.blit(self.image, self.rect.topleft)#----------------------------------------------------------------------class Game():    def __init__(self):        pygame.init()        w, h = 800, 800        self.screen = pygame.display.set_mode((w,h))        pygame.mouse.set_visible(False)        self.ship = Ship(self.screen.get_rect())        self.enemies = []        for i in range(100, 800, 100): self.enemies.append(Enemy(i, 100))        font = pygame.font.SysFont("", 72)        self.text_paused = font.render("PAUSED", True, (255, 0, 0))        self.text_paused_rect = self.text_paused.get_rect(center=self.screen.get_rect().center)    #-----MAIN GAME LOOP-----    def run(self):        clock = pygame.time.Clock()        RUNNING = True        PAUSED = False        while RUNNING: clock.tick(30) #--- events --- for event in pygame.event.get():     if event.type == pygame.QUIT:         RUNNING = False     if event.type == KEYDOWN:         if event.key == K_ESCAPE:  RUNNING = False         if event.key == K_p:  PAUSED = not PAUSED     if not PAUSED:         self.ship.event_handler(event) #--- changes --- if not PAUSED:     self.ship.update()     for e in self.enemies:         e.update()     self.ship.bullet_detect_collison(self.enemies)     for i in range(len(self.enemies)-1, -1, -1):         print "debug: Ship.update: testing bullet ", i         if not self.enemies[i].is_alive:  print "debug: Ship.update: removing bullet ", i  del self.enemies[i] #--- draws --- self.screen.fill((0,0,0)) self.ship.draw(self.screen) for e in self.enemies:     e.draw(self.screen) if PAUSED:     self.screen.blit(self.text_paused, self.text_paused_rect) pygame.display.update()        #--- quit ---        pygame.quit()#---------------------------------------------------------------------Game().run()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存