見出し画像

Lesson7 ボタンをつくろう

割引あり

今回はゲーム画面で使用するコマンドボタンをつくります。

画像データ

まず画像データを配ります。
以前ダウンロードしてあれば次に進んでください。

全部で8枚です。また「image」フォルダに入れてください。



structure.py

structure.py というファイルを開いてください。
中身はいつものようにコードを書く場所が指定されています。

######## structure.py ########
# ここに構造物の基本形式を設定します
############################################################################################
#### ライブラリの読み込み ####


############################################################################################
# ボタンの基本設定


############################################################################################
# 四角の基本設定


############################################################################################

そこに以下のコードをコピペして保存してください。

#### structure.py ####

########################################################################################
#### ライブラリの読み込み ####
import pygame

########################################################################################
# ボタンの基本設定
class Button(pygame.sprite.Sprite):
    def __init__(self, x, y, normal_image_path, selected_image_path,button_num):
        super().__init__()  # pygame.sprite.Spriteの初期化メソッドを呼び出す
        self.x = x                                  # 初期位置 x
        self.y = y                                  # 初期位置 y
        self.normal_image = normal_image_path       # 画像1
        self.selected_image = selected_image_path   # 画像2
        self.button_num = button_num                # ボタンナンバー
        self.key_pressed = False  # キーが押されているかどうかの状態

    # 描画関数
    def draw_button(self, screen,selected_button,player_turn,image_player):
        if player_turn:
            if self.button_num == selected_button:  # 選択されたボタンの場合
                screen.blit(self.selected_image, (self.x, self.y))  # 選択中のボタン表示
                screen.blit(image_player, (self.x + 11, self.y + 4))  # ボタン内にプレイヤーアイコン表示
            else:
                screen.blit(self.normal_image, (self.x, self.y))    # ボタン(非選択)表示
        else:
            screen.blit(self.normal_image, (self.x, self.y))        # ボタン(非選択)表示


########################################################################################

stage1.py

前回の続きとして stage1.py を開いてください。
そこに以下のコードを追加でコピペしてください。

#### stage1.py ####

############################################################################################
#### ライブラリの読み込み ####

from structure import Button

############################################################################################

#### メインプログラム ####
def main(hp,mp,idx):            # 追加済み

    ########################################################################################
    #### コマンドボタンのスプライト ####
    button_width = 200
    button_height = 50 
    image101 = pygame.image.load("image/command_1A.png")
    image102 = pygame.image.load("image/command_1B.png")
    image103 = pygame.image.load("image/command_2A.png")
    image104 = pygame.image.load("image/command_2B.png")
    image105 = pygame.image.load("image/command_3A.png")
    image106 = pygame.image.load("image/command_3B.png")
    image107 = pygame.image.load("image/command_4A.png")
    image108 = pygame.image.load("image/command_4B.png")
    button1_1 = pygame.transform.scale(image101, (button_width, button_height))
    button1_2 = pygame.transform.scale(image102, (button_width, button_height))
    button2_1 = pygame.transform.scale(image103, (button_width, button_height))
    button2_2 = pygame.transform.scale(image104, (button_width, button_height))
    button3_1 = pygame.transform.scale(image105, (button_width, button_height))
    button3_2 = pygame.transform.scale(image106, (button_width, button_height))
    button4_1 = pygame.transform.scale(image107, (button_width, button_height))
    button4_2 = pygame.transform.scale(image108, (button_width, button_height))
    buttons_params = [
        {'x':50,'y':height - button_height - 10,'normal_image_path': button1_1, 'selected_image_path':button1_2,'button_num':1},
        {'x':250,'y':height - button_height - 10,'normal_image_path': button2_1, 'selected_image_path':button2_2,'button_num':2},
        {'x':450,'y':height - button_height - 10,'normal_image_path': button3_1, 'selected_image_path':button3_2,'button_num':3},
        {'x':650,'y':height - button_height - 10,'normal_image_path': button4_1, 'selected_image_path':button4_2,'button_num':4},
    ]
    buttons = [Button(**params) for params in buttons_params]
    
    def command_button():
        for button in buttons:
            button.draw_button(screen,selected_button,player_turn,image_player)
 
    #######################################################################################
    #### ゲームループ ####
    while True:                                 # 追加済み

        #### ステージ共通の要素 ####

        command_button()



         #### キー操作設定 ####
        # 単押し
        for event in pygame.event.get():        # 追加済み
            if event.type == pygame.QUIT:       # 追加済み
                pygame.quit()                   # 追加済み
                sys.exit()                      # 追加済み

            if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:              # 追加済み
                return hp,mp,idx                                                        # 追加済み

            if event.type == pygame.KEYDOWN:                                            # 追加済み

                ## 省略 ##
                
                if event.key == pygame.K_LEFT and player_turn:
                    selected_button = max(1,selected_button - 1)
                if event.key == pygame.K_RIGHT and player_turn:
                    selected_button = min(4,selected_button + 1)

すべてコピペができたら以下を実行してください。

>python main.py

実行結果1: 画面下部にコマンドボタンが出現

スペースキーを押すと

実行結果2: 「ぶき」が選択状態になります

←・→」キーを押すと

実行結果3: 選択状態が変化します

こんな感じでコマンドを選ぶことができます。ただしコマンドの中身などは全然入ってません。ボタンを選べるってだけです。コマンドの内容は Lesson18 で追加予定です。

ちなみにもう一度スペースキーを押せば元に戻ります。

ね、ゲームっぽい。


それではここから解説をします。いつものように有料ゾーンです。ぜひⅩ(旧Twitter)でリポストして無料で学習してください★

ここから先は

10,878字

この記事が気に入ったらチップで応援してみませんか?