teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

エラー箇所の画像を追加しました

2020/06/18 01:13

投稿

manabu.h
manabu.h

スコア0

title CHANGED
File without changes
body CHANGED
@@ -39,8 +39,10 @@
39
39
  試しにtabキーを押してみたら
40
40
  戦闘画面の横に、デフォルトMAP上の移動キーが表示され、
41
41
  クリックしたらデフォルトMAPの画面に戻りました。
42
- 「勝った」ボタンのクリックだけで、デフォルトMAP画面に戻りたいです…
42
+ 「勝った」ボタンのクリックだけで、デフォルトMAP画面に戻りたいです…![![イメージ説明](249bc127659519764929a4939602c466.png)](17d005a235f3d879f32071fe196c8e2a.png)
43
-
43
+ ![イメージ説明](c054f7b9a9f4a0d95c83405e62c2fb55.png)
44
+ ![イメージ説明](925b9d9ae857f54daaf63e6dde04be62.png)
45
+ ![イメージ説明](5ea6cf3290e4565adc2bed7f70782e66.png)
44
46
  ---
45
47
 
46
48
  ### 機能して欲しいコード

1

書籍名、メインのソースコードを追加しました

2020/06/18 01:12

投稿

manabu.h
manabu.h

スコア0

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,14 @@
8
8
  どなたかコードに変なところがあればご指摘いただけると助かります。
9
9
  よろしくおねがいします。
10
10
 
