Lesson18 メニュー画面をつくろう
割引あり
画面下部にコマンド選択機能があります。
今はまだハリボテなので今回から中身を充実させていきます。
stage1.py
#### stage1.py ####
############################################################################################
#### ライブラリの読み込み ####
############################################################################################
#### メインプログラム ####
def main(hp,mp,idx): # 追加済み
########################################################################################
#### 初期設定 ####
## 省略 ##
damage = 1
weapon_param = [10,20,10,]
########################################################################################
## 省略 ##
########################################################################################
#### 弾丸のスプライト ####
del_time_bullet = 5 # 追加済み
image00 = pygame.image.load("image/bullet.png") # 追加済み
# 削除 image_bullet = pygame.transform.scale(image00, (20,20))
def clone_bullet(hp,frame_count,new_bullets,fire,weapon_param): # 修正
image_bullet = pygame.transform.scale(image00, (weapon_param[1],weapon_param[1])) # 移動&修正
if fire == True and player_turn == False: # 追加済み
fire = False # 追加済み
copy_bullet = player # 追加済み
attack_speed = weapon_param[0]
## 省略 ##
if len(new_bullets.sprites()) <= weapon_param[2]: # 修正
new_bullets.add(new_bullet) # 追加済み
## 省略 ##
def bullet_enemy_collisions(enemies_group, bullets_group,damage): # 修正
for enemy in enemies_group.sprites(): # 追加済み
if enemy.enemy_hp > 0: # 追加済み
bullet_hit_result = pygame.sprite.spritecollide(enemy, bullets_group, True, pygame.sprite.collide_mask)
# ↑追加済み
if bullet_hit_result: # 追加済み
enemy.attack_damage(damage)
for bullet in bullet_hit_result: # 追加済み
bullet.kill() # 追加済み
########################################################################################
#### コマンドメニュー ####
command_mode = False
selected_item = 5
selected_item_name = []
def command(selected_button,selected_item):
menu_surface = pygame.Surface((300, 200))
menu_surface.fill((0,0,255))
pygame.draw.rect(menu_surface, (255,255,0), (0, 0, 300, 200), 2)
menu_rect = menu_surface.get_rect(center=(width // 2, height // 2))
font = pygame.font.Font(None, 36)
# "Back"を生成しメニューボックスに描画する
back_text = "Back"
back_button_index = 5
back_text = font.render(back_text, True, (0, 0, 0))
back_text_topleft = 10, 200 - back_text.get_height() - 10
back_text_rect = back_text.get_rect(topleft=back_text_topleft)
if command_mode and back_button_index == selected_item:
selected_item_name = back_text
pygame.draw.rect(menu_surface,(255, 0, 255),back_text_rect)
menu_surface.blit(back_text, back_text_rect)
screen.blit(menu_surface, menu_rect)
########################################################################################
#### ゲームループ ####
while True:
## 省略 ##
hp,fire = clone_bullet(hp,frame_count,new_bullets,fire,weapon_param) # 修正
## 省略 ##
bullet_enemy_collisions(clone_enemies, new_bullets, damage) # 修正
bullet_enemy_collisions(single_enemies, new_bullets, damage) # 修正
bullet_enemy_collisions(white_enemies, new_bullets, damage) # 修正
#### キー操作設定 ####
# 単押し
for event in pygame.event.get(): # 追加済み
## 省略 ##
if event.type == pygame.KEYDOWN: # 追加済み
## 省略 ##
if event.key == pygame.K_RETURN: # 追加済み
idx = 2 # 追加済み
return hp, mp, idx # 追加済み
if event.key == pygame.K_SPACE: # 追加済み
if player_turn: # 追加済み
if command_mode == False:
if selected_button == 4:
selected_button = 1
player_turn = False
else:
command_mode = True
else:
if selected_item_name == "back":
selected_item = 1
command_mode = False
else:
if selected_button == 1:
print("selected_button = 1 , selected_item_name = ",selected_item_name)
elif selected_button == 2:
print("selected_button = 2 , selected_item_name = ",selected_item_name)
elif selected_button == 3:
print("selected_button = 3 , selected_item_name = ",selected_item_name) # 未実装のためターミナル表示のみ
selected_item = 1
command_mode = False
player_turn = False
else:
selected_button = 1
player_turn = True
# 削除 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)
if command_mode:
if event.key == pygame.K_w and player_turn:
selected_item = max(1,selected_item - 1)
if event.key == pygame.K_s and player_turn:
selected_item = selected_item + 1
else:
if event.key == pygame.K_a and player_turn:
selected_button = max(1,selected_button - 1)
if event.key == pygame.K_d and player_turn:
selected_button = min(4,selected_button + 1)
## 画面表示 ##
## 省略 ##
## アイテム選択画面 ##
if command_mode == True:
selected_item_name = command(selected_button,selected_item)
## 省略 ##
かなりの追加量&修正量ですね。頑張って貼り付けてください。
難しすぎますが、追加済みの行を探してその周りを修正してくださいね。
では下記を実行してください★
>python main.py
おおまかな動きが実装できました。
右手でマウスを握っていて、左手で「w、a、s、d」キー操作をするので、スペースキーを「決定」ボタンとしています。左手の親指で操作できます。
次回からメニューの中身を入れ込んでいきます。
では解説に移ります。
またX(旧Twitter)での拡散をお願いします☆
ここから先は
18,023字
この記事が気に入ったらサポートをしてみませんか?