# file name : reidai8_7.py
# reidai8_7 敵から逃げる

import pygame
import globals as GV                # グローバル変数
import game_funcs as G_P            # ユーザ定義関数：プレイヤー
import game_funcs_enemies as G_E    # ユーザ定義関数：敵

# ====== 関数：イベント処理=======
def handle_events():
    # 発生したすべてのイベントを取得
    for event in pygame.event.get():
        # ウィンドウの閉じるボタンがクリックされた場合
        if event.type==pygame.QUIT:
           return False
    return True

# ======= 関数：図形の描画処理=======
def draw(screen):
    # 背景画像を描画
    screen.blit(GV.background_image,(0,0))
    # プレイヤー画像を描画
    screen.blit(GV.player_image, (GV.fpos['x'], GV.fpos['y']))
    # 敵画像の描画
    for e1 in GV.enemies_lst:
          screen.blit(GV.enemy_image,(e1['x'],e1['y']))
    # ライフの残数の表示
    font=pygame.font.Font(None,36)
    lives_text=font.render(f'Lives:{GV.player_lives}',
                           True,(0,0,255))
    screen.blit(lives_text,(10,10))
    # ウィンドウを更新
    pygame.display.flip()

# ======= 関数：画像ファイルの読み込み=======
# 本サンプルプログラムでは、各画像のパス付きファイル名を格納した
# グローバル変数を使用しています。
# 教科書のプログラムの通りに実行する場合は、imageフォルダの画像ファイルを
# すべてこちらのpyファイルと同じフォルダに移動し、★の画像ファイルのグローバル変数
# を教科書のとおりに変更してください。

def load_images(): 
    # 画像ファイル(背景：background.png)を読み込む
    GV.background_image=pygame.image.load(GV.img_bg)  # ★
    # キャンバスサイズに適合させる(スケーリング)
    GV.background_image=pygame.transform.scale\
                (GV.background_image,(GV.canv['w'], GV.canv['h']))
    
    # 画像ファイル(プレイヤー：player.png)を読み込む
    GV.player_image=pygame.image.load(GV.img_player)  # ★
    # 画像(プレイヤー)の幅と高さを得る。
    GV.player['w'],GV.player['h']=GV.player_image.get_size()
    
    # 画像ファイル(敵：enemy.png)を読み込む
    GV.enemy_image=pygame.image.load(GV.img_enemy)    # ★
    # 画像(敵)の幅と高さを得る。
    GV.enemy['w'],GV.enemy['h']=GV.enemy_image.get_size()

# ======= ゲームオーバーウィンドウの表示=======
def draw_game_over(msg,screen):
    screen.fill((0,0,0))                        # 背景色
    font=pygame.font.Font(None,80)              # フォントの種類と大きさ
    text=font.render(msg,True,(255,255,255))    # メッセージとフォントの色
    screen.blit(text,                           # メッセージの表示位置
          (GV.canv['w']/2-text.get_width()/2,
           GV.canv['h']/2-text.get_height()/2))
    pygame.display.flip()                       # ウィンドウを更新
    pygame.time.delay(3000)                     # 3秒（3000ミリ秒）間待つ

# ====== メイン関数 ======
def main() :
    # Pygameを初期化、ライブラリの準備
    pygame.init()
    # ウィンドウの作成
    screen = pygame.display.set_mode((GV.canv['w'],GV.canv['h']))
    # ウィンドウのタイトルを設定
    pygame.display.set_caption(GV.ttl)
    # 画像ファイルの読み込み
    load_images()
    # 複数の敵の初期化
    G_E.init_enemies() 
    # 一定の速さで進めるタイマー作成
    clock = pygame.time.Clock()

    # メインのループ
    while True:
        message=None                            # 最終画面に表示するメッセージ     
        if not handle_events():break            # イベント処理

        # 図形の移動
        G_P.move_player()                       # プレイヤーの移動
        G_E.move_enemies()                      # 敵の移動

        # 矩形（画像）の衝突
        c_enemy=G_E.check_collision()           # プレイヤーと敵の衝突

        # 最終画面の表示
        if c_enemy:                             # ライフがなくなった場合
            message='Game Over'
        if message:                             # メッセージがある場合
            draw_game_over(message,screen)      # メッセージ画面を表示
            break                               # 終了

        # 図形の描画 
        draw(screen)                            # 図形の描画処理
        clock.tick(60)                          # 1秒に60回のペースで進める

# ■メインガード
if __name__ == "__main__":
    try: main()
    finally: pygame.quit()                      # プログラムの終了
