ソースコードを整える

スペースラビップルのソースコードを整えます。

プロジェクトフォルダを作成する

これまで、フォントや画像などもひとまとめにdataフォルダに突っ込んでいましたが、とても乱雑で見にくくなっています。

そこでまずは、プロジェクトフォルダの構成を整理していきます。

まずは、プロジェクトフォルダの直下にメインとなるspace_rabipple.pyを作成します。

さらに、フォルダを三つ作成します。

  • dataフォルダ…設定などのデータファイルを保存する
  • libsフォルダ…作成したモジュールを保存する
  • resourcesフォルダ…画像や音楽などを保存する

resourcesフォルダには、imageフォルダやfontフォルダなどを適宜追加していくようにします。

最終的には、上の画像のようになりました。

メインファイルの作成

作成したspace_rabipple.pyの中身を記述していきます。

このファイルを実行することでゲームが開始できるようにします。

#!/usr/bin env python
import os
import sys

from libs.game import Game

if __name__ == "__main__":
    Game()

libsフォルダ内のgame.pyをインポートし、Gameクラスを開始する、という内容になります。

libsフォルダをパッケージ化

libsフォルダ内に、__init__.pyという名前でファイルを作成します。

中身は空っぽで大丈夫です。

これで、libsフォルダが「パッケージ」として認識される?ようになるようです。

正直このあたりのことは、私自身よくわかっていません…

import文の修正

これまでは、メインとなるフォルダと同じ階層にすべてのファイルがあったので、特になにも考えず「import 〇〇」でほかのファイルのクラスや関数が使えていましたが、フォルダの構成をいじったことでそうはいかなくなりました。

メインとなるspace_rabipple.pyが基準となるので、そこに合わせて各ファイルのimport文を修正します。

例えば、game.pyで他のファイルをインポートする場合は以下のようになります。

from . import bar, enemy, explosion, item, player, shot, title

ゲームオーバー、クリア画面の統合

ゲームオーバー画面と、クリア画面はほぼ同じ内容だったので、ファイルを統合してしまいました。

インスタンス化する際に、タイトルとなる文字列を渡すように変更しました。

import pygame
from pygame.locals import *
import sys

from . import cursor

class GameOver():
    def __init__(self, title):
        self.select = 0
        self.font = pygame.font.Font("resources/font/minamoji04.ttf", 48)
        self.menu_font = pygame.font.Font("resources/font/minamoji04.ttf", 32)

        self.title = self.font.render(title, True, (0, 0, 0))
        self.retry = self.menu_font.render(u"リトライ", True, (0, 0, 0))
        self.exit = self.menu_font.render(u"やめる", True, (0, 0, 0))

        self.cursor = cusor.Cursor(220, 230, (0, 0, 0))
    
    def update(self):
        if self.select == 0:
            self.cursor.y = 230
        elif self.select == 1:
            self.cursor.y = 280
    
    def draw(self, screen):
        screen.fill((255, 0, 0))
        screen.blit(self.title, ((320 - (self.title.get_width() / 2)), 100))
        screen.blit(self.retry, ((320 - (self.retry.get_width() / 2)), 225))
        screen.blit(self.exit, ((320 - (self.exit.get_width() / 2)), 275))
        self.cursor.draw(screen)

細かい部分の修正とサウンドの追加

ほかに、細かいスペルミスやファイル名の修正を行いました。

また、カーソルを動かしたときの効果音や、敵に攻撃がヒットした時の効果音を追加しました。

これで、ひとまず簡単なゲームですが完成としたいと思います。

ソースコードのダウンロード