Python实战小项目-飞船游戏

本文介绍了一个使用Python编写的飞船射击游戏。游戏代码分为9个模块,包括alien_invasion(主函数)、settings(配置)、game_stats(游戏统计)、game_functions(功能函数)、alien(外星人)、ship(飞船)、bullet(子弹)、button(按钮)和scoreboard(计分板)。每个模块都有特定的功能,例如设置、统计、游戏逻辑等。通过这个游戏,读者可以学习到Python编程和游戏开发的基本技巧。
摘要由CSDN通过智能技术生成

飞船游戏

这虽然只是个小游戏,但是代码也不少,为了避免出错并且让代码清楚整洁我们把代码分为9个模块,同时还有一个image文件夹储存图像还有编辑过程中Python自己生成的一个文件夹。9个模块中,每个模块都有自己的功能,来为我们最终的游戏服务。我们看一下做出来游戏的效果。
例子1.主函数模块alien_invasion
这是主函数模块,也是启动游戏的模块,启动游戏只需要点击此模块即可。
代码:

import pygame

from pygame.sprite import Group
from settings import Settings
from ship import Ship
from alien import Alien
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard
import game_functions as gf


def run_game():
    #初始化pygame、设置和屏幕对象
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    #创建Play按钮
    play_button = Button(ai_settings,screen,"Play")

    #创建一艘飞船、一个子弹的编组和一个外星人编组
    ship = Ship(ai_settings,screen)
    bullets = Group()
    aliens = Group()
    
    #创建外星人群
    gf.create_fleet(ai_settings,screen,ship,aliens)

    #创建一个用于储存游戏统计信息的实例,并创建记分牌
    stats = GameStats(ai_settings)
    sb = Scoreboard(ai_settings,screen,stats)
    

    #开始游戏的主循环
    while True:
        gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,
                        bullets)
        if stats.game_active:           
            ship.update()
            gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)
            gf.update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets)
        gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,
                         play_button)


run_game()

2.游戏配置的settings模块
此模块实现游戏相关信息的配置和初始化
代码:

class Settings():
    """储存《外星人入侵》的所有设置的类"""

    def __init__(self):
        """初始化游戏的静态设置"""
        #屏幕设置
        self.screen_width = 1200
        self.screen_height = 700
        self.bg_color = (230,230,230)

        #飞船的设置
        self.ship_limit = 3

        #子弹设置
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = 60,60,60
        self.bullets_allowed = 3

        #外星人设置
        self.fleet_drop_speed = 10
        #以什么样的速度加快游戏节奏
        self.speedup_scale = 1.1

        #外星人点数的提高
        self.score_scale = 1.5

        self.initialize_dynamic_settings()

    def initialize_dynamic_settings(self):
        """初始化随游戏进行而变化的设置"""
        self.ship_speed_factor = 1.5
        self.bullet_speed_factor = 3
        self.alien_speed_factor = 1

        #fleet_direction为1表示向右;为-1表示向左
        self.fleet_direction = 1

        #记分
        self.alien_points = 50

    def increase_speed(self):
        """提高速度设置和外星人点数"""
        self.ship_speed_factor *= self.speedup_scale
        self.bullet_speed_factor *= self.speedup_scale
        self.alien_speed_factor *= self.speedup_scale

        self.alien_points = int(self.alien_points * self.score_scale)

3.game_stats模块
用于游戏信息的统计
代码:

class GameStats():
    """跟踪游戏的统计信息"""

    def __init__(self,ai_settings):
        """初始化统计信息"""
        self.ai_settings = ai_settings
        self.reset_stats()

        #让游戏一开始处于非活动状态
        self.game_active = False

        #任何情况都不应该清除最高分
        self.high_score = 0

    def reset_stats(self):
        """初始化在游戏运行期间可能变化的统计信息"""
        self.ships_left = self.ai_settings.ship_limit
        self.score = 0
        self.level = 1

4.用于储存函数的game_functions模块
此模块用于储存让游戏运行的函数,可避免主函数太长,并让其代码更易理解。
具体代码:

import sys
from time import sleep

import pygame
from bullet import Bullet
from alien import Alien

def check_keydown_events(event,ai_settings,screen,ship,bullets):
    """响应按键"""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_SPACE:
        fire_bullet(ai_settings,screen,ship,bullets)
    elif event.key == pygame.K_q:
        sys.exit()

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
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值