質問編集履歴

2

プログラム処理の内容などを記述しました。

2020/07/28 13:43

投稿

mayataka
mayataka

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,12 @@
1
- 8パズルをpythonで組んでるのですが、うまく作動しません
1
+ パズルのプログラムにつて質問です。
2
-
2
+
3
- のようなプログラムなのですが、どのありが間違っているか教えてください
3
+ 下のような仕様に改良したいです。(回答していただいたプログラムコードも追加しました。
4
+
5
+ 1.パネルが正解の位置に動かせたらそのパネルを固定したい。
6
+
7
+ 2.空白パネル(pice0)を斜めに交換出来てしまうので、斜め移動できないようにしたい。
8
+
9
+ どうすればよろしいでしょうか。
4
10
 
5
11
 
6
12
 
@@ -14,6 +20,8 @@
14
20
 
15
21
 
16
22
 
23
+ # 指定された番号がどの位置に表示されているか返却する
24
+
17
25
  def searchPiceIndex(pice_num):
18
26
 
19
27
  for idx, num in pice_dict.items():
@@ -24,6 +32,8 @@
24
32
 
25
33
 
26
34
 
35
+ # クリックイベントの定義
36
+
27
37
  def clickPice(event):
28
38
 
29
39
  num = int(event.widget['text'])
@@ -32,34 +42,48 @@
32
42
 
33
43
 
34
44
 
45
+ drawPice()
46
+
47
+
48
+
35
49
  if pice_dict==answer_dict:
36
50
 
37
51
  close()
38
52
 
39
53
 
40
54
 
55
+ # クリア処理
56
+
41
57
  def close():
42
58
 
43
59
  messagebox.showinfo('完成',message='完成しました')
44
60
 
45
61
  root.destroy()
46
62
 
63
+
64
+
47
-
65
+ # 指定した数字のピースと0のピースの入替
48
66
 
49
67
  def changePice(num):
50
68
 
69
+ # クリックしたピースと0のピースの位置の特定
70
+
51
71
  num_index = searchPiceIndex(num)
52
72
 
53
73
  zero_index = searchPiceIndex(0)
54
74
 
55
75
 
56
76
 
77
+ # ピース位置管理の入替
78
+
57
79
  pice_dict[num_index] = 0
58
80
 
59
81
  pice_dict[zero_index] = num
60
82
 
61
83
 
62
84
 
85
+ # 表示するピースの入替
86
+
63
87
  pice_label_dict[num_index].configure(text=0)
64
88
 
65
89
  pice_label_dict[zero_index].configure(text=num)
@@ -68,6 +92,8 @@
68
92
 
69
93
 
70
94
 
95
+ # 禁則事項の処理
96
+
71
97
  def canSwapSpacePice(num):
72
98
 
73
99
  zero_idx = searchPiceIndex(0)
@@ -106,23 +132,25 @@
106
132
 
107
133
 
108
134
 
135
+ # ピース位置管理のランダム生成、解答生成
136
+
109
- pice_dict = {}
137
+ pice_dict = {} # ピース位置管理
110
-
138
+
111
- answer_dict = {1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:0}
139
+ answer_dict = {1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:0} #解答
112
-
113
-
114
-
140
+
141
+
142
+
115
- pice_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8]
143
+ pice_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8] # 表示する番号の種類
116
-
144
+
117
- random_pice_list = random.sample(pice_numbers, 9)
145
+ random_pice_list = random.sample(pice_numbers, 9) # 表示する番号をランダムに並べ替え
118
146
 
119
147
  for idx in range(1, 10):
120
148
 
121
- pice_dict[idx] = random_pice_list[idx - 1]
149
+ pice_dict[idx] = random_pice_list[idx - 1] # ランダムな値をセット
150
+
151
+
152
+
122
-
153
+ # ウィンドウ生成
123
-
124
-
125
-
126
154
 
127
155
  root = tk.Tk()
128
156
 
@@ -134,6 +162,8 @@
134
162
 
135
163
 
136
164
 
165
+ # 画像読み込み
166
+
137
167
  pice_image = {}
138
168
 
139
169
  pice_image[0] = tk.PhotoImage(file='./image/0.png')
@@ -156,97 +186,107 @@
156
186
 
157
187
 
158
188
 
189
+ # ピースの配列生成
190
+
159
191
  pice_label_dict = {}
160
192
 
161
193
 
162
194
 