11
+ ※該当書籍「12歳からはじめる ゼロからの Pythonゲームプログラミング教室」
12
+ サンプルコード(http://www.rutles.net/download/463/)
13
+ →この中の「chap7.py」と「chap7fight.py」のコードを使用します。
14
+
15
+ 自分が詰まっているのはその途中過程においてですが、
16
+ サンプルには完成型のコードしかないためコード比較がしづらい状態です…
17
+
18
+
11
19
  実行したいプログラミングの内容
12
20
  ---
13
21
 
@@ -24,11 +32,18 @@
24
32
  「負けた」を押すとバッドエンドの別画面を表示させる。(これはできた)
25
33
 
26
34
  ※メインのコード(デフォルトのマップ画面)に、サブコード(戦闘画面)を読み込ませて制作するものです。
27
-  おそらくサブコードで間違えているんじゃないかと、思っているのですが…
28
35
 
36
+  ### 不審な挙動
37
+ ②実行時、戦闘画面で「勝った」ボタンをクリックしたあとに
38
+ フリーズしてしまいます。
39
+ 試しにtabキーを押してみたら
40
+ 戦闘画面の横に、デフォルトMAP上の移動キーが表示され、
41
+ クリックしたらデフォルトMAPの画面に戻りました。
42
+ 「勝った」ボタンのクリックだけで、デフォルトMAP画面に戻りたいです…
43
+
29
44
  ---
30
45
 
31
- ### 機能させたいコード
46
+ ### 機能して欲しいコード
32
47
 
33
48
  ```
34
49
  self.dialog.place_forget()
@@ -40,8 +55,135 @@
40
55
  意図が反映されていません。
41
56
  ```
42
57
 
43
- ### 該当のサブのソースコード
44
58
 
59
+ ### 呼び出し側のソースコード(デフォルトMAP)
60
+ ```ここに言語を入力
61
+ import tkinter
62
+ import chap7fight
63
+
64
+
65
+ #マップの描画
66
+ def draw_map():
67
+ for y in range(0, MAX_HEIGHT):
68
+ for x in range(0, MAX_WIDTH):
69
+ p = map_data[y][x]
70
+ if p >= 5:
71
+ p =5
72
+ canvas.create_image(x*62+31, y*62+31, image=images[p])
73
+ #主人公表示
74
+ canvas.create_image(brave_x*62+31, brave_y*62+31,image=images[4], tag="brave")
75
+
76
+ #移動先のチェック
77
+ def check_move(x,y):
78
+ global brave_x, brave_y, flag_key
79
+ if x >= 0 and x <MAX_WIDTH and y >= 0 and y < MAX_HEIGHT:
80
+ p = map_data[y][x]
81
+ if p == 1:
82
+ return
83
+ elif p == 3:
84
+ flag_key = True
85
+ map_data[y][x] = 0
86
+ canvas.delete("all")
87
+ draw_map()
88
+ elif p == 2:
89
+ if flag_key == True:
90
+ ending()
91
+ else:
92
+ return
93
+ elif p >= 5:
94
+ fightmanager.fight_start(map_data, x, y)
95
+ brave_x = x
96
+ brave_y = y
97
+ draw_map()
98
+ # canvas.coords("brave", brave_x*62+31, brave_y*62+31)
99
+
100
+ #上ボタンが押された
101
+ def click_button_up():
102
+ check_move(brave_x, brave_y-1)
103
+ #下ボタンが押された
104
+ def click_button_down():
105
+ check_move(brave_x, brave_y+1)
106
+ #左ボタンが押された
107
+ def click_button_left():
108
+ check_move(brave_x-1, brave_y)
109
+ #右ボタンが押された
110
+ def click_button_right():
111
+ check_move(brave_x+1, brave_y)
112
+ #エンディング表示
113
+ def ending():
114
+ canvas.delete("all")
115
+ canvas.create_rectangle(0, 0, 620, 434, fill="black")
116
+ canvas.create_text(300, 200, fill="white", font=("MS ゴシック", 15),
117
+ text="""
118
+ ゴールおめでとう。
119
+
120
+ だが、君の戦いはまだ始まったばかりだ。
121
+
122
+ ……つづく?""")
123
+ #ボタンを無効化
124
+ button_up["state"] = "disabled"
125
+ button_down["state"] = "disabled"
126
+ button_left["state"] = "disabled"
127
+ button_right["state"] = "disabled"
128
+
129
+
130
+
131
+ #ウインドウ作成
132
+ root = tkinter.Tk()
133
+ root.title("ダンジョン&パイソン")
134
+ root.minsize(840, 454)
135
+ root.option_add("*font",["メイリオ", 14])
136
+ #キャンバス作成
137
+ canvas = tkinter.Canvas(width=620, height="434")
138
+ canvas.place(x =10, y =10)
139
+ canvas.create_rectangle(0, 0, 620, 434, fill="gray")
140
+ #ボタンを配置
141
+ button_up = tkinter.Button(text="↑")
142
+ button_up.place(x=720, y=150)
143
+ button_up["command"] = click_button_up
144
+ button_down = tkinter.Button(text="↓")
145
+ button_down.place(x=720, y=210)
146
+ button_down["command"] = click_button_down
147
+ button_left = tkinter.Button(text="←")
148
+ button_left.place(x=660, y=180)
149
+ button_left["command"] = click_button_left
150
+ button_right = tkinter.Button(text="→")
151
+ button_right.place(x=780, y=180)
152
+ button_right["command"] = click_button_right
153
+
154
+ #画像データを読み込み
155
+ images = [tkinter.PhotoImage(file="12saipython/img6/chap6-mapfield.png"),
156
+ tkinter.PhotoImage(file="12saipython/img6/chap6-mapwall.png"),
157
+ tkinter.PhotoImage(file="12saipython/img6/chap6-mapgoal.png"),
158
+ tkinter.PhotoImage(file="12saipython/img6/chap6-mapkey.png"),
159
+ tkinter.PhotoImage(file="12saipython/img6/chap6-mapman.png"),
160
+ tkinter.PhotoImage(file="12saipython/img6/chap7-mapmonster.png")]
161
+
162
+ #マップデータ
163
+ MAX_WIDTH = 10
164
+ MAX_HEIGHT = 7
165
+ map_data = [[1, 0, 1, 1, 1, 1, 1, 1, 1, 1],
166
+ [1, 0, 0, 1, 2, 0, 6, 1, 3, 1],
167
+ [1, 1, 0, 1, 1, 1, 0, 1, 0, 1],
168
+ [1, 0, 0, 5, 0, 0, 0, 1, 0, 1],
169
+ [1, 0, 1, 1, 1, 1, 1, 1, 6, 1],
170
+ [1, 0, 6, 0, 0, 0, 0, 0, 0, 1],
171
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
172
+ #主人公の位置
173
+ brave_x = 1
174
+ brave_y = 0
175
+
176
+ #鍵取得フラグ
177
+ flag_key = False
178
+
179
+ #戦闘画面の準備
180
+ fightmanager = chap7fight.FightManager()
181
+
182
+ draw_map()
183
+ root.mainloop()
184
+ ```
185
+ ### サブのソースコード(戦闘画面)
186
+
45
187
  ```import tkinter
46
188
 
47
189
  class FightManager:
@@ -90,4 +232,5 @@
90
232
  ### 使用ツールなど
91
233
 
92
234
  環境:Mac OSX
93
- エディタ:Visual Studio Code
235
+ エディタ:Visual Studio Code
236
+ Python3.6.5