pythonで作るタイトル画面と画面遷移

タイトル画面とページ遷移を書いていきます。

写真やBGMなどを使います。同じディレクトリに素材を入れないと読み込みエラーが生じるので注意してください。

(~_~;)

import sys
import pygame
from pygame.locals import *
import mikatype
import typing1
import typing2
import typing3
import typing_cal
import sushida

SC_SIZE = (720, 480)  # 画面サイズ
BUTTON_POSI = (48, 46)  # セレクトボタン座標
BUTTON_POSI_2 = (48,180)
BUTTON_POSI_3 = (48,314)
BUTTON_POSI_4 = (385,46)
BUTTON_POSI_5 = (385,180)

# ゲーム実行
def game():
    pygame.init()  # pygame初期化
    screen = pygame.display.set_mode(SC_SIZE)  # 画面表示

    title_bg = pygame.image.load("title1.png").convert()  # タイトル背景
    select_bg = pygame.image.load("select_screen.gif").convert_alpha()  # セレクト画面背景

    font = pygame.font.SysFont("hg正楷書体pro", 40)  # 日本語フォント
    font2 = pygame.font.SysFont(None, 40)            # アルファベットフォント
    
    button_start = pygame.Rect(275, 300, 200, 40)  # startボタン
    text_GameStart = font2.render("GameStart", True, (250,250,0))  # GameStartテキスト

    select_button = pygame.image.load("wood_board.gif").convert_alpha()
    rect_sb  = pygame.Rect(BUTTON_POSI, select_button.get_rect().size)
    rect_sb_2  = pygame.Rect(BUTTON_POSI_2, select_button.get_rect().size)
    rect_sb_3  = pygame.Rect(BUTTON_POSI_3, select_button.get_rect().size)
    rect_sb_4  = pygame.Rect(BUTTON_POSI_4, select_button.get_rect().size)
    rect_sb_5  = pygame.Rect(BUTTON_POSI_5, select_button.get_rect().size)

    pygame.mixer.music.load("Night_View.wav")
    pygame.mixer.music.set_volume(0.1)
    pygame.mixer.music.play(100)

    pygame.display.update()

    running = True
    running_2 = False
    
    while running:
        screen.blit(pygame.transform.scale(title_bg, (SC_SIZE)), (0, 0))  # 背景描画
        pygame.draw.rect(screen, (50, 50, 50), button_start)  # ボタン描画
        screen.blit(text_GameStart, (300, 305))  # テキスト描画
        screen.blit(font.render("press SPACE", True, (0,0,0)), (250,400))   
        pygame.display.update()

        for event in pygame.event.get():
            if event.type == QUIT:  # 終了イベント
                sys.exit(0)  # システム終了
            
            if event.type == KEYDOWN:
                if event.key == K_SPACE:
                    running_2 = True
                    running = False

            if event.type == MOUSEBUTTONDOWN:
                # スタートボタンが押された場合の処理
                if button_start.collidepoint(event.pos):
                    running_2 = True
                    running = False

    while running_2:
        # 画面設定
        pygame.init()
        screen.fill((30, 30, 30))
        screen.blit(select_button, (BUTTON_POSI))
        screen.blit(select_button,(BUTTON_POSI_2))
        screen.blit(select_button,(BUTTON_POSI_3))
        screen.blit(select_button,(BUTTON_POSI_4))
        screen.blit(select_button,(BUTTON_POSI_5))

        screen.blit(select_bg, (0, 0))
        screen.blit(font.render("1. MIKAtype", True, (250,250,250)), (60,80))
        screen.blit(font.render("2. run", True, (250,250,250)), (60,220))
        screen.blit(font.render("3. fight", True, (250,250,250)), (60,360))
        screen.blit(font.render("4. calculate", True, (250,250,250)), (409,80))
        screen.blit(font.render("5. sushida", True, (250,250,250)), (409,220))

        pygame.display.update()

        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_1:
                    pygame.init()
                    mikatype.run_game()
                if event.key == K_2:
                    pygame.init()
                    typing1.run_game()
                if event.key ==K_3:
                    pygame.init()
                    typing2.run_game()
                if event.key ==K_4:
                    pygame.init()
                    typing_cal.run_game()
                if event.key ==K_5:
                    pygame.init()
                    sushida.run_game()
                if event.key == K_ESCAPE:
                    running_2 = False


            if event.type == MOUSEBUTTONDOWN:
                if rect_sb.collidepoint(event.pos):
                    pygame.init()
                    mikatype.run_game()
                if rect_sb_2.collidepoint(event.pos):
                    pygame.init()
                    typing1.run_game()
                if rect_sb_3.collidepoint(event.pos):
                    pygame.init()
                    typing2.run_game()
                if rect_sb_4.collidepoint(event.pos):
                    pygame.init()
                    typing_cal.run_game()
                if rect_sb_5.collidepoint(event.pos):
                    pygame.init()
                    sushida.run_game()

game()

説明を

running(title) → running_2(select)

でタイトル画面からセレクト画面への遷移を行っています。

タイトル画面

ほかのファイルからの読み込み注意点

読み込まれる側の最終行に以下を加えます。

if __name__ =="__main__":
     run_game() #メイン関数を指定してください。

読み込む側は任意のタイミングで以下のように記述します。

保存ファイル名.メイン関数名     ↓↓下に例を載せておきます。

typing1.run_game()

BGM設定

pygame.mixer.music.load(“Night_View.wav”)

pygame.mixer.music.set_volume(0.1)

pygame.mixer.music.play(10)

一つ目のコードでファイルロードを行っています。ファイルの指定はフルパスorディレクトリの統一を

二つ目のコードでボリュームを決定しています。

三つ目のコードで繰り返す回数を指定しています。

あとは基本的にボタンの位置を指定したり、ボタンに写真を指定したりしています。これらは人による部分が多いのであまり書かないでおきます。

セレクト画面

ボタンを設置して、その上に文字を描写しています。順番だけ気を付けてください。

上のコードwhile running_2 : にあるように、ボタンをクリックした場合と数字をタイプした場合ほかのファイルから読込実行する。といったものとなっています。

感想

ディレクトリと読込だけ気を付けてください。

写真やBGMを使ったりほかのファイルから読込など、使う人や作りたいものによって全然変わってくるので使いたいところだけコードから読み取ってください。(笑)

ボタンの設定やBGM設定、ファイル読込設定くらいしか参考にならなそうですね。😢

このころはげーむ作り数人でやっていたので懐かしいです。

ああぁ、もどりたいなー(~_~;)

1件のコメント

  1. pygame、pythonを使ってゲームを作り、スペースキーを押せばタイトル画面からゲーム画面へ切り替わるように設定しました。しかし、スペースキーを押しても音楽は変わりますが画面はずっとタイトル画面のままです。対処法の方を一緒に考えていただけませんでしょうか🙇‍♂️お忙しい中失礼します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です