Python小游戏(小蜜蜂)
生活随笔
收集整理的這篇文章主要介紹了
Python小游戏(小蜜蜂)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小蜜蜂的游戲,兒時回憶哦。
源碼分享:
import os import sys import cfg import random import pygame from modules import *'''開始游戲''' def startGame(screen):clock = pygame.time.Clock()# 加載字體font = pygame.font.SysFont('arial', 18)if not os.path.isfile('score'):f = open('score', 'w')f.write('0')f.close()with open('score', 'r') as f:highest_score = int(f.read().strip())# 敵方enemies_group = pygame.sprite.Group()for i in range(55):if i < 11:enemy = enemySprite('small', i, cfg.WHITE, cfg.WHITE)elif i < 33:enemy = enemySprite('medium', i, cfg.WHITE, cfg.WHITE)else:enemy = enemySprite('large', i, cfg.WHITE, cfg.WHITE)enemy.rect.x = 85 + (i % 11) * 50enemy.rect.y = 120 + (i // 11) * 45enemies_group.add(enemy)boomed_enemies_group = pygame.sprite.Group()en_bullets_group = pygame.sprite.Group()ufo = ufoSprite(color=cfg.RED)# 我方myaircraft = aircraftSprite(color=cfg.GREEN, bullet_color=cfg.WHITE)my_bullets_group = pygame.sprite.Group()# 用于控制敵方位置更新# --移動一行enemy_move_count = 24enemy_move_interval = 24enemy_move_flag = False# --改變移動方向(改變方向的同時集體下降一次)enemy_change_direction_count = 0enemy_change_direction_interval = 60enemy_need_down = Falseenemy_move_right = Trueenemy_need_move_row = 6enemy_max_row = 5# 用于控制敵方發射子彈enemy_shot_interval = 100enemy_shot_count = 0enemy_shot_flag = False# 游戲進行中running = Trueis_win = False# 主循環while running:screen.fill(cfg.BLACK)for event in pygame.event.get():# --點右上角的X或者按Esc鍵退出游戲if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()# --射擊if event.type == pygame.MOUSEBUTTONDOWN:my_bullet = myaircraft.shot()if my_bullet:my_bullets_group.add(my_bullet)# --我方子彈與敵方/UFO碰撞檢測for enemy in enemies_group:if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None):boomed_enemies_group.add(enemy)enemies_group.remove(enemy)myaircraft.score += enemy.rewardif pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):ufo.is_dead = Truemyaircraft.score += ufo.reward# --更新并畫敵方# ----敵方子彈enemy_shot_count += 1if enemy_shot_count > enemy_shot_interval:enemy_shot_flag = Trueenemies_survive_list = [enemy.number for enemy in enemies_group]shot_number = random.choice(enemies_survive_list)enemy_shot_count = 0# ----敵方移動enemy_move_count += 1if enemy_move_count > enemy_move_interval:enemy_move_count = 0enemy_move_flag = Trueenemy_need_move_row -= 1if enemy_need_move_row == 0:enemy_need_move_row = enemy_max_rowenemy_change_direction_count += 1if enemy_change_direction_count > enemy_change_direction_interval:enemy_change_direction_count = 1enemy_move_right = not enemy_move_rightenemy_need_down = True# ----每次下降提高移動和射擊速度enemy_move_interval = max(15, enemy_move_interval-3)enemy_shot_interval = max(50, enemy_move_interval-10)# ----遍歷更新for enemy in enemies_group:if enemy_shot_flag:if enemy.number == shot_number:en_bullet = enemy.shot()en_bullets_group.add(en_bullet)if enemy_move_flag:if enemy.number in range((enemy_need_move_row-1)*11, enemy_need_move_row*11):if enemy_move_right:enemy.update('right', cfg.SCREENSIZE[1])else:enemy.update('left', cfg.SCREENSIZE[1])else:enemy.update(None, cfg.SCREENSIZE[1])if enemy_need_down:if enemy.update('down', cfg.SCREENSIZE[1]):running = Falseis_win = Falseenemy.change_count -= 1enemy.draw(screen)enemy_move_flag = Falseenemy_need_down = Falseenemy_shot_flag = False# ----敵方爆炸特效for boomed_enemy in boomed_enemies_group:if boomed_enemy.boom(screen):boomed_enemies_group.remove(boomed_enemy)del boomed_enemy# --敵方子彈與我方飛船碰撞檢測if not myaircraft.one_dead:if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):myaircraft.one_dead = Trueif myaircraft.one_dead:if myaircraft.boom(screen):myaircraft.resetBoom()myaircraft.num_life -= 1if myaircraft.num_life < 1:running = Falseis_win = Falseelse:# ----更新飛船myaircraft.update(cfg.SCREENSIZE[0])# ----畫飛船myaircraft.draw(screen)if (not ufo.has_boomed) and (ufo.is_dead):if ufo.boom(screen):ufo.has_boomed = Trueelse:# ----更新UFOufo.update(cfg.SCREENSIZE[0])# ----畫UFOufo.draw(screen)# --畫我方飛船子彈for bullet in my_bullets_group:if bullet.update():my_bullets_group.remove(bullet)del bulletelse:bullet.draw(screen)# --畫敵方子彈for bullet in en_bullets_group:if bullet.update(cfg.SCREENSIZE[1]):en_bullets_group.remove(bullet)del bulletelse:bullet.draw(screen)if myaircraft.score > highest_score:highest_score = myaircraft.score# --得分每增加2000我方飛船增加一條生命if (myaircraft.score % 2000 == 0) and (myaircraft.score > 0) and (myaircraft.score != myaircraft.old_score):myaircraft.old_score = myaircraft.scoremyaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)# --敵人都死光了的話就勝利了if len(enemies_group) < 1:is_win = Truerunning = False# --顯示文字# ----當前得分showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8)showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24)# ----敵人數量showText(screen, 'ENEMY: ', cfg.WHITE, font, 370, 8)showText(screen, str(len(enemies_group)), cfg.WHITE, font, 370, 24)# ----歷史最高分showText(screen, 'HIGHEST: ', cfg.WHITE, font, 540, 8)showText(screen, str(highest_score), cfg.WHITE, font, 540, 24)# ----FPSshowText(screen, 'FPS: ' + str(int(clock.get_fps())), cfg.RED, font, 8, 8)# --顯示剩余生命值showLife(screen, myaircraft.num_life, cfg.GREEN)pygame.display.update()clock.tick(cfg.FPS)with open('score', 'w') as f:f.write(str(highest_score))return is_win'''主函數''' def main():# 初始化pygame.init()pygame.display.set_caption('外星人入侵 —— 九歌')screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)while True:is_win = startGame(screen)endInterface(screen, cfg.BLACK, is_win)'''run''' if __name__ == '__main__':main()祝大家玩得開心,歡迎點贊、關注、評論,歡迎一鍵三聯。
總結
以上是生活随笔為你收集整理的Python小游戏(小蜜蜂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python小游戏(24点小游戏)
- 下一篇: Python小游戏(XO大战)