def main(): pygame.mixer.music.play(-1) clock = pygame.time.Clock() running = True # 我方飞机 aircraft = AirCraft(bg_size) score = 0 score_font = pygame.font.Font('font/font.ttf', 36) # 暂停游戏 pause = False pause_nor_image = pygame.image.load('images/pause_nor.png').convert_alpha() pause_pressed_image = pygame.image.load( 'images/pause_pressed.png').convert_alpha() resume_nor_image = pygame.image.load( 'images/resume_nor.png').convert_alpha() resume_pressed_image = pygame.image.load( 'images/resume_pressed.png').convert_alpha() pause_rect = pause_nor_image.get_rect() pause_rect.left, pause_rect.top = width - pause_rect.width - 10, 10 pause_image = pause_nor_image # game over game_over_image = pygame.image.load('images/gameover.png').convert_alpha() game_again_image = pygame.image.load('images/again.png').convert_alpha() game_over_rect = game_over_image.get_rect() game_over_rect.left, game_over_rect.top = ( int(width / 2 - game_over_image.get_rect().width / 2), int(height / 2 - game_over_image.get_rect().height / 2)) game_again_rect = game_again_image.get_rect() game_again_rect.left, game_again_rect.top = ( int(width / 2 - game_again_image.get_rect().width / 2), int(height / 2 + game_again_image.get_rect().height)) # 难度级别 level = 1 # 全屏炸弹 bomb_image = pygame.image.load('images/bomb.png').convert_alpha() bomb_rect = bomb_image.get_rect() bomb_rect.left, bomb_rect.top = 10, height - bomb_rect.height - 10 bomb_font = pygame.font.Font('font/font.ttf', 36) bomb_num = 3 # 我方飞机剩余血量 live_font = pygame.font.Font('font/font.ttf', 24) # 生成敌方飞机 enemies = pygame.sprite.Group() small_enemies = pygame.sprite.Group() add_small_enemies(small_enemies, enemies, 15) moderate_enemies = pygame.sprite.Group() add_moderate_enemies(moderate_enemies, enemies, 1) large_enemies = pygame.sprite.Group() add_large_enemies(large_enemies, enemies, 3) # 普通子弹 bullets = [] bullet_num = 4 bullet_index = 0 for i in range(bullet_num): bullets.append(Bullet('images/bullet1.png', aircraft.rect.midtop)) super_bullets = [] super_bullet_num = 8 super_bullet_index = 0 for i in range(super_bullet_num // 2): super_bullets.append( Bullet('images/bullet2.png', (aircraft.rect.centerx - 33, aircraft.rect.centery))) super_bullets.append( Bullet('images/bullet2.png', (aircraft.rect.centerx + 30, aircraft.rect.centery))) # 超级子弹定时器 只能使用指定时间 super_bullet_time = USEREVENT + 1 use_super_bullet = False # 重生无敌计时器 invincible_time = USEREVENT + 2 # 中弹图片索引 e1_destroy_index = 0 e2_destroy_index = 0 e3_destroy_index = 0 aircraft_destroy_index = 0 # 切换图片延迟参数 delay = 100 # provide a supply every 30 seconds bomb_supply = BombSupply(bg_size, 'images/bomb_supply.png') bullet_supply = BulletSupply(bg_size, 'images/bullet_supply.png') supply_time = USEREVENT pygame.time.set_timer(supply_time, 20 * 1000) while running: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == MOUSEBUTTONDOWN: if event.button == 1: if pause_rect.collidepoint(event.pos): pause = not pause if pause: pygame.time.set_timer(supply_time, 0) pygame.mixer.music.pause() pygame.mixer.pause() else: pygame.time.set_timer(supply_time, 20 * 1000) pygame.mixer.music.unpause() pygame.mixer.unpause() elif game_over_rect.collidepoint(event.pos): pygame.quit() sys.exit() elif game_again_rect.collidepoint(event.pos): aircraft.reborn() pygame.mixer.music.unpause() pygame.mixer.unpause() elif event.type == KEYDOWN: if event.key == K_SPACE: # 全屏炸弹 if bomb_num: bomb_num -= 1 bomb_sound.play() for each in enemies: if each.rect.bottom > 0: each.alive = False elif event.type == MOUSEMOTION: if pause_rect.collidepoint(event.pos): if pause: pause_image = resume_pressed_image else: pause_image = pause_pressed_image else: if pause: pause_image = resume_nor_image else: pause_image = pause_nor_image elif event.type == supply_time: # either bomb supply or bullet supply. if choice((True, False)): bomb_supply.active = True else: bullet_supply.active = True supply_sound.play() elif event.type == super_bullet_time: use_super_bullet = False pygame.time.set_timer(super_bullet_time, 0) elif event.type == invincible_time: aircraft.invincible = False pygame.time.set_timer(invincible_time, 0) level = upgrade_level(level, score, small_enemies, moderate_enemies, large_enemies, enemies) screen.blit(background, (0, 0)) if aircraft.lives > 0: if not pause: # 检测用户的键盘操作 key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: aircraft.move_up() elif key_pressed[K_s] or key_pressed[K_DOWN]: aircraft.move_down() elif key_pressed[K_a] or key_pressed[K_LEFT]: aircraft.move_left() elif key_pressed[K_d] or key_pressed[K_RIGHT]: aircraft.move_right() # shot if not (delay % 10): bullet_sound.play() if use_super_bullet: super_bullets[super_bullet_index].reset( (aircraft.rect.centerx - 33, aircraft.rect.centery)) super_bullets[super_bullet_index + 1].reset( (aircraft.rect.centerx + 30, aircraft.rect.centery)) super_bullet_index = (super_bullet_index + 2) % super_bullet_num else: bullets[bullet_index].reset(aircraft.rect.midtop) bullet_index = (bullet_index + 1) % bullet_num # paint the bullets if use_super_bullet: for bullet in super_bullets: if bullet.active: bullet.move() screen.blit(bullet.image, bullet.rect) hit_enemies = pygame.sprite.spritecollide( bullet, enemies, False, pygame.sprite.collide_mask) if hit_enemies: bullet.active = False for enemy in hit_enemies: enemy.lives -= 1 enemy.hit = True if enemy.lives == 0: enemy.alive = False else: for bullet in bullets: if bullet.active: bullet.move() screen.blit(bullet.image, bullet.rect) hit_enemies = pygame.sprite.spritecollide( bullet, enemies, False, pygame.sprite.collide_mask) if hit_enemies: bullet.active = False for enemy in hit_enemies: enemy.lives -= 1 enemy.hit = True if enemy.lives == 0: enemy.alive = False # paint large enemies for each in large_enemies: if each.alive: each.move() if each.hit: screen.blit(each.hit_image, each.rect) each.hit = False else: if not delay % 5: screen.blit(each.image, each.rect) else: screen.blit(each.other_image, each.rect) paint_health_line(each, LargeEnemy.lives) if -10 <= each.rect.bottom <= height: enemy3_fly_sound.play(-1) else: enemy3_fly_sound.stop() else: # 毁灭 if not (delay % 3): if e3_destroy_index == 0: enemy3_down_sound.play() screen.blit(each.destroy_images[e3_destroy_index], each.rect) e3_destroy_index = (e3_destroy_index + 1) % len( each.destroy_images) if e3_destroy_index == 0: score += 10000 enemy3_fly_sound.stop() each.reset() # paint moderate enemies for each in moderate_enemies: if each.alive: each.move() if each.hit: screen.blit(each.hit_image, each.rect) each.hit = False else: screen.blit(each.image, each.rect) # 绘制血槽 paint_health_line(each, ModerateEnemy.lives) else: if not (delay % 3): if e2_destroy_index == 0: enemy2_down_sound.play() screen.blit(each.destroy_images[e2_destroy_index], each.rect) e2_destroy_index = (e2_destroy_index + 1) % len( each.destroy_images) if e2_destroy_index == 0: score += 6000 each.reset() # paint small enemies for each in small_enemies: if each.alive: each.move() screen.blit(each.image, each.rect) else: if not (delay % 3): 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) % len( each.destroy_images) if e1_destroy_index == 0: score += 1000 each.reset() # check if the aircraft was collided by any enemy enemies_down = pygame.sprite.spritecollide( aircraft, enemies, False, pygame.sprite.collide_mask) if enemies_down and not aircraft.invincible: aircraft.alive = False for enemy in enemies_down: enemy.alive = False # 绘制我方飞机 if aircraft.alive: if not (delay % 5): screen.blit(aircraft.image1, aircraft.rect) else: screen.blit(aircraft.image2, aircraft.rect) else: if not (delay % 5): if aircraft_destroy_index == 0: me_down_sound.play() screen.blit( aircraft.destroy_images[aircraft_destroy_index], aircraft.rect) aircraft_destroy_index = (aircraft_destroy_index + 1) % len( aircraft.destroy_images) if aircraft_destroy_index == 0: aircraft.lives -= 1 aircraft.reset() # 重生后给我方飞机3秒钟的无敌 pygame.time.set_timer(invincible_time, 3 * 1000) # 绘制补给 if bomb_supply.active: bomb_supply.move() screen.blit(bomb_supply.image, bomb_supply.rect) if pygame.sprite.collide_mask(bomb_supply, aircraft): get_bomb_sound.play() if bomb_num < 3: bomb_num += 1 bomb_supply.reset() if bullet_supply.active: bullet_supply.move() screen.blit(bullet_supply.image, bullet_supply.rect) if pygame.sprite.collide_mask(bullet_supply, aircraft): get_bullet_sound.play() use_super_bullet = True pygame.time.set_timer(super_bullet_time, 5 * 1000) bullet_supply.reset() # 绘制全屏炸弹 screen.blit(bomb_image, bomb_rect) bomb_text = bomb_font.render('×%d' % bomb_num, True, WHITE) screen.blit(bomb_text, (10 + bomb_rect.right, bomb_rect.top + 5)) # 绘制我方飞机生命 if aircraft.lives: screen.blit( aircraft.life_image, (width - aircraft.life_image.get_rect().width - 30, height - 10 - aircraft.life_image.get_rect().height)) live_text = live_font.render('×%d' % aircraft.lives, True, WHITE) screen.blit(live_text, (width - 30, height - aircraft.life_image.get_rect().height)) # 每次递减1,到0回到100 delay -= 1 if not delay: delay = 100 # 绘制暂停键 screen.blit(pause_image, pause_rect) else: # game over screen.blit(game_over_image, game_over_rect) screen.blit(game_again_image, game_again_rect) pygame.mixer.music.pause() pygame.mixer.pause() # 绘制得分 score_text = score_font.render('Score : %s' % str(score), True, WHITE) screen.blit(score_text, (10, 5)) pygame.display.flip() # 限定最大帧率60帧 clock.tick(60)
def game_screen(screen): g = 1 contador = 0 clock = pygame.time.Clock() # Carrega o fundo do jogo background = pygame.image.load(path.join('Fundo4.jpg')).convert() x = 0 vx = 0 #Cria pontuação score = 0 chakra = 150 #assets = load_assets(img_dir, snd_dir, fnt_dir) #score_font = assets["score_font"] dir = path.dirname(__file__) with open(path.join(dir, HS_FILE), 'w') as f: try: highscore = int(f.read()) except: highscore = 0 # Carrega os sons do jogo pygame.mixer.music.load(path.join(snd_dir, 'naruto.mp3')) pygame.mixer.music.set_volume(0.4) boom_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl3.wav')) destroy_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl6.wav')) pew_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav')) player = Player() # Cria um grupo só do inimigo monsters = pygame.sprite.Group() # Cria um grupo de todos os sprites e adiciona a nave. all_sprites = pygame.sprite.Group() all_sprites.add(player) power = pygame.sprite.Group() bullets = pygame.sprite.Group() pygame.mixer.music.play(loops=-1) PLAYING = 0 state = PLAYING DONE = 2 running=True ## Primeiro while while state != DONE and score < 500 and running: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,75) == 1: mob1 = Mob2() all_sprites.add(mob1) monsters.add(mob1) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.speedx = -4 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Left{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: player.speedx = 4 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP and player.rect.y == HEIGHT/2 - 45.5:#pulo player.speedy = -20 if event.key == pygame.K_SPACE and chakra >= 10: chakra -= 10 player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Punch{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m and chakra >= 50: chakra -= 50 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "R{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) ras = Rasengan(player.rect.centerx, player.rect.top) all_sprites.add(ras) bullets.add(ras) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: player.speedx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: player.speedx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_SPACE: player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy += g # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um # O meteoro e destruido e precisa ser recriado destroy_sound.play() contador += 1 score += 50 #m = Mob() #all_sprites.add(m) #monsters.add(m) # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) for hit in hits: # Toca o som da colisão boom_sound.play() hit.kill() player.morrer() running = player.vidas >= 0 chakra += 0.5 if chakra > 149.5: chakra =150 elif chakra < 0.5: chakra = 0 vx = -8 - (score/1000) print (vx) x += vx # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) all_sprites.draw(screen) #pontuação draw_text(screen, str(score), 35, WIDTH/2, 0) draw_text(screen, "Score", 40, WIDTH/2-150, 0) #chakra draw_text(screen, str(chakra), 35, WIDTH/2+400, 0) draw_text(screen, "Chakra", 40, WIDTH/2+200, 0) #Vida draw_text(screen, str(player.vidas), 35, WIDTH/2-350, 0) draw_text(screen, "Vida", 40, WIDTH/2-450, 0) # Depois de desenhar tudo, inverte o display. pygame.display.flip() ##Segundo while while state != DONE and score >= 500 and running: # Ajusta a velocidade do jogo. clock.tick(FPS) if score >= 500: if random.randrange(1,300) == 1: deid = Deidara() all_sprites.add(deid) monsters.add(deid) bird = Bird() all_sprites.add(bird) monsters.add(bird) if score >= 1000: if random.randrange(1,300) == 1: mob4 = Mob4() am = Amaterasu() all_sprites.add(am) all_sprites.add(mob4) monsters.add(am) monsters.add(mob4) if score >= 500: if random.randrange(1,200) == 1: tobi = Mob3() all_sprites.add(tobi) monsters.add(tobi) if random.randrange(1,500) == 1: madara = Golpetras() all_sprites.add(madara) monsters.add(madara) if score >= 1300: if random.randrange(1,400) == 1: sas = Sasori() all_sprites.add(sas) monsters.add(sas) if score >= 2000: if random.randrange(1,500) == 1: ki = Kisame() all_sprites.add(ki) monsters.add(ki) wa = Water() all_sprites.add(wa) monsters.add(wa) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.speedx = -4 player.imgs = [] n=2 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Dash{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: player.speedx = 4 player.imgs = [] n=2 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Dash{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 3 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP and player.rect.y == HEIGHT/2 - 45.5:#pulo player.speedy = -20 g = 1 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Jump{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 8 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_SPACE and chakra>=20: chakra-=20 n=10 bullet = Nrpower(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m and chakra >= 25: chakra -= 300 player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "NrP{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) powe = Nrm(player.rect.centerx, player.rect.top) all_sprites.add(powe) power.add(powe) pew_sound.play() if event.key == pygame.K_n and chakra >= 25: chakra -= 25 player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "NrP{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) clone = Clone(player.rect.centerx, player.rect.top) all_sprites.add(clone) bullets.add(clone) pew_sound.play() if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_SPACE: player.imgs = [] chakra -= 25 n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 chakra -= 25 n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_n: player.imgs = [] player.steps = 5 chakra -= 25 n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5: player.speedy +=g hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: destroy_sound.play() contador += 1 score += 100 hits = pygame.sprite.groupcollide(monsters, power, True, False) for hit in hits: destroy_sound.play() contador += 1 score += 100 hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) for hit in hits: boom_sound.play() hit.kill() player.morrer() running = player.vidas >= 0 chakra += 1 if chakra > 399.5: chakra =400 elif chakra < 0.5: chakra = 0 vx = -8 - (score/1000) x += vx # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) all_sprites.draw(screen) # Desenha o score vidas = player.vidas #pontuação draw_text(screen, str(score), 35, WIDTH/2, 0) draw_text(screen, "Score", 40, WIDTH/2-150, 0) #chakra draw_text(screen, str(chakra), 35, WIDTH/2+400, 0) draw_text(screen, "Chakra", 40, WIDTH/2+200, 0) #Vida draw_text(screen, str(vidas), 35, WIDTH/2-350, 0) draw_text(screen, "Vida", 40, WIDTH/2-450, 0) # Depois de desenhar tudo, inverte o display. pygame.display.flip() if score > highscore: highscore=score return (OVER, score, highscore)
def __init__(self, parent=None): QGraphicsScene.__init__(self, parent) # hold the set of keys we're pressing self.keys_pressed = set() # use a timer to get 60Hz refresh (hopefully) 1000 / 16 == 62.5 self.timer = QBasicTimer() self.timer.start(FRAME_TIME_MS, self) # bg = QGraphicsRectItem() # bg.setRect(-1,-1,SCREEN_WIDTH+2,SCREEN_HEIGHT+2) # bg.setBrush(QBrush(Qt.black)) # BackGround self.bg = BackGround() self.addItem(self.bg) # Stage self.stage = Stage() self.addItem(self.stage) # Player self.player = Player() self.player.setPos((SCREEN_WIDTH - self.player.pixmap().width()) / 2, (SCREEN_HEIGHT - self.player.pixmap().height()) / 2) self.addItem(self.player) # Player Life self.playerIcon = PlayerIcon() self.xIcon = XIcon() self.life = Life() self.playerIcon.setPos(20, 20) self.xIcon.setPos(60, 25) self.life.setPos(83, 24) self.addItem(self.playerIcon) self.addItem(self.xIcon) self.addItem(self.life) # Bullets self.bullets = [ Bullet(PLAYER_BULLET_X_OFFSETS[0], PLAYER_BULLET_Y), Bullet(PLAYER_BULLET_X_OFFSETS[1], PLAYER_BULLET_Y - 30), Bullet(PLAYER_BULLET_X_OFFSETS[2], PLAYER_BULLET_Y) ] for b in self.bullets: b.setPos(SCREEN_WIDTH, SCREEN_HEIGHT) self.addItem(b) # Enemies self.enemies = [Enemy()] self.enemies[0].setPos(SCREEN_WIDTH, 0) self.addItem(self.enemies[0]) self.idx = [0] # Execution Point self.EXP = EXP() self.EXP.score = 8 self.EXP.setPos(SCREEN_WIDTH - 40, 20) self.addItem(self.EXP) self.EXP1 = EXP() self.EXP1.score = 1 self.EXP1.setPos(SCREEN_WIDTH - 60, 20) self.addItem(self.EXP1) self.view = QGraphicsView(self) self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.view.show() self.view.setFixedSize(SCREEN_WIDTH, SCREEN_HEIGHT) self.setSceneRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) self.ask = AskClose(self)
def generate_bullet(self): self.test_bullet = Bullet("images/bullet.png", 1.0, 600, 70, -20) self.bullet_list.append(self.test_bullet) self.all_sprite_list.append(self.test_bullet)
def spawn_enemies(): for i in range(10): enemies.append(Enemy(100 + i * 100, 100)) for i in range(10): enemies.append(Enemy(100 + i * 100, 300)) def spawn_boss(): enemies.append(Enemy(600, 200)) # entities initialization player = Player() bullet = Bullet(player.x, player.y) enemies = [] spawn_enemies() # the main game loop while running: screen.fill((255, 255, 255)) screen.blit(background, (0, 0)) clock.tick(60) player.set_cooldown() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_TAB:
def fire(self): self.bullet_list.append(Bullet(self.screen, self.x, self.y))
player_img = pygame.image.load('spaceship.png') playerX = 500 # x position playerY = 500 # y position player1 = Npc(playerImg=player_img) player_valx = 0 player_valy = 0 enemy_img = pygame.image.load('ufo.png') enemy = Npc(playerImg=enemy_img) enemyX = 500 enemyY = 50 enemy_valx = 0.3 enemy_valy = 30 bullet_img = pygame.image.load('bullet.png') bullet = Bullet(Img=bullet_img) # bullet2 = Bullet(Img= bullet_img) bulletX = 500 bulletY = 500 bullet_valx = 0 bullet_valy = 0.2 def isCollision(enemyX, enemyY, bulletX, bulletY): distance = math.sqrt((math.pow(enemyX - bulletX, 2)) + (math.pow(enemyY - bulletY, 2))) if distance < 27: return True else: return False
def fire(self): self.bullets.append(Bullet(self.screen, self)) print(self.bullets)
def main(): # 设置偏移方向 offset_x = offset_y = 0 #英雄移动的速度 # HERO_SPEED = 6 ticks = 0 hero = Hero(hero_surface, hero_position) #声明一个精灵组 用来存放子弹 bullet_group = pygame.sprite.Group() #声明一个精灵组 用来存放敌机 enemy_group = pygame.sprite.Group() #声明一个精灵组 用来存放销毁的敌机 enemy_down_group = pygame.sprite.Group() #分数初始化 score = 0 #一般的游戏逻辑里都会有while True while True: # 绘制背景 screen.blit(surface_img, [0, 0]) # 绘制我方 考虑到切换状态 把频率降低 if ticks % 40 < 20: # 实例化英雄 hero = Hero(hero_surface, hero.rect) else: hero = Hero(hero_surface1, hero.rect) screen.blit(hero.image, hero.rect) ticks += 1 # 绘制子弹 if ticks % 15 == 0: bullet = Bullet(bullet_surface, [hero.rect.x+hero.rect.width//2,hero.rect.y]) bullet_group.add(bullet) bullet_group.update() bullet_group.draw(screen) #绘制敌机 if ticks % 70 == 0: enemy_position = [randint(0,SCREEN_WIDTH - enemy_rect.width),-enemy_rect.height] enemy = Enemy(enemy_surface, enemy_position) enemy_group.add(enemy) enemy_group.update() enemy_group.draw(screen) # #子弹和敌机碰撞检测 # enemy_down_group.add(pygame.sprite.groupcollide(enemy_group,bullet_group,True,True)) # #如果考虑敌机爆炸的效果 # for enemy_down in enemy_down_group: # pass # #动态切换图片 动态改变图片的索引 用计数器来让效果慢下来 enemy_down_res = pygame.sprite.groupcollide(enemy_group,bullet_group,True,True) #如果有碰撞 分值加1 if len(enemy_down_res) > 0: score += 1 #我方和敌机碰撞检测 hero_down_res = pygame.sprite.spritecollide(hero,enemy_group,True) if len(hero_down_res) > 0: #游戏结束 break # print(enemy_down_group) #记录分数 score_font = pygame.font.SysFont(None,40) score_surface = score_font.render('Score:'+str(score),1,(128,128,128)) screen.blit(score_surface, [10,10]) #获取pygame触发的事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() #获取键盘事件 if event.type == pygame.KEYDOWN: if event.key == pygame.K_a or event.key == pygame.K_LEFT: offset_x = -1 if event.key == pygame.K_d or event.key == pygame.K_RIGHT: offset_x = 1 if event.key == pygame.K_w or event.key == pygame.K_UP: offset_y = -1 if event.key == pygame.K_s or event.key == pygame.K_DOWN: offset_y = 1 if event.type == pygame.KEYUP: offset_x = offset_y = 0 hero.move(offset_x,offset_y) pygame.display.update() # 如果代码能走到这一步 表示gameover screen.blit(gameover_surface, [0, 0]) # 重新开始 screen.blit(game_over_surface, [SCREEN_WIDTH / 2 - game_over_surface.get_width() / 2, SCREEN_HEIGHT / 2 - game_over_surface.get_height() / 2 + 50]) pygame.display.update()
def fire_bullet(ai_settings, screen, ship, bullets): if len(bullets) < ai_settings.bullet_allowed: new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
def launch_bullet(self, target): bullets_count = 3 bullets_speed = 5 if self.power == 1: bullets_speed = 6 bullets_count = 6 elif self.power == 2: bullets_speed = 7 bullets_count = 9 elif self.power > 2: bullets_speed = 8 bullets_count = 12 if self.power == 4: bullets_count = 18 elif self.power == 5: bullets_speed = 7 bullets_count = 24 elif self.power > 5: bullets_speed = 8 bullets_count = 34 b_count = len(gl.bullet_group.sprites()) if b_count < bullets_count: target.szd1.stop() target.szd1.play(0, 0, 0) bullet = Bullet((gl.all_group, gl.bullet_group), target, self) bullet.rect.x = self.rect.x + 20 bullet.rect.y = self.rect.y bullet.speed[1] = -bullets_speed if b_count < bullets_count: target.szd2.stop() target.szd2.play(0, 0, 0) bullet1 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet1.rect.x = self.rect.x + 35 bullet1.rect.y = self.rect.y bullet1.speed[1] = -bullets_speed if b_count < bullets_count: target.szd3.stop() target.szd3.play(0, 0, 0) bullet2 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet2.rect.x = self.rect.x + 5 bullet2.rect.y = self.rect.y bullet2.speed[1] = -bullets_speed if self.power > 2: if b_count < bullets_count: target.szd1.stop() target.szd1.play(0, 0, 0) bullet3 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet3.rect.x = self.rect.x + 50 bullet3.rect.y = self.rect.y bullet3.speed[1] = -bullets_speed if b_count < bullets_count: target.szd1.stop() target.szd1.play(0, 0, 0) bullet4 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet4.rect.x = self.rect.x - 10 bullet4.rect.y = self.rect.y bullet4.speed[1] = -bullets_speed if self.power > 5: if b_count < bullets_count: target.szd1.stop() target.szd1.play(0, 0, 0) bullet5 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet5.rect.x = self.rect.x + 65 bullet5.rect.y = self.rect.y bullet5.speed[1] = -bullets_speed if b_count < bullets_count: target.szd1.stop() target.szd1.play(0, 0, 0) bullet6 = Bullet((gl.all_group, gl.bullet_group), target, self) bullet6.rect.x = self.rect.x - 25 bullet6.rect.y = self.rect.y bullet6.speed[1] = -bullets_speed
def fire_bullet(self): if len(self.bullets) < self.setting.bullets_allowed: new = Bullet(self) self.bullets.add(new)
def shoot(self, all_group): bullet = Bullet(self.rect.x, self.rect.y, self.direction) self.bullet_list.append(bullet) all_group.add(bullet) return all_group
def fire(self): # TBF: start from tip of RocketBody return Bullet('bullet', self.x, self.y, self.rotTheta)
def __shoot(self): self.__is_shooting = True self.__shootEffect.play(self.__gunOffset + self._position) self.__bulletList.append( Bullet.Bullet(self.__shootEffect._position + self.__bulletOffset)) self.__changeAnimation(self.__shoot_anim)
def deserializeBullet(bullet): retbullet = Bullet(bullet['location'], bullet['bounds'], bullet['direction'], bullet['velocity']) retbullet.id = bullet['id'] return retbullet
def shoot(self, command=""): return [Bullet(self.rect.center, self.facing, 10)] self.bullet += 1
def shot(self): #화살생성함수 bullet = Bullet(self.screen, self.top + 50, self.left + 75, 20) #speed가 30인 화살 생성 self.bullets.append(bullet) #list에 arrow객체 추가
def keyDown(self): if key == 'f' or key == 'F': SpriteManager.spawn( Bullet(self.x, self.y, PVector(0, -10), self.team))
from Magnet import Magnet from Speedup import Speedup from os import system from time import sleep import termios import sys import select import tty sc = Gamescreen() bg = Background() u = User() c = Coin() bl = Bullet() while sc.get_trip() < 2: b = [] m = None sp = None sc.init_field() sc.init_trash() sc.set_nxt(0) sc.set_timer(0) sc.set_no(0) sc.set_m_no(0) sc.set_s_no(0)
if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n = 5 for i in range(n): player.imgs.append( pygame.image.load( path.join("Punch{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1, 1)) bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join("R{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1, 1)) ras = Rasengan(player.rect.centerx, player.rect.top)
def shoot(self): bullet = Bullet(self.win, self.rect.centerx, self.rect.top, self.bullet_image, self.shoot_sound) self.bullets.add(bullet)
def fire(self, vector): if millis() - self.mark > self.wait: SpriteManager.spawn(Bullet(self.x, self.y, vector, self.team)) self.mark = millis()
def create_bullet(self): bullet = Bullet(self.get_pos_x(), self.get_pos_y()) bullet.set_pos_x(self.get_pos_x() + bullet.get_size() // 2 - 7.5) bullet.set_pos_y(self.get_pos_y() - 30) self.get_bullets().append(bullet)
def Fire(self, x, y, width): if self.isAlive: self.Shoot = True self.sprites_plane = LoadSprites('Plane/Shoot') self.bullets.append(Bullet(x + (self.plane.get_size()[0] - 55), y + (self.plane.get_size()[1] - 55), width, self.screen))
def main_function(): running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False Globals.game_cycle = False if event.type == pygame.MOUSEBUTTONDOWN and not Globals.pause: if event.button == 1 and len(Globals.player_bullets) < 6: Bullet(bow.rect.center, bow.angle, 'player_bullet.png') if Globals.object_appearance: certain.transparency -= 5 if certain.transparency <= 0: Globals.pause = False Globals.object_appearance = False certain.transparency = 0 certain.image.set_alpha(certain.transparency) Globals.all_sprites.draw(screen) Globals.certain.draw(screen) if pygame.key.get_pressed(): keys = pygame.key.get_pressed() if keys[pygame.K_ESCAPE] and not Globals.object_appearance: Menu('Продолжить игру') if keys[pygame.K_a]: player.speed_x = -player.max_speed_x elif keys[pygame.K_d]: player.speed_x = player.max_speed_x if keys[pygame. K_SPACE] and not player.jumping and not player.falling: player.jumping = True if not Globals.pause: player.update() Globals.enemies.update(player) bow.update(player.rect.center) Globals.player_bullets.update() Globals.enemy_bullets.update() Globals.health_bars.update(player) bullet_physics(player) player.speed_x = 0 screen.fill((0, 0, 0)) clock.tick(Globals.FPS) Globals.all_sprites.draw(screen) Globals.health_bars.draw(screen) Globals.player_group.draw(screen) Globals.certain.draw(screen) pygame.display.flip() if pygame.sprite.spritecollideany(player, Globals.level_door) and \ not Globals.enemies_hit_boxes and not Globals.pause: Globals.level_crossing = True Globals.pause = True Globals.level_count += 1 if Globals.level_count == 5: Globals.level_count = 0 Globals.stage_count += 1 print(Globals.stage_count) if player.health < 100: player.health = 300 Globals.health_bars.update(player) else: choice = randrange(0, 5) if not choice: player.sphere_defence += 1 else: player.damage += randrange(7, 17) if Globals.level_crossing: certain.transparency += 5 certain.image.set_alpha(certain.transparency) if certain.transparency == 255: for sprite in Globals.all_sprites: if sprite == player: player.rect.x, player.rect.y = 50, 540 elif sprite == bow: bow.update(player.rect.center) elif sprite == certain: pass else: Globals.all_sprites.remove(sprite) Globals.tiles = pygame.sprite.Group() Globals.level_door = pygame.sprite.Group() Globals.player_bullets = pygame.sprite.Group() Globals.enemy_bullets = pygame.sprite.Group() running = False Globals.level_crossing = False Globals.object_appearance = True
def fire_bullets(event, ai_settings, screen, ship, bullets): #Limit the number of bullets if len(bullets) < ai_settings.bullets_allowed: #Create a new bullet and add it to the bullets group new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
def fire_bullet(ai_settings, screen, ship, bullets): """如果还没有达到限制,就发射一颗子弹""" if len(bullets) < ai_settings.bullet_allowed: #创建一颗子弹,并将其加入到编组bullets中 new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet)
def run(self): while self.running: self.screen.fill((255, 255, 255)) self.screen.blit(self.background, (0, 0)) """ This if block checks: -If the user clicks Start at the intro,it will create the stone objects -If the user clicks Quit,it will quit the game basicly. """ if (self.intro_checker == 0): self.start = self.game_intro() if self.start == 1: self.intro_checker = 1 # No of enemies self.game_level = 0 self.numberOfEnemies = self.game_level_checker() elif self.start == 0: self.intro_checker = 0 self.running = False else: continue # If you clicked Start already,then it means we can get to our gameplay. if self.start == 1 and self.intro_checker == 1: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: self.running = False if event.key == pygame.K_UP: self.player.playerY_change = -5 if event.key == pygame.K_DOWN: self.player.playerY_change = 5 if event.key == pygame.K_SPACE: # To make sure we don't shoot multiple bullets too fast(one by one) if len(self.noOfBullets) != 0: if self.noOfBullets[-1].bulletX - self.player.playerX < 90: break self.bullet = Bullet(self.bullet.bulletX, self.bullet.bulletY, self.bullet.bullet_state, self.bullet.bulletX_change) self.noOfBullets.append(self.bullet) self.noOfBullets[-1].bulletX = self.player.playerX self.noOfBullets[-1].bulletY = self.player.playerY self.bullet.bulletX_change = 5 self.noOfBullets[-1].fire_bullet(self.noOfBullets[-1].bulletX, self.noOfBullets[-1].bulletY, self.noOfBullets[-1].bullet_state, self.screen) if event.type == pygame.KEYUP: if event.key == pygame.K_DOWN or event.key == pygame.K_UP: self.player.playerY_change = 0 # Player Moves self.player.playerY += self.player.playerY_change # Checking Boundries to make sure we do not jump out of range if self.player.playerY <= 32: self.player.playerY = 32 elif self.player.playerY >= 536: self.player.playerY = 536 # Bullet Moves self.bullet.bullet_moves(self.noOfBullets, self.screen) # Enemy Moves self.enemy.enemy_moves(self.numberOfEnemies) # Collision between the bullet and the enemy self.bulletCollisionWithEnemy() # Level Designs self.levelDesign() # Main Collision between rocks and player self.playerCollisionWithEnemy() # Display of our stone objects. e_c3 = 0 while e_c3 < len(self.numberOfEnemies): self.numberOfEnemies[e_c3].draw_player(self.numberOfEnemies[e_c3].enemyX, self.numberOfEnemies[e_c3].enemyY, self.numberOfEnemies[e_c3].enemyImg, self.screen) e_c3 += 1 # Display of our ingame objects. self.player.draw_player(self.player.playerX, self.player.playerY, self.player.playerImg, self.screen) self.draw_score() self.level() pygame.display.update()
# enemys = [] count = 1000 bg = pygame.transform.scale(bg, (500, 800)) hx = 100 hy = 100 Bgroup = pygame.sprite.Group() Egroup = pygame.sprite.Group() hero = Hero(hx, hy, 10) while True: ticks = pygame.time.get_ticks() for event in pygame.event.get(): if event.type == pygame.QUIT: exit() if event.type == pygame.MOUSEBUTTONDOWN: # bullets.append(Bullet(hx - 2,hy - 64,(0,-5))) Bgroup.add(Bullet(hx - 2, hy - 64)) hx, hy = pygame.mouse.get_pos() screen.blit(bg, (0, 0)) for i in Bgroup: hitSpriteList = pygame.sprite.spritecollide(i, Egroup, False, pygame.sprite.collide_mask) if len(hitSpriteList) > 0: Bgroup.remove(i) try: for each in hitSpriteList: each.crash() except ValueError: pass Bgroup.update(ticks)