def on_update(time): global countdown if countdown > 0: player1.update() player2.update() #countdown -= time/1000 if player1.bang: bullets.add(Bullet(player1.bang[0], player1.bang[1])) player1.bang = None if player2.bang: bullets.add(Bullet(player2.bang[0], player2.bang[1])) player2.bang = None bullets.update(player1, player2) balasPerdidas = [] for bullet in bullets: if bullet.y < 0 or bullet.y > 850: balasPerdidas.append(bullet) for bullet in balasPerdidas: bullets.remove(bullet) #The game ends when the timmer count to 0 or some player's life goes to 0 if countdown <= 0 or len(player1.heart) == 0 or len(player2.heart) == 0: tim.sleep(5) sys.exit(0)
def shoot(self): bulletL = Bullet(self.bullet[0], [self.rect.left, self.rect.top]) bulletR = Bullet(self.bullet[0], [self.rect.right, self.rect.top]) self.bullets.add(bulletL) self.bullets.add(bulletR) # TODO wing ball bullet--------------------------------- if self.power == 200: pass elif self.power >= 150: pass elif self.power >= 100: pass elif self.power >= 50: pass
def shoot(self): index = self.game.bulletsIndex now = time() if now - self.shootTime < SHOOTDELAY: return self.shootTime = now self.game.bulletsIndex += 1 if self.game.bulletsIndex > 65535: self.game.bulletsIndex = 0 pos = self.game.getNextPos(self.position, self.facing) for playerKey in self.game.players: if self.game.players[ playerKey].position == pos and self.floor == self.game.players[ playerKey].floor: self.game.kill(playerKey, self.playerId) return if self.game.mapDimensions[0] - 1 < pos[0] or pos[ 0] < 0 or self.game.mapDimensions[1] - 1 < pos[1] or pos[1] < 0: return elif not self.game.getTitle(pos, self.floor) in PLAYER_CAN_MOVE_THROUGH: return self.game.bullets[index] = Bullet(index, self.playerId, pos, self.floor, self.facing)
def fire_bullet(self): """ Fire a bullet. """ # Todo: Fix this; this might be causing a circular reference. if len(self.bullets) < self.bullet_limit: self.bullets.add(Bullet(self))
def reset(self): # 初始化飞机(飞机挂了, 初始化到初始位置) self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, ( self.height - self.rect.height - 10) # 重置飞机的存活状态 self.active = True #各项数值初始化 self.speed = 10 self.bullets = [] for i in range(self.bullet_num): self.bullets.append(Bullet(self.rect.midtop))
def check_event_keydown(ship, bulls, all_setting, screen, event): if (event.key == pygame.K_RIGHT): ship.move_right = True elif (event.key == pygame.K_LEFT): ship.move_left = True elif (event.key == pygame.K_DOWN): ship.move_down = True elif (event.key == pygame.K_UP): ship.move_up = True elif event.key == pygame.K_SPACE: new_bullet = Bullet(all_setting, screen, ship) bulls.add(new_bullet)
def check_keydown_events(event, sett, screen, ship, bullets): """Keydown""" if event.key == pygame.K_RIGHT: ship.moving_right = True elif event.key == pygame.K_q: sys.exit() elif event.key == pygame.K_LEFT: ship.moving_left = True elif event.key == pygame.K_DOWN: ship.moving_down = True elif event.key == pygame.K_UP: ship.moving_up = True elif event.key == pygame.K_SPACE: # Create a new bullet and add it to the bullets group. new_bullet = Bullet(sett, screen, ship) bullets.add(new_bullet)
def update(self, keysdown: list): moveVecx = 0 moveVecy = 0 if keysdown[pygame.K_s]: moveVecy += self.speed if keysdown[pygame.K_w]: moveVecy += -self.speed if keysdown[pygame.K_a]: moveVecx += -self.speed if keysdown[pygame.K_d]: moveVecx += self.speed if abs(moveVecx) == abs(moveVecy) and moveVecx != 0: diag = math.sqrt(2) moveVecx = round(moveVecx / diag, 2) moveVecy = round(moveVecy / diag, 2) self.x += moveVecx self.y += moveVecy self.body.x, self.body.y = self.x, self.y self.cooldown -= 1 if self.cooldown <= 0 and cursor.Lclick: self.cooldown = self.cooldownMax relx, rely = cursor.x - self.x, cursor.y - self.y angle = math.atan2(rely, relx) direction = { "angle": angle, "chx": math.cos(angle), "chy": math.sin(angle) } self.bulletList.append( Bullet(self.bulletHealth, direction, self.pos, (150, 2, 180), 300)) self.hp.update()
def __init__(self, bg_size, screen): super(OurPlane, self).__init__() # 确定我方飞机背景图(有俩张,可以让它们不停的切换,形成动态效果) self.image_one = pygame.image.load( os.path.join(BASE_DIR, "material/image/hero1.png")) self.image_two = pygame.image.load( os.path.join(BASE_DIR, "material/image/hero2.png")) # 获取我方飞机的位置 self.rect = self.image_one.get_rect() # 本地化背景图片的尺寸 self.width, self.height = bg_size[0], bg_size[1] # 获取飞机图像的掩膜用以更加精确的碰撞检测 self.mask = pygame.mask.from_surface(self.image_one) # 定义飞机初始化位置,底部预留60像素 self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, ( self.height - self.rect.height - 10) # 设置飞机移动速度 self.speed = 10 # 设置飞机存活状态(True为存活, False为死亡) self.active = True #设置飞机生命值 self.life = 3 # 加载飞机损毁图片 self.destroy_images = [] self.destroy_images.extend([ pygame.image.load( os.path.join(BASE_DIR, "material/image/hero_blowup_n1.png")) ]) self.bullets = [] self.time = randint(0, 30) self.screen = screen self.bullet1 = [] self.bullet_index = 0 self.bullet_num = 5 for i in range(self.bullet_num): self.bullets.append(Bullet(self.rect.midtop))
def add_bullet(our_plane, bullets_group, num): for i in range(num): bullet = Bullet(our_plane.rect.midtop) bullets_group.append(bullet)
def fire_bullet(ai_settings, screen, rocket_ship, bullets): """Fire a bullet if limit not reached yet.""" # Create a new bullet and add it to the bullets group. if len(bullets) < ai_settings.bullets_allowed: new_bullet = Bullet(ai_settings, screen, rocket_ship) bullets.add(new_bullet)
def main(): me_destroy_index = 0 bullets = [] pygame.mixer.music.play(loops=-1) # loops = -1,音乐无限循环(默认循环播放一次) running = True delay = 60 # 对一些效果进行延迟,效果更好一些 plane = Plane(bg_size) switch_image = False enemies = pygame.sprite.Group() # 生成敌方飞机组(一种精灵组用以存储所有敌机精灵) small_enemies = pygame.sprite.Group() # 敌方小型飞机组(不同型号敌机创建不同的精灵组来存储) add_small_enemies(small_enemies, enemies, 4) # 生成若干敌方小型飞机 # 定义子弹, 各种敌机和我方敌机的毁坏图像索引 bullet_index = 0 e1_destroy_index = 0 plane_destroy_index = 0 # 定义子弹实例化个数 bullet1 = [] bullet_num = 6 for i in range(bullet_num): bullet1.append(Bullet(plane.rect.midtop)) while running: # 绘制背景图 screen.blit(backgroud, (0, 0)) # 飞机是喷气式的, 那么这个就涉及到一个帧数的问题 clock = pygame.time.Clock() clock.tick(60) # 绘制我方飞机的两种不同状态,喷气时与不喷气时 if not delay % 3: switch_image = not switch_image for each in small_enemies: if each.active: each.move() screen.blit(each.image, each.rect) pygame.draw.line(screen, color_black, (each.rect.left, each.rect.top - 5), (each.rect.right, each.rect.top - 5), 2) energy_remain = each.energy / SmallEnemy.energy # 如果血量大约百分之二十则为绿色,否则为红色 if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line( screen, energy_color, (each.rect.left, each.rect.top - 5), (each.rect.left + each.rect.width * energy_remain, each.rect.top - 5), 2) # 随机循环输出敌方小飞机 for e in small_enemies: e.move() screen.blit(e.image, e.rect) else: while e1_destroy_index == 0: e1_destroy_index_second = 0 screen.blit(each.destroy_images[e1_destroy_index_second], each.rect) e1_destroy_index = (e1_destroy_index_second + 1) % 4 e1_destroy_index_second += 1 enemy1_die_sound.play() each.reset() # 飞机存活状态 if plane.active: if switch_image: screen.blit(plane.image_one, plane.rect) else: screen.blit(plane.image_two, plane.rect) # 飞机存活状态下才能发射子弹,且没10帧发射一颗移动的子弹 if not (delay % 10): bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num for b in bullets: # 只有激活的子弹才能击中敌机 if b.active: b.move() screen.blit(b.image, b.rect) enemies_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask) # 如果子弹击中敌机 if enemies_hit: b.active = False # 子弹损毁 for e in enemies_hit: e.active = False # 小型飞机被毁 # 毁坏状态绘制爆炸的场面 else: if not (delay % 3): while me_destroy_index == 0: screen.blit(plane.destroy_images[plane_destroy_index], plane.rect) # 四张图片切换实现动画效果 me_destroy_index = (plane_destroy_index + 1) % 4 plane_destroy_index += 1 # 爆炸声音效果 me_die_sound.play() plane.reset() # 调用 pygame 实现的碰撞方法 spritecollide (我方飞机如果和敌机碰撞, 更改飞机的存活属性) enemies_down = pygame.sprite.spritecollide(plane, enemies, False, pygame.sprite.collide_mask) if enemies_down: plane.active = False for enemy in enemies: enemy.active = False # 响应用户的操作 for event in pygame.event.get(): # 如果按下屏幕上的关闭按钮,触发quit事件,游戏退出 if event.type == 12: pygame.quit() sys.exit() if delay == 0: delay = 60 delay -= 1 # 获取用户输入的所有键盘序列,如向上 key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: plane.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: plane.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: plane.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: plane.move_right() # 再而我们将背景图像输出到屏幕上 pygame.display.flip()
def main(): """ Main entry of this game :return: """ # -1, infinite loop pygame.mixer.music.play(-1) running = True switch_image = False delay = 60 enemies = pygame.sprite.Group() small_enemies = pygame.sprite.Group() add_small_enemies(small_enemies, enemies, 6) # define bullets bullet_index = 0 e1_destroy_index = 0 me_destroy_index = 0 # define the number of bullets instances bullet1 = [] bullet_num = 6 for i in range(bullet_num): bullet1.append( Bullet( our_plane.rect.midtop ) ) while running: # draw a backgournd picture screen.blit(background, (0, 0)) clock = pygame.time.Clock() clock.tick(60) if not delay % 3: switch_image = not switch_image # When the enemies are alive for each in small_enemies: if each.active: each.move() screen.blit(each.image, each.rect) pygame.draw.line( screen, color_black, ( each.rect.left, each.rect.top - 5, ), ( each.rect.right, each.rect.top - 5 ), 2 ) energy_remain = each.energy / SmallEnemy.energy # Color ot Blood Slot if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line( screen, energy_color, ( each.rect.left, each.rect.top - 5 ), ( each.rect.left + each.rect.width * energy_remain, each.rect.top - 5 ), 2 ) else: # not active if e1_destroy_index == 0: enemy1_down_sound.play() screen.blit( each.destroy_images[e1_destroy_index], each.rect ) e1_destroy_index = (e1_destroy_index + 1) % 4 if e1_destroy_index == 0: each.reset() # When we are alive, display as normal if our_plane.active: if switch_image: screen.blit( our_plane.image_one, our_plane.rect ) else: screen.blit( our_plane.image_two, our_plane.rect ) # When alive, ready for shooting if not (delay % 10): bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(our_plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num for b in bullets: if b.active: # when a bullet is activated b.move() # flying screen.blit(b.image, b.rect) enemies_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask ) if enemies_hit: # if the bullet hits a plane # the bullet's mission is completed b.active = False for e in enemies_hit: # at the same time, the plane is over e.active = False # when our plane is destroy, a explosion happens else: if not (delay % 3): screen.blit( our_plane.destroy_images[me_destroy_index], our_plane.rect ) me_destroy_index = (me_destroy_index + 1) % 4 if me_destroy_index == 0: me_down_sound.play() our_plane.reset() # When our plane collides with the enermy in the air, # it's over enemies_down = pygame.sprite.spritecollide( our_plane, enemies, False, pygame.sprite.collide_mask ) for event in pygame.event.get(): if event.type == 12: pygame.quit() sys.exit() if delay == 0: delay = 60 delay -= 1 # trigger from keyboard key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: our_plane.move_up() elif key_pressed[K_s] or key_pressed[K_DOWN]: our_plane.move_down() elif key_pressed[K_a] or key_pressed[K_LEFT]: our_plane.move_left() elif key_pressed[K_d] or key_pressed[K_RIGHT]: our_plane.move_right() # draw the new image and display it pygame.display.flip()
def fire_bullet(ai_settings, screen, ship, bullets): """如果还没有到达限制,就发射一颗子弹""" # 创建一颗子弹,并将其加入到编组bullets中 if len(bullets) < ai_settings.bullets_allowed: # 检查子弹数量 new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
def add_shot(group1, num): for i in range(num): bul = Bullet(ourplane.rect) group1.add(bul)
def fire_bullets(bullets, ai_settings, screen, ship): if len(bullets) >= ai_settings.bullet_allowed: print('bullet is over 3.') else: new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
# 6. 更新所有角色 all_sprites.update() # 获得用户所有的键盘输入序列(如果用户通过键盘发出“向上”的指令,其他类似) key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: plane.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: plane.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: plane.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: plane.move_right() if key_pressed[K_SPACE]: bullet = Bullet.new_bullet((plane.rect.x, plane.rect.y)) if bullet: bullet_sprites.add(bullet) all_sprites.add(bullet) # 子弹击毁敌舰 for enemy in enemy_sprites: if enemy.is_survive(): enemy.strike(bullet_sprites) if not enemy.is_survive(): score += 1 print(enemy, score) # 增加敌舰 if len(enemy_sprites) <= ENEMY_MIN_SIZE: init_enemy(ENEMY_SIZE - len(enemy_sprites))
def fire(self, bt_game): return Bullet(bt_game, self)
def fire_bullet(sett, screen, ship, bullets): """Fire a bullet, if limit not reached yet.""" # Create a new bullet, add to bullets group. if len(bullets) < sett.bullets_allowed: new_bullet = Bullet(sett, screen, ship) bullets.add(new_bullet)
def fire_bullet(ai_settings, screen, ship, sounds, bullets): """Creates a new bullet and fires it""" if len(bullets) < ai_settings.bullets_allowed: new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet) sounds.play_shooting_sound()
def fire_bullet(settings, screen, ship, bullets): if len(bullets) < settings.bullet_allow: new_bullet = Bullet(settings, screen, ship) bullets.add(new_bullet)
def fire(self, manager: Manager): bullet_pos = Vector2(self.rect.midtop) + Vector2(20, 0).rotate(-self.angle) bullet = Bullet(bullet_pos, self.angle, 100) manager.scene.add(bullet)
def main(): y = 0 running = True switch_image = False delay = 60 font = pygame.font.SysFont("", 30) enemis = pygame.sprite.Group() smallenemies = pygame.sprite.Group() add_SmallEnemy(enemis, smallenemies, 6) bulls = pygame.sprite.Group() bossbulls = pygame.sprite.Group() while running: screen.blit(bgp, (0, y - 700)) screen.blit(bgp, (0, y)) delay -= 1 text_surface = font.render("score:" + str(score), True, (0, 0, 0)) screen.blit(text_surface, (385, 5)) if delay == 0: delay = 60 if delay % 3: switch_image = not switch_image #我方 if ourplane.active: if switch_image: screen.blit(ourplane.image_one, ourplane.rect) else: screen.blit(ourplane.image_two, ourplane.rect) else: screen.blit(ourplane.destroy_images[delay % 4], ourplane.rect) ourplane.reset() clock = pygame.time.Clock() clock.tick(30) key_pressed = pygame.key.get_pressed() if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]: ourplane.move_UP() if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]: ourplane.move_left() if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]: ourplane.move_right() if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]: ourplane.move_down() y += 10 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: #global running running = False while True: #screen.blit(pause,(100,100)) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: running = True break #print(running) if running: break screen.blit(pause, (240, 420)) pygame.display.update() #print(running) #break # pygame.display.update() if y == 700: y = 0 #子弹 if delay % 5 == 0: # bul = Bullet(ourplane.rect) # bul.update() # screen.blit(bul.image,bul.rect) bul = Bullet(ourplane.rect) bulls.add(bul) bulls.update() bulls.draw(screen) #敌机 if score < 100: if delay % 30 == 0: enemy = SmallEnemy(bg_size) enemis.add(enemy) if delay % 60 == 0: enemy = MidEnemy(bg_size) enemis.add(enemy) enemis.update() enemis.draw(screen) if score >= 100: if delay % 10 == 0: bul = BossBullet(boss.rect) bossbulls.add(bul) bossbulls.update() bossbulls.draw(screen) energy_remain = boss.energy / Boss.energy if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line(screen, color_black, (boss.rect.left, boss.rect.bottom + 5), (boss.rect.right, boss.rect.bottom + 5), 5) pygame.draw.line( screen, energy_color, (boss.rect.left, boss.rect.bottom + 5), (boss.rect.left + (boss.rect.right - boss.rect.left) * energy_remain, boss.rect.bottom + 5), 5) boss.update() screen.blit(boss.image, boss.rect) #画血条 for each in enemis: energy_remain = each.energy / each.energy_in if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line(screen, color_black, (each.rect.left, each.rect.top - 5), (each.rect.right, each.rect.top - 5), 5) pygame.draw.line( screen, energy_color, (each.rect.left, each.rect.top - 5), (each.rect.left + (each.rect.right - each.rect.left) * energy_remain, each.rect.top - 5), 5) collide_list = pygame.sprite.groupcollide(enemis, bulls, False, True, pygame.sprite.collide_mask) for enemy in collide_list: enemy.energy -= 1 global score score += 1 if enemy.energy <= 0: for i in range(4): screen.blit(enemy.destroy_images[i], enemy.rect) enemis.remove(enemy) if pygame.sprite.spritecollide(ourplane, enemis, True, pygame.sprite.collide_mask): ourplane.energy -= 1 if pygame.sprite.spritecollide(ourplane, bossbulls, True, pygame.sprite.collide_mask): ourplane.energy -= 1 if pygame.sprite.spritecollide(boss, bulls, True, pygame.sprite.collide_mask): boss.energy -= 1 if boss.energy <= 0: running = False endgame(score) energy_remain = ourplane.energy / OurPlane.energy if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line(screen, color_black, (ourplane.rect.left, ourplane.rect.top - 5), (ourplane.rect.right, ourplane.rect.top - 5), 5) pygame.draw.line( screen, energy_color, (ourplane.rect.left, ourplane.rect.top - 5), (ourplane.rect.left + (ourplane.rect.right - ourplane.rect.left) * energy_remain, ourplane.rect.top - 5), 5) pygame.display.update()
def main(): # 响应音乐 pygame.mixer.music.play(-1) # loops 接收该参数, -1 表示无限循环(默认循环播放一次) running = True switch_image = False # 切换飞机的标识位(使飞机具有喷气式效果) delay = 60 # 对一些效果进行延迟, 效果更好一些 enemies = pygame.sprite.Group() # 生成敌方飞机组(一种精灵组用以存储所有敌机精灵) small_enemies = pygame.sprite.Group() # 敌方小型飞机组(不同型号敌机创建不同的精灵组来存储) add_small_enemies(small_enemies, enemies, 6) # 生成若干敌方小型飞机 # 定义子弹, 各种敌机和我方敌机的毁坏图像索引 bullet_index = 0 e1_destroy_index = 0 me_destroy_index = 0 # 定义子弹实例化个数 bullet1 = [] bullet_num = 6 for i in range(bullet_num): bullet1.append(Bullet(our_plane.rect.midtop)) while running: # 绘制背景图 screen.blit(background, (0, 0)) # 微信的飞机貌似是喷气式的, 那么这个就涉及到一个帧数的问题 clock = pygame.time.Clock() clock.tick(60) # 绘制我方飞机的两种不同的形式 if not delay % 3: switch_image = not switch_image for each in small_enemies: if each.active: # 随机循环输出小飞机敌机 each.move() screen.blit(each.image, each.rect) pygame.draw.line(screen, color_black, (each.rect.left, each.rect.top - 5), (each.rect.right, each.rect.top - 5), 2) energy_remain = each.energy / SmallEnemy.energy if energy_remain > 0.2: # 如果血量大约百分之二十则为绿色,否则为红色 energy_color = color_green else: energy_color = color_red pygame.draw.line( screen, energy_color, (each.rect.left, each.rect.top - 5), (each.rect.left + each.rect.width * energy_remain, each.rect.top - 5), 2) else: if e1_destroy_index == 0: enemy1_down_sound.play() screen.blit(each.destroy_images[e1_destroy_index], each.rect) e1_destroy_index = (e1_destroy_index + 1) % 4 if e1_destroy_index == 0: each.reset() # 当我方飞机存活状态, 正常展示 if our_plane.active: if switch_image: screen.blit(our_plane.image_one, our_plane.rect) else: screen.blit(our_plane.image_two, our_plane.rect) # 飞机存活的状态下才可以发射子弹 if not (delay % 10): # 每十帧发射一颗移动的子弹 bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(our_plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num for b in bullets: if b.active: # 只有激活的子弹才可能击中敌机 b.move() screen.blit(b.image, b.rect) enemies_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask) if enemies_hit: # 如果子弹击中飞机 b.active = False # 子弹损毁 for e in enemies_hit: e.active = False # 小型敌机损毁 # 毁坏状态绘制爆炸的场面 else: if not (delay % 3): screen.blit(our_plane.destroy_images[me_destroy_index], our_plane.rect) me_destroy_index = (me_destroy_index + 1) % 4 if me_destroy_index == 0: me_down_sound.play() our_plane.reset() # 调用 pygame 实现的碰撞方法 spritecollide (我方飞机如果和敌机碰撞, 更改飞机的存活属性) enemies_down = pygame.sprite.spritecollide(our_plane, enemies, False, pygame.sprite.collide_mask) if enemies_down: our_plane.active = False for row in enemies: row.active = False # 响应用户的操作 for event in pygame.event.get(): if event.type == 12: # 如果用户按下屏幕上的关闭按钮,触发QUIT事件,程序退出 pygame.quit() sys.exit() if delay == 0: delay = 60 delay -= 1 # 获得用户所有的键盘输入序列(如果用户通过键盘发出“向上”的指令,其他类似) key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: our_plane.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: our_plane.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: our_plane.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: our_plane.move_right() # 绘制图像并输出到屏幕上面 pygame.display.flip()
def main(): pygame.mixer.music.play(-1) running = True is_pause = False switch_image = False delay = 60 score = 0 font = pygame.font.SysFont("arial", 16) enemies = pygame.sprite.Group() add_enemies(SmallEnemy(bg_size), enemies, 6) add_enemies(MidEnemy(bg_size), enemies, 3) add_enemies(BigEnemy(bg_size), enemies, 1) start_time = datetime.datetime.now() bullets1 = [] bullet_num = 10 for i in range(bullet_num): bullets1.append(Bullet(hero.rect.midtop)) bullet_index = 0 me_destory_index = 0 # 英雄机爆炸图片下标 e1_destory_index = 0 # 中小型飞机爆炸图片下标 e2_destory_index = 0 # 大型飞机爆炸图片下标 while running: # 画背景 screen.blit(background, (0, 0)) score_surface = font.render(str("SCORE:%d" % score), True, (0, 0, 0)) screen.blit(score_surface, (1, 1)) clock = pygame.time.Clock() clock.tick(60) for event in pygame.event.get(): if event.type == KEYDOWN: if event.key == pygame.K_SPACE: is_pause = not is_pause if event.type == QUIT: print("exit") pygame.quit() sys.exit() if is_pause: continue if not (delay % 3): switch_image = not switch_image # 画英雄机 if hero.active: key_pressed = pygame.key.get_pressed() if key_pressed[K_UP]: hero.move_up() if key_pressed[K_DOWN]: hero.move_down() if key_pressed[K_LEFT]: hero.move_left() if key_pressed[K_RIGHT]: hero.move_right() if switch_image: screen.blit(hero.image_one, hero.rect) else: screen.blit(hero.image_two, hero.rect) # 发射子弹 if not (delay % 10): bullets = bullets1 bullets[bullet_index].shoot(hero.rect.midtop) bullet_sound.play() bullet_index = (bullet_index + 1) % bullet_num for b in bullets: if b.active: b.move() screen.blit(b.image, b.rect) enemies_hit = pygame.sprite.spritecollide(b, enemies, False, pygame.sprite.collide_mask) if enemies_hit: b.active = False for e in enemies_hit: if e.blood <= 0: e.active = False score += e.score if isinstance(e, SmallEnemy): enemy1_down_sound.play() elif isinstance(e, MidEnemy): enemy2_down_sound.play() else: enemy3_down_sound.play() else: e.blood -= 1 # 英雄机被撞 hero_hit = pygame.sprite.spritecollide(hero, enemies, False, pygame.sprite.collide_mask) if hero_hit: hero.active = False else: screen.blit(hero.destory_images[me_destory_index], hero.rect) me_destory_index = (me_destory_index + 1) % 4 if me_destory_index == 3: screen.blit(game_over_img, (0, 0)) font = pygame.font.SysFont("arial", 35) score_surface = font.render(str("%d" % score), True, (0, 0, 255)) screen.blit(score_surface, (bg_size[0] / 2, bg_size[1] / 2)) is_pause = True # 画敌人 now = datetime.datetime.now() if not (now - start_time).seconds % 10 and now.second != start_time.second: add_enemies(SmallEnemy(bg_size), enemies, 1) start_time = now for each in enemies: if each.active: if isinstance(each, BigEnemy): each.move() if switch_image: screen.blit(each.image_one, each.rect) else: screen.blit(each.image_two, each.rect) else: each.move() screen.blit(each.image, each.rect) else: if isinstance(each, BigEnemy): screen.blit(e.destory_images[e1_destory_index], e.rect) e1_destory_index = (e1_destory_index + 1) % 6 if e1_destory_index == 0: each.reset() else: screen.blit(e.destory_images[e2_destory_index], e.rect) e2_destory_index = (e2_destory_index + 1) % 4 if e1_destory_index == 0: each.reset() pygame.display.flip() if delay == 0: delay = 60 delay -= 1
def fire(self): return Bullet(self)
def fire_bullet(ai_settings, screen, ship, bullets): if len(bullets) < ai_settings.bullets_allowed: new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
def main(): note = read.read_xml("./material/xml/2.musicxml") #time.sleep(2) music = False running = True switch_image = False delay = 60 enemies = pygame.sprite.Group() small_enemies = pygame.sprite.Group() bullet_index = 0 e1_destroy_index = 0 me_destroy_index = 0 bullet1 = [] bullet_num = 60 bullet_start = True death = 0 killed = 0 for i in range(bullet_num): bullet1.append(Bullet(our_plane.rect.midtop)) bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(our_plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num while running: #50ms per loop if music == False: pygame.mixer.music.play() music = True t = pygame.time.get_ticks() speed = get_enemy(note, t, bg_size, small_enemies, enemies) key_pressed = pygame.key.get_pressed() screen.blit(background, (0, 0)) clock = pygame.time.Clock() clock.tick(60) if not delay % 3: switch_image = not switch_image si = 0 if len(speed) == 0: for i in range(len(small_enemies)): speed.append(random.randint(15, 30)) for each in small_enemies: #print(len(small_enemies),len(speed),si) if each.active: if si >= len(speed): each.move(speed[len(speed) - 1]) else: each.move(speed[si]) screen.blit(each.image, each.rect) ''' pygame.draw.line(screen, color_black, (each.rect.left, each.rect.top - 5), (each.rect.right, each.rect.top - 5), 2) energy_remain = each.energy / SmallEnemy.energy if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line(screen, energy_color, (each.rect.left, each.rect.top - 5), (each.rect.left + each.rect.width * energy_remain, each.rect.top - 5), 2) ''' else: if e1_destroy_index == 0: enemy1_down_sound.play() screen.blit(each.destroy_images[e1_destroy_index], each.rect) e1_destroy_index = (e1_destroy_index + 1) % 4 if e1_destroy_index == 0: each.reset() small_enemies.remove(each) enemies.remove(each) si += 1 if our_plane.active: if switch_image: screen.blit(our_plane.image_one, our_plane.rect) else: screen.blit(our_plane.image_two, our_plane.rect) else: if not (delay % 3): screen.blit(our_plane.destroy_images[me_destroy_index], our_plane.rect) me_destroy_index = (me_destroy_index + 1) % 4 if me_destroy_index == 0: me_down_sound.play() our_plane.reset() death += 1 if not (delay % 3): bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(our_plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num bullet_start = False for b in bullets: if b.active: b.move() screen.blit(b.image, b.rect) enemies_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask) if enemies_hit: b.active = False for e in enemies_hit: e.active = False killed += 1 if killed == 5: killed -= 5 death -= 1 enemies_down = pygame.sprite.spritecollide(our_plane, enemies, True, pygame.sprite.collide_mask) if enemies_down: our_plane.active = False for row in enemies: row.active = False for event in pygame.event.get(): if event.type == 12: pygame.quit() sys.exit() if delay == 0: delay = 60 delay -= 1 if key_pressed[K_w] or key_pressed[K_UP]: our_plane.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: our_plane.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: our_plane.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: our_plane.move_right() draw_death = pygame.font.SysFont("华文宋体", 50) if death >= 0: draw_death_fmt = draw_death.render( "Death count:" + str(death), 1, (225, 225, 225)) #Misaka #17032 get 3 death for best else: draw_death_fmt = draw_death.render( str(0 - death) + " Extra life!", 1, (225, 225, 225)) screen.blit(draw_death_fmt, (10, 10)) if t > 188000: pygame.quit() sys.exit() pygame.display.flip()
def fire(self): self.bullets.append(Bullet(self, self.pivot, self.turret.angle))
def main(): # initialize music with infinite loop pygame.mixer.music.play(-1) running = True switch_image = False delay = 60 # initialize sprite group of enemy plane enemies = pygame.sprite.Group() small_enemies = pygame.sprite.Group() # generate 6 enemy plane at each time add_small_enemies(small_enemies, enemies, 6) bullet_index = 0 e1_destroy_index = 0 me_destroy_index = 0 # initialize bullets bullet1 = [] bullet_num = 6 for i in range(bullet_num): bullet1.append(Bullet(our_plane.rect.midtop)) while running: # draw backgroud screen.blit(background, (0, 0)) # switch between two images clock = pygame.time.Clock() clock.tick(60) if not delay % 3: switch_image = not switch_image for each in small_enemies: # case where enemy plane is alive if each.active: each.move() screen.blit(each.image, each.rect) pygame.draw.line(screen, color_black, (each.rect.left, each.rect.top - 5), (each.rect.right, each.rect.top - 5), 2) energy_remain = each.energy / SmallEnemy.energy if energy_remain > 0.2: energy_color = color_green else: energy_color = color_red pygame.draw.line( screen, energy_color, (each.rect.left, each.rect.top - 5), (each.rect.left + each.rect.width * energy_remain, each.rect.top - 5), 2) # case where enemy plane is hit by bullet else: if e1_destroy_index == 0: enemy1_down_sound.play() screen.blit(each.destroy_images[e1_destroy_index], each.rect) e1_destroy_index = (e1_destroy_index + 1) % 4 if e1_destroy_index == 0: each.reset() # case our plane alive and keep making bullet if our_plane.active: if switch_image: screen.blit(our_plane.image_one, our_plane.rect) else: screen.blit(our_plane.image_two, our_plane.rect) # Fire bullet every 10 frames if not (delay % 10): bullet_sound.play() bullets = bullet1 bullets[bullet_index].reset(our_plane.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num for b in bullets: if b.active: b.move() screen.blit(b.image, b.rect) # check if bullet hit enemy enemies_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask) # if the bullet hit the enemy, both of the bullet and enemy plane disappear if enemies_hit: b.active = False for e in enemies_hit: e.active = False # case where enemy hits us else: if not (delay % 3): screen.blit(our_plane.destroy_images[me_destroy_index], our_plane.rect) me_destroy_index = (me_destroy_index + 1) % 4 if me_destroy_index == 0: me_down_sound.play() our_plane.reset() # updating the information if enemy hits us # plane.active and enemy.active will be False enemies_down = pygame.sprite.spritecollide(our_plane, enemies, False, pygame.sprite.collide_mask) if enemies_down: our_plane.active = False for e in enemies: e.active = False # Quit game operation by press ESC for event in pygame.event.get(): if event.type == 12: pygame.quit() sys.exit() if delay == 0: delay = 60 delay -= 1 # gain key pressed from user keyboard key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: our_plane.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: our_plane.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: our_plane.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: our_plane.move_right() # Update the full display Surface to the screen pygame.display.flip()