163
- pice1 = tk.Label(flm, text=pice_dict[1], image = pice_image[pice_dict[1]])
164
-
165
- pice1.grid(column=0, row=0, padx=30, pady=30)
166
-
167
- pice1.bind('<1>', clickPice)
168
-
169
- pice_label_dict[1] = pice1
170
-
171
-
172
-
173
- pice2 = tk.Label(flm, text=pice_dict[2], image = pice_image[pice_dict[2]])
174
-
175
- pice2.grid(column=1, row=0, padx=30, pady=30)
176
-
177
- pice2.bind('<1>', clickPice)
178
-
179
- pice_label_dict[2] = pice2
180
-
181
-
182
-
183
- pice3 = tk.Label(flm, text=pice_dict[3], image = pice_image[pice_dict[3]])
184
-
185
- pice3.grid(column=2, row=0, padx=30, pady=30)
186
-
187
- pice3.bind('<1>', clickPice)
188
-
189
- pice_label_dict[3] = pice3
190
-
191
-
192
-
193
- pice4 = tk.Label(flm, text=pice_dict[4], image = pice_image[pice_dict[4]])
194
-
195
- pice4.grid(column=0, row=1, padx=30, pady=30)
196
-
197
- pice4.bind('<1>', clickPice)
198
-
199
- pice_label_dict[4] = pice4
200
-
201
-
202
-
203
- pice5 = tk.Label(flm, text=pice_dict[5], image = pice_image[pice_dict[5]])
204
-
205
- pice5.bind('<1>', clickPice)
206
-
207
- pice5.grid(column=1, row=1, padx=30, pady=30)
208
-
209
- pice_label_dict[5] = pice5
210
-
211
-
212
-
213
- pice6 = tk.Label(flm, text=pice_dict[6], image = pice_image[pice_dict[6]])
214
-
215
- pice6.bind('<1>', clickPice)
216
-
217
- pice6.grid(column=2, row=1, padx=30, pady=30)
218
-
219
- pice_label_dict[6] = pice6
220
-
221
-
222
-
223
- pice7 = tk.Label(flm, text=pice_dict[7],image = pice_image[pice_dict[7]] )
224
-
225
- pice7.grid(column=0, row=2, padx=30, pady=30)
226
-
227
- pice7.bind('<1>', clickPice)
228
-
229
- pice_label_dict[7] = pice7
230
-
231
-
232
-
233
- pice8 = tk.Label(flm, text=pice_dict[8], image = pice_image[pice_dict[8]])
234
-
235
- pice8.grid(column=1, row=2, padx=30, pady=30)
236
-
237
- pice8.bind('<1>', clickPice)
238
-
239
- pice_label_dict[8] = pice8
240
-
241
-
242
-
243
- pice0 = tk.Label(flm, text=pice_dict[9], image = pice_image[pice_dict[9]])
244
-
245
- pice0.grid(column=2, row=2, padx=30, pady=30)
246
-
247
- pice0.bind('<1>', clickPice)
248
-
249
- pice_label_dict[9] = pice0
195
+ def drawPice():
196
+
197
+  # ピース生成
198
+
199
+ pice1 = tk.Label(flm, text=pice_dict[1], image = pice_image[pice_dict[1]])
200
+
201
+ pice1.grid(column=0, row=0, padx=30, pady=30)
202
+
203
+ pice1.bind('<1>', clickPice)
204
+
205
+ pice_label_dict[1] = pice1
206
+
207
+
208
+
209
+ pice2 = tk.Label(flm, text=pice_dict[2], image = pice_image[pice_dict[2]])
210
+
211
+ pice2.grid(column=1, row=0, padx=30, pady=30)
212
+
213
+ pice2.bind('<1>', clickPice)
214
+
215
+ pice_label_dict[2] = pice2
216
+
217
+
218
+
219
+ pice3 = tk.Label(flm, text=pice_dict[3], image = pice_image[pice_dict[3]])
220
+
221
+ pice3.grid(column=2, row=0, padx=30, pady=30)
222
+
223
+ pice3.bind('<1>', clickPice)
224
+
225
+ pice_label_dict[3] = pice3
226
+
227
+
228
+
229
+ pice4 = tk.Label(flm, text=pice_dict[4], image = pice_image[pice_dict[4]])
230
+
231
+ pice4.grid(column=0, row=1, padx=30, pady=30)
232
+
233
+ pice4.bind('<1>', clickPice)
234
+
235
+ pice_label_dict[4] = pice4
236
+
237
+
238
+
239
+ pice5 = tk.Label(flm, text=pice_dict[5], image = pice_image[pice_dict[5]])
240
+
241
+ pice5.bind('<1>', clickPice)
242
+
243
+ pice5.grid(column=1, row=1, padx=30, pady=30)
244
+
245
+ pice_label_dict[5] = pice5
246
+
247
+
248
+
249
+ pice6 = tk.Label(flm, text=pice_dict[6], image = pice_image[pice_dict[6]])
250
+
251
+ pice6.bind('<1>', clickPice)
252
+
253
+ pice6.grid(column=2, row=1, padx=30, pady=30)
254
+
255
+ pice_label_dict[6] = pice6
256
+
257
+
258
+
259
+ pice7 = tk.Label(flm, text=pice_dict[7],image = pice_image[pice_dict[7]])
260
+
261
+ pice7.grid(column=0, row=2, padx=30, pady=30)
262
+
263
+ pice7.bind('<1>', clickPice)
264
+
265
+ pice_label_dict[7] = pice7
266
+
267
+
268
+
269
+ pice8 = tk.Label(flm, text=pice_dict[8], image = pice_image[pice_dict[8]])
270
+
271
+ pice8.grid(column=1, row=2, padx=30, pady=30)
272
+
273
+ pice8.bind('<1>', clickPice)
274
+
275
+ pice_label_dict[8] = pice8
276
+
277
+
278
+
279
+ pice0 = tk.Label(flm, text=pice_dict[9], image = pice_image[pice_dict[9]])
280
+
281
+ pice0.grid(column=2, row=2, padx=30, pady=30)
282
+
283
+ pice0.bind('<1>', clickPice)
284
+
285
+ pice_label_dict[9] = pice0
286
+
287
+
288
+
289
+ drawPice()
250
290
 
251
291
 
252
292
 

1

コード変更しました。

2020/07/28 13:42

投稿

mayataka
mayataka

スコア0

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
 
6
6
 
7
+ ```
8
+
7
9
  import tkinter as tk
8
10
 
9
11
  import random
@@ -251,3 +253,5 @@
251
253
  flm.pack(side='top', pady=40)
252
254
 
253
255
  root.mainloop()
256
+
257
+ ```