表題の通りゲーム画面にならずpygameの画面が黒くなりEcounterという文字しか表示されません。
ご教示頂ければ幸いです
よろしくお願いいたします。
python
1import pygame 2import sys 3import random 4from pygame.locals import * 5 6WHITE = (255,255,255) 7BLACK = ( 0, 0, 0) 8 9imgBtlBG = pygame.image.load("btlbg.png") 10imgEffect =pygame.image.load("effect_a.png") 11imgEnemy = pygame.image.load("enemy4.png") 12emy_x = 440-imgEnemy.get_width()/2 13emy_y = 560-imgEnemy.get_height() 14emy_step = 0 15emy_blick = 0 16dmg_eff = 0 17COMMAND = ["[A]ttack", "[P]otion", "[B]laze", "[R]un"] 18 19message = [""]*10 20def init_message(): 21 for i in range(10): 22 message[i] == "" 23 24def set_message(msg): 25 for i in range(10): 26 if message[i] == "": 27 message[i] = msg 28 return 29 for i in range(9): 30 message[i] == [i+1] 31 message[9] = msg 32 33def draw_text(bg, txt, x, y, fnt, col): 34 sur = fnt.render(txt, True, BLACK) 35 bg.blit(sur, [x+1, y+2]) 36 sur = fnt.render(txt, True, col) 37 bg.blit(sur, [x, y]) 38 39def draw_battle(bg, fnt): 40 global emy_blick, dmg_eff 41 bx = 0 42 by = 0 43 if dmg_eff > 0: 44 dmg_eff = dmg_eff - 1 45 bx = random.randint(-20, 20) 46 by = random.randint(-10, 10) 47 bg.blit(imgBtlBG, [bx, by]) 48 if emy_blink%2 == 0: 49 bg.blit(imgEnemy, [emy_x, emy_y+emy_step]) 50 if emy_blink > 0: 51 emy_blink = emy_blink - 1 52 for i in range(10): 53 draw_text(bg, message[i], 600, 100+i*50, fnt, WHITE) 54 55def battle_command(bg, fnt): 56 for i in range(4): 57 draw_text(bg, COMMAND[i], 20, 360+60*i, fnt, WHITE) 58 59def main(): 60 global emy_step, emy_blink, dmg_eff 61 idx = 10 62 tmr =0 63 64 pygame.init() 65 pygame.display.set_caption("ターン制の処理") 66 screen = pygame.display.set_mode((880, 720)) 67 clock = pygame.time.Clock() 68 font = pygame.font.Font(None, 30) 69 70 init_message() 71 72 while True: 73 for event in pygame.event.get(): 74 if event.type == pygame.QUIT: 75 pygame.quit() 76 sys.exit() 77 78 draw_battle(screen, font) 79 tmr = tmr + 1 80 key = pygame.key.get_pressed() 81 82 if idx == 10: #戦闘開始 83 if tmr == 1: set_message("Encounter!") 84 if tmr == 6: 85 idx = 11 86 tmr = 0 87 88 elif idx == 11:#プレイヤー入力待ち 89 if tmr == 1: set_message("Your turn.") 90 battle_command(screen, font) 91 if key[K_a] == 1 or key[K_SPACE] == 1: 92 idx = 12 93 tmr = 0 94 95 elif idx ==12: #プレイヤーの攻撃 96 if tmr == 1: set_message("You attack") 97 if 2 <= tmr and tmr <= 4: 98 screen.blit(imgEffect, [700-tmr*120, -100+tmr*120]) 99 if tmr ==5: 100 emy_blick = 5 101 set_message("***pts of damage!") 102 if tmr == 16: 103 idx = 13 104 tmr = 0 105 elif idx == 13: #敵のターン、敵の攻撃 106 if tmr == 1: set_message("Enemy turn.") 107 if tmr == 5: 108 set_message("Enemy attack!") 109 emy_step = 30 110 if tmr == 9: 111 set_message("***pts of damage!") 112 dmg_eff = 5 113 emy_step = 0 114 if tmr == 20: 115 idx = 11 116 tmr = 0 117 118 pygame.display.update() 119 clock.tick(5) 120 121if __name__ == '__main__' : 122 main() 123 124 125
全体の処理の流れがよく分からないのですが、以下の部分の idx の値が更新されていないので、Ecounter がずっと表示されることになってしまっています。
if idx == 10: #戦闘開始
if tmr == 1: set_message("Ecounter!")
if tmr == 6:
inx = 11
tmr = 0
いつも大変お世話になっております。
inx は打ち間違いでidxに訂正致しました。
これでEcounterがずっと表示されることはなくなりましたが、pygameの画面が黒くなるのがまだ修正できていません。
画面が黒くなるのは画面の更新がうまくいっていないと思うのですが、どこを修正して良いのかがわかりません。
もしよろしければご教示頂ければ幸いです。
>どこを修正して良いのかがわかりません
ご自身で書かれたコードではないのでしょうか。
こちらで試してみたところ、メニューが表示されて 右側に「Your turn」と表示されるのでスペースキーを押すと、「You attack」「***pts of damage!」「Ememy tune」「Enemy attack!」 と表示されていきます。最後に、
UnboundLocalError: local variable 'emy_blink' referenced before assignment
と表示されて異常終了します。
お手数をおかけしてすみません。
スペルと行間の訂正を行いましたが、同様のエラーが出続けています。
明日、自分でも見直しをします。
あなたの回答
tips
プレビュー