実現したいこと
入門書にあるゲームを改造したい
- 戦闘勝利後にスペースキーが押されるまで次の画面に移行しない動作するようにする
前提
入門書にあるゲームを改造しています。57行目以降を改造したところ、戦闘勝利後に「キーを押すまで次に進まない」というのを実現したいのですが、エラーが出てしまいます。
発生している問題・エラーメッセージ
ボタンを押しても次に進まず、フリーズしてしまう。
該当のソースコード
python3
1def battle_command(bg, fnt, key): # コマンドの入力と表示 2 global btl_cmd 3 ent = False 4 if key[K_a]: # Aキー 5 btl_cmd = 0 6 ent = True 7 if key[K_p]: # Pキー 8 btl_cmd = 1 9 ent = True 10 if key[K_b]: # Bキー 11 btl_cmd = 2 12 ent = True 13 if key[K_r]: # Rキー 14 btl_cmd = 3 15 ent = True 16 if key[K_UP] and btl_cmd > 0: #↑キー 17 btl_cmd -= 1 18 if key[K_DOWN] and btl_cmd < 3: #↓キー 19 btl_cmd += 1 20 if key[K_SPACE] or key[K_RETURN]: 21 ent = True 22 for i in range(4): 23 c = WHITE 24 if btl_cmd == i: c = BLINK[tmr%6] 25 draw_text(bg, COMMAND[i], 20, 360+i*60, fnt, c) 26 return ent 27 28#以下、問題となってる部分 29 elif idx == 16: # 勝利 30 draw_battle(screen, fontSS,fontLOG) 31 if tmr == 1: 32 set_message("You win!") 33 pygame.mixer.music.stop() 34 se[5].play() 35 if tmr == 28: 36 if random.randint(0, emy_lifemax) > random.randint(0, pl_lifemax): 37 idx = 17 38 tmr = 0 39 else: 40 while not(battle_command(screen, font, key) == True): 41 None 42 idx = 22 43 44 elif idx == 17: # レベルアップ 45 draw_battle(screen, fontSS,fontLOG) 46 if tmr == 1: 47 set_message("Level up!") 48 se[4].play() 49 lif_p = random.randint(10, 20) 50 str_p = random.randint(5, 10) 51 if tmr == 21: 52 set_message("Max life + "+str(lif_p)) 53 pl_lifemax = pl_lifemax + lif_p 54 if tmr == 26: 55 set_message("Str + "+str(str_p)) 56 pl_str = pl_str + str_p 57 if tmr == 50: 58 while not(battle_command(screen, font, key) == True): 59 None 60 idx = 22 61
補足
コードは一部載せてあります。
試したこと 調査したこと
58行目のwhile not の条件式をkey[K_SPACE]にしてもフリーズした。
while文には入れている模様。
また、このプログラムの全編です
https://drive.google.com/file/d/1BBOV3Eo74LFH7iuQi-DbDEwxmZeRw_Fx/view?usp=drive_link
回答1件
あなたの回答
tips
プレビュー