《Python编程从入门到实践》的项目一:外星人入侵(完整)

您所在的位置:网站首页 程序实践报告模板图片素材 《Python编程从入门到实践》的项目一:外星人入侵(完整)

《Python编程从入门到实践》的项目一:外星人入侵(完整)

2024-07-03 23:40| 来源: 网络整理| 查看: 265

飞船左右移动,发射子弹射击入侵的外星人(带音效) 🍋 游戏效果

请添加图片描述

🎈 下载游戏

👉点击这里下载游戏👈

运行下载的游戏 -> 更多信息 -> 仍要运行 在这里插入图片描述 在这里插入图片描述 🎯 游戏功能说明 按键功能说明←火箭向左移动→火箭向右移动Space火箭发射子弹r重新开始游戏w暂停游戏c继续游戏Esc退出游戏 🎄 代码

alien_invasion.py(主文件)

import pygame import game_functions as gf from settings import Settings from ship import Ship from pygame.sprite import Group from game_stats import GameStats from button import Button from scoreboard import Scoreboard from all_music import bg_music def run_game(): """ 初始化游戏并创建一个屏幕对象""" pygame.init() ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # 初始化声音播放模块 pygame.mixer.init() # 创建Play按钮 play_button = Button(ai_settings, screen, "Play") continue_button = Button(ai_settings, screen, "Continue") # 创建一个用于存储游戏统计信息的实例, 并创建记分牌 stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # 创建一艘飞船、一个子弹编组和一个外星人编组 ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() # 创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) # 加载背景音乐 bg_music() """ 开始游戏的主循环""" while True: """ 监视键盘和鼠标事件""" gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: gf.play_bg_music() ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, bullets, aliens) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button, continue_button) run_game()

game_functions.py

import sys import pygame from bullet import Bullet from alien import Alien from time import sleep import json import all_music as am import os import sys def get_resource_path(relative_path): if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path) def play_bg_music(): # 检查背景音乐流播放,有返回True,没有返回False 如果没有音乐流则选择播放 """ 此方法同Sound方法一样!都是以流的方式呈现。一直播放需要使用while循环!""" if not pygame.mixer.music.get_busy(): pygame.mixer.music.play(loops=0,start=0) def pause_bg_music(): # 暂停背景音乐 """ 此方法同Sound方法一样!都是以流的方式呈现。一直播放需要使用while循环!""" if not pygame.mixer.music.get_busy(): pygame.mixer.music.pause() def check_high_score(stats, sb): """ 检查是否诞生了新的最高得分""" if stats.score > stats.high_score: stats.high_score = stats.score sb.prep_high_score() def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets): """ 检查是否有外星人到达了屏幕底部""" screen_rect = screen.get_rect() for alien in aliens.sprites(): if alien.rect.bottom >= screen_rect.bottom: """ 像飞船被撞到一样进行处理""" am.explosion_large() ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets) break def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets): """ 响应被外星人撞到的飞船""" if stats.ships_left > 0: am.explosion_large() # 将ships_left减一 stats.ships_left -= 1 # 更新记分牌 sb.prep_ships() # 清空外星人列表和子弹列表 aliens.empty() bullets.empty() # 创建一群新的外星人,并将飞船放到屏幕底部中央 create_fleet(ai_settings, screen, ship, aliens) ship.center_ship() # 暂停 sleep(0.5) else: stats.game_active = False pygame.mouse.set_visible(True) def change_fleet_direction(ai_settings, aliens): """ 将整群外星人下移,并改变它们的方向""" for alien in aliens.sprites(): alien.rect.y += ai_settings.fleet_drop_speed ai_settings.fleet_direction *= -1 def check_fleet_edges(ai_settings, aliens): """ 有外星人到达边缘时采取向右相应的措施""" for alien in aliens.sprites(): if alien.check_edges(): change_fleet_direction(ai_settings, aliens) break def update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets): """ 检查是否有外星人位于屏幕边缘,并更新外星人群中所有外星人的位置""" check_fleet_edges(ai_settings, aliens) aliens.update() """ 检测外星人和飞船之间的碰撞""" if pygame.sprite.spritecollideany(ship, aliens): ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets) """ 检查是否有外星人到达屏幕底部""" check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets) def get_number_rows(ai_settings, ship_height, alien_height): """ 计算屏幕可容纳多少行外星人""" available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height) number_rows = int(available_space_y / (2 * alien_height)) return number_rows def get_number_aliens_x(ai_settings, alien_width): """ 计算每行可容纳多少个外星人""" available_space_x = ai_settings.screen_width - 2 * alien_width number_aliens_x = int(available_space_x / (2 * alien_width)) return number_aliens_x def create_alien(ai_settings, screen, aliens, alien_number, row_number): """ 创建一个外星人并将其放在当前行""" alien = Alien(ai_settings, screen) alien_width = alien.rect.width alien.x = alien_width + 2 * alien_width * alien_number alien.rect.x = alien.x alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number aliens.add(alien) def create_fleet(ai_settings, screen, ship, aliens): """ 创建外星人群""" # 创建一个外星人,并计算一行可容纳多少个外星人 alien = Alien(ai_settings, screen) number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width) number_rows = get_number_rows(ai_settings, ship.rect.height, alien.rect.height) # 创建外星人群 for row_number in range(number_rows): for alien_number in range(number_aliens_x): """创建一个外星人并将其加入当前行""" create_alien(ai_settings, screen, aliens, alien_number, row_number) def fire_bullet(ai_settings, screen, ship, bullets): """ 如果还没有到达限制,就发射一颗子弹""" """ 创建一颗子弹,并将其加入到编组bullets中""" if len(bullets)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3