Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
1

ребят не могу разобраться почему не работает программ

31.05.2018, 12:33. Показов 1190. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Exception in Tkinter callback
Traceback (most recent call last):
File "c:\program files\python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 117, in pozici_2
hod_kompjutera()#передаём ход компьютеру
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 125, in hod_kompjutera
proverka_hk(0,(),[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 169, in proverka_hk
proverka_hi(tur,[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 211, in proverka_hi
proverka_hk(tur+1,(),[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 169, in proverka_hk
proverka_hi(tur,[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 211, in proverka_hi
proverka_hk(tur+1,(),[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 169, in proverka_hk
proverka_hi(tur,[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 211, in proverka_hi
proverka_hk(tur+1,(),[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 169, in proverka_hk
proverka_hi(tur,[])
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 206, in proverka_hi
t_spisok=hod(0,poz1_x,poz1_y,poz2_x,poz2_y)
File "C:\Users\Soska\Desktop\kyrsah\Tobit.py", line 270, in hod
if pole[y_poz][x_poz]==0:
IndexError: list index out of range
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
from tkinter import *
import random
import time
import copy
 
# constants
WIDTH = 750
HEIGHT = 640
BG_COLOR = 'white'
COLORS ='black'
n2_spisok=()#конечный список ходов компьютера
ur=3#количество предсказываемых компьютером ходов
k_rez=0#!!!
o_rez=0
poz1_x=-1#клетка не задана
f_hi=True#определение хода игрока(да)
 
root = Toplevel()
root.title("ТОБИТ")
 
c1 = Canvas(root, width=WIDTH, height=HEIGHT, bg=BG_COLOR)
c1.pack()
 
def izobrazheniya_peshek():#загружаем изображения пешек
    global peshki
    i1=PhotoImage(file="C:\\Users\\Soska\\Desktop\\kyrsah\\res\\2b.gif")
    i2=PhotoImage(file="C:\\Users\\Soska\\Desktop\\kyrsah\\res\\2bk.gif")
    i3=PhotoImage(file="C:\\Users\\Soska\\Desktop\\kyrsah\\res\\2h.gif")
    i4=PhotoImage(file="C:\\Users\\Soska\\Desktop\\kyrsah\\res\\2hk.gif")
    peshki=[0,i1,i2,i3,i4]
 
def novaya_igra():#начинаем новую игру
    global pole
    pole=[[0,3,3,3,3,3,0],
          [3,3,3,3,3,3,3],
          [0,0,0,0,0,0,0],
          [0,0,0,0,0,0,0],
          [1,1,1,1,1,1,1],
          [0,1,1,1,1,1,0],
          [0,0,0,0,0,0,0]]
 
def vivod(x_poz_1,y_poz_1,x_poz_2,y_poz_2):#создаем поле для игры 
    global peshki
    global pole
    global kr_ramka,zel_ramka
    a=100
    b=10
    k=102
    step=0
    x=0
    c1.delete('all')
    kr_ramka=c1.create_rectangle(-1, -1, -10, -10, outline="red",width=5)
    zel_ramka=c1.create_rectangle(-5, -5, -10, -10, outline="green",width=5)
    for x in range(6):#создаем поле для игры 
        if x == 0 or x == 5 :
            a = 110
            step = 5
        else:
            a = 8
            step = 7
        for y in range(step):#создаем поле для игры 
            c1.create_oval(a, b, a+k, b+k, fill=COLORS, outline=COLORS,width=0)
            a+=102
        a=0
        b+=102
    for y in range(7):#risyem stoichie pehki
        for x in range(6):
            z=pole[x][y]
            if z:
                if (x_poz_1,y_poz_1)!=(x,y):
                    c1.create_image(y*k+10,x*k+10, anchor=NW, image=peshki[z])
    #рисуем активную пешку         
    z=pole[y_poz_1][x_poz_1]
    if z:
        c1.create_image(x_poz_1*k,y_poz_1*k, anchor=NW, image=peshki[z],tag='ani')
    #вычисление коэф. для анимации
    kx = 1 if x_poz_1<x_poz_2 else -1
    ky = 1 if y_poz_1<y_poz_2 else -1
    for i in range(abs(x_poz_1-x_poz_2)):#анимация перемещения пешки
        for ii in range(37):
            c1.move('ani',0.03*k*kx,0.03*k*ky)
            c1.update()#обновление
            time.sleep(0.01)  
          
def soobsenie(s):
    global f_hi
    z='Игра завершена'
    if s==1:
        i=messagebox.askyesno(title=z, message='Вы победили!\nНажми "Да" что бы начать заново.',icon='info')
    if s==2:
        i=messagebox.askyesno(title=z, message='Вы проиграли!\nНажми "Да" что бы начать заново.',icon='info')
    if s==3:
        i=messagebox.askyesno(title=z, message='Ходов больше нет.\nНажми "Да" что бы начать заново.',icon='info')
    if i:
        novaya_igra()
        vivod(-1,-1,-1,-1)#рисуем игровое поле
        f_hi=True#ход игрока доступен          
            
def pozici_1(event):#выбор клетки для хода 1
    x,y=(event.x)//105,(event.y)//105#вычисляем координаты клетки
    c1.coords(zel_ramka,x*105,y*105,x*105+105,y*105+105)#рамка в выбранной клетке
 
def pozici_2(event):#выбор клетки для хода 2
    global poz1_x,poz1_y,poz2_x,poz2_y
    global f_hi
    x,y=(event.x)//105,(event.y)//105#вычисляем координаты клетки
    if pole[y][x]==1 or pole[y][x]==2:#проверяем пешку игрока в выбранной клетке
        c1.coords(kr_ramka,x*105,y*105,x*105+105,y*105+105)#рамка в выбранной клетке
        poz1_x,poz1_y=x,y
    else:
        if poz1_x!=-1:#клетка выбрана
            poz2_x,poz2_y=x,y
            if f_hi:#ход игрока?
                hod_igroka()
                if not(f_hi):
                    time.sleep(0.5)
                    hod_kompjutera()#передаём ход компьютеру
                    #c1.after(500,hod_kompjutera(0))#!!!#передаём ход компьютеру
            poz1_x=-1#клетка не выбрана
            c1.coords(kr_ramka,-5,-5,-5,-5)#рамка вне поля                        
                    
def hod_kompjutera():#!!!
    global f_hi
    global n2_spisok
    proverka_hk(0,(),[])
    if n2_spisok:#проверяем наличие доступных ходов
        kh=len(n2_spisok)#количество ходов
        th=random.randint(0,kh-1)#случайный ход
        dh=len(n2_spisok[th])#длина хода
        for h in n2_spisok:#!!!для отладки!!!
            h=h#!!!для отладки!!!
        for i in range(dh-1):
            #выполняем ход
            spisok=hod(1,n2_spisok[th][i][0],n2_spisok[th][i][1],n2_spisok[th][1+i][0],n2_spisok[th][1+i][1])
        n2_spisok=[]#очищаем список ходов
        f_hi=True#ход игрока доступен
 
    #определяем победителя 
    s_k,s_i=skan()
    if not(s_i):
            soobsenie(2)
    elif not(s_k):
            soobsenie(1)
    elif f_hi and not(spisok_hi()):
            soobsenie(3)
    elif not(f_hi) and not(spisok_hk()):
            soobsenie(3)
 
def spisok_hk():#составляем список ходов компьютера
    spisok=prosmotr_hodov_k1([])#здесь проверяем обязательные ходы
    if not(spisok):
        spisok=prosmotr_hodov_k2([])#здесь проверяем оставшиеся ходы
    return spisok
 
def proverka_hk(tur,n_spisok,spisok):#!!!
    global pole
    global n2_spisok
    global l_rez,k_rez,o_rez
    if not(spisok):#если список ходов пустой...
        spisok=spisok_hk()#заполняем
 
    if spisok:
        k_pole=copy.deepcopy(pole)#копируем поле
        for ((poz1_x,poz1_y),(poz2_x,poz2_y)) in spisok:#проходим все ходы по списку
            t_spisok=hod(0,poz1_x,poz1_y,poz2_x,poz2_y)
            if t_spisok:#если существует ещё ход
                proverka_hk(tur,(n_spisok+((poz1_x,poz1_y),)),t_spisok)
            else:
                proverka_hi(tur,[])
                if tur==1:
                    t_rez=o_rez/k_rez
                    if not(n2_spisok):#записыаем если пустой
                        n2_spisok=(n_spisok+((poz1_x,poz1_y),(poz2_x,poz2_y)),)
                        l_rez=t_rez#сохряняем наилучший результат
                    else:
                        if t_rez==l_rez:
                            n2_spisok=n2_spisok+(n_spisok+((poz1_x,poz1_y),(poz2_x,poz2_y)),)
                        if t_rez>l_rez:
                            n2_spisok=()
                            n2_spisok=(n_spisok+((poz1_x,poz1_y),(poz2_x,poz2_y)),)
                            l_rez=t_rez#сохряняем наилучший результат
                    o_rez=0
                    k_rez=0
 
            pole=copy.deepcopy(k_pole)#возвращаем поле
    else:#???
        s_k,s_i=skan()#подсчёт результата хода
        o_rez+=(s_k-s_i)
        k_rez+=1
 
def spisok_hi():#составляем список ходов игрока
    spisok=prosmotr_hodov_i1([])#здесь проверяем обязательные ходы
    if not(spisok):
        spisok=prosmotr_hodov_i2([])#здесь проверяем оставшиеся ходы
    return spisok
    
def proverka_hi(tur,spisok):
    global pole,k_rez,o_rez
    global ur
    if not(spisok):
        spisok=spisok_hi()
 
    if spisok:#проверяем наличие доступных ходов
        k_pole=copy.deepcopy(pole)#копируем поле
        for ((poz1_x,poz1_y),(poz2_x,poz2_y)) in spisok:                    
            t_spisok=hod(0,poz1_x,poz1_y,poz2_x,poz2_y)
            if t_spisok:#если существует ещё ход
                proverka_hi(tur,t_spisok)
            else:
                if tur<ur:
                    proverka_hk(tur+1,(),[])
                else:
                    s_k,s_i=skan()#подсчёт результата хода
                    o_rez+=(s_k-s_i)
                    k_rez+=1
 
            pole=copy.deepcopy(k_pole)#возвращаем поле
    else:#доступных ходов нет
        s_k,s_i=skan()#подсчёт результата хода
        o_rez+=(s_k-s_i)
        k_rez+=1
 
def skan():#подсчёт пешек на поле
    global pole
    s_i=0
    s_k=0
    for i in range(6):
        for ii in pole[i]:
            if ii==1:s_i+=1
            if ii==2:s_i+=3
            if ii==3:s_k+=1
            if ii==4:s_k+=3
    return s_k,s_i
 
def hod_igroka():
    global poz1_x,poz1_y,poz2_x,poz2_y
    global f_hi
    f_hi=False#считаем ход игрока выполненным
    spisok=spisok_hi()
    if spisok:
        if ((poz1_x,poz1_y),(poz2_x,poz2_y)) in spisok:#проверяем ход на соответствие правилам игры
            t_spisok=hod(1,poz1_x,poz1_y,poz2_x,poz2_y)#если всё хорошо, делаем ход            
            if t_spisok:#если есть ещё ход той же пешкой
                f_hi=True#считаем ход игрока невыполненным
        else:
            f_hi=True#считаем ход игрока невыполненным
    c1.update()#!!!обновление
 
def hod(f,poz1_x,poz1_y,poz2_x,poz2_y):
    global pole
    if f:vivod(poz1_x,poz1_y,poz2_x,poz2_y)#рисуем игровое поле
    #превращение
    if poz2_y==0 and pole[poz1_y][poz1_x]==1:
        pole[poz1_y][poz1_x]=2
    #превращение
    if poz2_y==6 and pole[poz1_y][poz1_x]==3:
        pole[poz1_y][poz1_x]=4
    #делаем ход           
    pole[poz2_y][poz2_x]=pole[poz1_y][poz1_x]
    pole[poz1_y][poz1_x]=0
 
    #рубим пешку игрока
    kx=ky=1
    if poz1_x<poz2_x:kx=-1
    if poz1_y<poz2_y:ky=-1
    x_poz,y_poz=poz2_x,poz2_y
    while (poz1_x!=x_poz) or (poz1_y!=y_poz):
        x_poz+=kx
        y_poz+=ky
        if pole[y_poz][x_poz]==0:
            pole[y_poz][x_poz]=0
            if f:vivod(-1,-1,-1,-1)#рисуем игровое поле
            #проверяем ход той же пешкой...
            if pole[poz2_y][poz2_x]==3 or pole[poz2_y][poz2_x]==4:#...компьютера
                return prosmotr_hodov_k1p([],poz2_x,poz2_y)#возвращаем список доступных ходов
            elif pole[poz2_y][poz2_x]==1 or pole[poz2_y][poz2_x]==2:#...игрока
                return prosmotr_hodov_i1p([],poz2_x,poz2_y)#возвращаем список доступных ходов
    if f:vivod(poz1_x,poz1_y,poz2_x,poz2_y)#рисуем игровое поле
 
def prosmotr_hodov_k1(spisok):#проверка наличия обязательных ходов
    for y in range(7):#сканируем всё поле
        for x in range(7):
            spisok=prosmotr_hodov_k1p(spisok,x,y)
    return spisok
 
def prosmotr_hodov_k1p(spisok,x,y):
    if pole[y][x]==3:#пешка
        for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
            if 0<=y+iy+iy<=6 and 0<=x+ix+ix<=6:
                if pole[y+iy][x+ix]==1 or pole[y+iy][x+ix]==2:
                    if pole[y+iy+iy][x+ix+ix]==0:
                        spisok.append(((x,y),(x+ix+ix,y+iy+iy)))#запись хода в конец списка
    if pole[y][x]==4:#пешка с короной
        for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
            osh=0#определение правильности хода
            for i in  range(1,7):
                if 0<=y+iy*i<=6 and 0<=x+ix*i<=6:
                    if osh==1:
                        spisok.append(((x,y),(x+ix*i,y+iy*i)))#запись хода в конец списка
                    if pole[y+iy*i][x+ix*i]==1 or pole[y+iy*i][x+ix*i]==2:
                        osh+=1
                    if pole[y+iy*i][x+ix*i]==3 or pole[y+iy*i][x+ix*i]==4 or osh==2:
                        if osh>0:spisok.pop()#удаление хода из списка
                        break
    return spisok
 
def prosmotr_hodov_k2(spisok):#проверка наличия остальных ходов
    for y in range(7):#сканируем всё поле
        for x in range(7):
            if pole[y][x]==3:#пешка
                for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
                    if 0<=y+iy<=6 and 0<=x+ix<=6:
                        if pole[y+iy][x+ix]==0:
                            spisok.append(((x,y),(x+ix,y+iy)))#запись хода в конец списка
                        if pole[y+iy][x+ix]==1 or pole[y+iy][x+ix]==2:
                            if 0<=y+iy*2<=6 and 0<=x+ix*2<=6:
                                if pole[y+iy*2][x+ix*2]==0:
                                    spisok.append(((x,y),(x+ix*2,y+iy*2)))#запись хода в конец списка                  
            if pole[y][x]==4:#пешка с короной
                for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
                    osh=0#определение правильности хода
                    for i in range(1,7):
                        if 0<=y+iy*i<=6 and 0<=x+ix*i<=6:
                            if pole[y+iy*i][x+ix*i]==0:
                                spisok.append(((x,y),(x+ix*i,y+iy*i)))#запись хода в конец списка
                            if pole[y+iy*i][x+ix*i]==1 or pole[y+iy*i][x+ix*i]==2:
                                osh+=1
                            if pole[y+iy*i][x+ix*i]==3 or pole[y+iy*i][x+ix*i]==4 or osh==2:
                                break
    return spisok
 
def prosmotr_hodov_i1(spisok):#проверка наличия обязательных ходов
    spisok=[]#список ходов
    for y in range(7):#сканируем всё поле
        for x in range(7):
            spisok=prosmotr_hodov_i1p(spisok,x,y)
    return spisok
 
def prosmotr_hodov_i1p(spisok,x,y):
    if pole[y][x]==1:#пешка
        for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
            if 0<=y+iy+iy<=6 and 0<=x+ix+ix<=6:
                if pole[y+iy][x+ix]==3 or pole[y+iy][x+ix]==4:
                    if pole[y+iy+iy][x+ix+ix]==0:
                        spisok.append(((x,y),(x+ix+ix,y+iy+iy)))#запись хода в конец списка
    if pole[y][x]==2:#пешка с короной
        for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
            osh=0#определение правильности хода
            for i in  range(1,7):
                if 0<=y+iy*i<=6 and 0<=x+ix*i<=6:
                    if osh==1:
                        spisok.append(((x,y),(x+ix*i,y+iy*i)))#запись хода в конец списка
                    if pole[y+iy*i][x+ix*i]==3 or pole[y+iy*i][x+ix*i]==4:
                        osh+=1
                    if pole[y+iy*i][x+ix*i]==1 or pole[y+iy*i][x+ix*i]==2 or osh==2:
                        if osh>0:spisok.pop()#удаление хода из списка
                        break
    return spisok
 
def prosmotr_hodov_i2(spisok):#проверка наличия остальных ходов
    for y in range(7):#сканируем всё поле
        for x in range(7):
            if pole[y][x]==1:#пешка
                for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
                    if 0<=y+iy<=6 and 0<=x+ix<=6:
                        if pole[y+iy][x+ix]==0:
                            spisok.append(((x,y),(x+ix,y+iy)))#запись хода в конец списка
                        if pole[y+iy][x+ix]==3 or pole[y+iy][x+ix]==4:
                            if 0<=y+iy*2<=6 and 0<=x+ix*2<=6:
                                if pole[y+iy*2][x+ix*2]==0:
                                    spisok.append(((x,y),(x+ix*2,y+iy*2)))#запись хода в конец списка                  
            if pole[y][x]==2:#пешка с короной
                for ix,iy in (-1,0),(0,1),(1,0),(0,-1):
                    osh=0#определение правильности хода
                    for i in range(1,7):
                        if 0<=y+iy*i<=6 and 0<=x+ix*i<=6:
                            if pole[y+iy*i][x+ix*i]==0:
                                spisok.append(((x,y),(x+ix*i,y+iy*i)))#запись хода в конец списка
                            if pole[y+iy*i][x+ix*i]==3 or pole[y+iy*i][x+ix*i]==4:
                                osh+=1
                            if pole[y+iy*i][x+ix*i]==1 or pole[y+iy*i][x+ix*i]==2 or osh==2:
                                break
    return spisok                    
                    
                    
c1.bind("<Motion>", pozici_1)#движение мышки по полю
c1.bind("<Button-1>", pozici_2)#нажатие левой кнопки
izobrazheniya_peshek()#здесь загружаем изображения пешек
novaya_igra()#начинаем новую игру
vivod(-1,-1,-1,-1)#рисуем игровое поле                    
root.mainloop()
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2018, 12:33
Ответы с готовыми решениями:

Не могу разобраться, почему не работает код
Я еще только начинаю изучать javascript, поэтому обращаюсь за помощью. Условие задачи звучит так:...

Не могу разобраться, почему не работает программа
# -*- coding: utf-8 -*- words = words1 = for x in words: print(x) if x == &quot;x&quot;: ...

Коллекции.Не могу разобраться почему не работает сортировка и поиск
Ребят вся надежда на вас не могу найти ошибки в коде работа моя залита тут:...

Ребят не могу разобраться?
Ребят нужна помощь по этой ошибке,из отдела форм отправили сюда(...

Ребят я туту разобраться кое с чем не могу
помогите это сделать очень тяжко

13
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
31.05.2018, 19:16 2
Не работает потому, что алгоритм программы разработан для игры шашки, а у вас другая игра и ошибок там много, это просто первая появившаяся
Чтобы заработало, надо переделать алгоритм под вашу игру
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
31.05.2018, 19:40  [ТС] 3
ТабуретY, помогите сделать пожалуйста а то я вообще запутался
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
31.05.2018, 19:43 4
Как называется игра? где прочитать о ее правилах?
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
31.05.2018, 19:55  [ТС] 5
ТабуретY,
игра называется Тобит вот ссылка https://ru.wikipedia.org/wiki/Тобит

Добавлено через 32 секунды
ТабуретY, https://infourok.ru/master-kla... 26690.html вот еще источник
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
02.06.2018, 08:58  [ТС] 6
ТабуретY, вы мне поможете ?
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
02.06.2018, 09:17 7
Не знаю, как будет настроение, спросите в понедельник
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
02.06.2018, 12:57  [ТС] 8
ТабуретY, мне в понедельник курсачь уже сдавать ахахах
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
02.06.2018, 13:07 9

Не по теме:

Как-то вы поздновато шевелиться начали



Какие минимальные требования к программе?
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
02.06.2018, 13:26  [ТС] 10
ТабуретY, построение игрового поля размещение фишек на поле и реализация игры человек компьютер
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
02.06.2018, 13:28  [ТС] 11
ТабуретY, вот картинки фишек
Вложения
Тип файла: rar res.rar (36.9 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
02.06.2018, 13:28  [ТС] 12
ТабуретY, да у нас препод не совсем адекватный =))
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
03.06.2018, 10:33 13
Лучший ответ Сообщение было отмечено Примик как решение

Решение

Нет анимационных эффектов, компьютер выбирает ходы случайным образом, проблемы если несколько шашек под боем

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
from random import randint
import time
from tkinter import *
 
pole = {
      34:3, 35:3, 36:3, 37:3, 38:3, 
27:3, 28:3, 29:3, 30:3, 31:3, 32:3, 33:3, 
20:0, 21:0, 22:0, 23:0, 24:0, 25:0, 26:0,
13:0, 14:0, 15:0, 16:0, 17:0, 18:0, 19:0, 
 6:1,  7:1,  8:1,  9:1, 10:1, 11:1, 12:1, 
       1:1,  2:1,  3:1,  4:1,  5:1}
 
trans_table = {
1:{'up':7}, 
2:{'up':8}, 
3:{'up':9}, 
4:{'up':10}, 
5:{'up':11},
6:{'right':7}, 
7:{'left':6, 'up':14, 'right': 8, 'down': 1},
8:{'left':7, 'up':15, 'right': 9, 'down': 2},
9:{'left':8, 'up':16, 'right': 10, 'down': 3},
10:{'left':9, 'up':17, 'right': 11, 'down': 4},
11:{'left':10, 'up':18, 'right': 12, 'down': 5},
12:{'left':11},
13:{'right': 14},
14:{'left':13, 'up':21, 'right': 15, 'down': 7},
15:{'left':14, 'up':22, 'right': 16, 'down': 8},
16:{'left':15, 'up':23, 'right': 17, 'down': 9},
17:{'left':16, 'up':24, 'right': 18, 'down': 10},
18:{'left':17, 'up':25, 'right': 19, 'down': 11},
19:{'left':18},
20:{'right': 21},
21:{'left':20, 'up':28, 'right': 22, 'down': 14},
22:{'left':21, 'up':29, 'right': 23, 'down': 15},
23:{'left':22, 'up':30, 'right': 24, 'down': 16},
24:{'left':23, 'up':31, 'right': 25, 'down': 17},
25:{'left':24, 'up':32, 'right': 26, 'down': 18},
26:{'left':25},
27:{'right': 28},
28:{'left':27, 'up':34, 'right': 29, 'down': 21},
29:{'left':29, 'up':35, 'right': 30, 'down': 22},
30:{'left':28, 'up':36, 'right': 31, 'down': 23},
31:{'left':30, 'up':37, 'right': 32, 'down': 24},
32:{'left':31, 'up':38, 'right': 33, 'down': 25},
33:{'left':32},
34:{'down': 28},
35:{'down': 29},
36:{'down': 30},
37:{'down': 31},
38:{'down': 32},
}
 
white_tobit = list(range(34, 39))
black_tobit = list(range(1, 6))
 
root = Tk()
root.title('Тобит')#заголовок окна
chols = []
white_chol=PhotoImage(file="res\\2b.gif")
black_chol=PhotoImage(file="res\\2h.gif")
white_tob=PhotoImage(file="res\\2bk.gif")
black_tob=PhotoImage(file="res\\2hk.gif")
pos1 = -1
pos2= -1
turn = 1
win = -1
 
def callback(event):
    global pos1,pos2
    x = int(str(event.widget).split(".")[-1])
    if pole[x] == 1 or pole[x] == 2:
            pos1 = x
    else:
        if pos1 !=-1:
            y = int(str(event.widget).split(".")[-1])
            if turn:
                move_player(pos1,y)
                if not turn:
                    time.sleep(0.5)
                    move_comp()
            pos1 = -1
 
 
def move_player(x,y):
    global turn, win
    white_req_moves = обязательные_ходы_белых()
    white_moves = проверка_всех_ходов_белыми()
    if len(white_req_moves) == 0 and len(white_moves) == 0:
        return
    if len(white_req_moves) > 0:
        if not (x,y) in white_req_moves:
            print('Есть обязательные ходы')
        else:
            ход_белых(x, y)
            white_req_moves = обязательные_ходы_белых()
            if len(white_req_moves) == 0:
                turn = 0
    elif len(white_moves) > 0:
        if not (x,y) in white_moves:
            print('Неправильный ход')
        else:
            ход_белых(x, y)
            turn = 0
    black_req_moves = обязательные_ходы_черными()
    black_moves = проверка_всех_ходов_черными()
    if len(black_req_moves) == 0 and len(black_moves) == 0:
        win = 1
        draw()
 
def move_comp():
    global turn, win
    black_req_moves = обязательные_ходы_черными()
    black_moves = проверка_всех_ходов_черными()
    if len(black_req_moves) == 0 and len(black_moves) == 0:
        return
    if len(black_req_moves) > 0:
        while len(black_req_moves) != 0:
            m = randint(0, len(black_req_moves)-1)
            x,y = black_req_moves[m]
            ход_черных(x, y)
            black_req_moves = обязательные_ходы_черными()
        turn = 1
    elif len(black_moves) > 0:
        m = randint(0, len(black_moves)-1)
        x,y = black_moves[m]
        ход_черных(x, y)
        turn = 1
    white_req_moves = обязательные_ходы_белых()
    white_moves = проверка_всех_ходов_белыми()
    if len(white_req_moves) == 0 and len(white_moves) == 0:
        win = 0
        draw()
 
def draw_chol(x, y, i):
        b=Canvas(root, name=str(i), width=130,height=130,bg='#FFFFFF')
        if x==0 and y==0 or x==5 and y==0 or x==5 and y==6 or x==0 and y==6:
            return b, i
        b.create_oval(30, 30, 100, 100, fill="grey", outline="#DDD", width=4)
        b.create_oval(45, 45, 85, 85, fill="white")
        b.create_text(65,65,fill="darkblue",font="Times 20 italic bold",text=str(i))
        #право
        if not i in [1,2,3,4,5,12,19,26,33,34,35,36,37,38]:
            b.create_line(100, 65, 200, 65, fill="lightgrey", width=10.0)
        #низ
        if not i in [1,2,3,4,5,12,19,26,33,6,13,20,27]:
            b.create_line(65, 100, 65, 200, fill="lightgrey", width=10.0)
        #лево
        if not i in [1,2,3,4,5,6,13,20,27,34,35,36,37,38]:
            b.create_line(30, 65, 0, 65, fill="lightgrey", width=10.0)
        #верх
        if not i in [6,13,20,27,12,19,26,33,34,35,36,37,38]:
            b.create_line(65, 30, 65, 0, fill="lightgrey", width=10.0)
        b.bind("<Button-1>", callback)
        i += 1
        return b, i
 
def draw():
    global win
    for widget in root.winfo_children():
        widget.destroy()
 
    if win == 1:
        ww = Canvas(root, width=910,height=780,bg='#FFFFFF')
        ww.create_text(465,365,fill="darkblue",font="Times 55 italic bold",text='Победили белые')
        ww.grid(row=0, column=0)
        return
 
    if win == 0:
        ww = Canvas(root, width=910,height=780,bg='#FFFFFF')
        ww.create_text(465,365,fill="darkblue",font="Times 55 italic bold",text='Победили черные')
        ww.grid(row=0, column=0)
        return
 
    i = 1
    for x in range(5, -1, -1):
        for y in range(7):
            b, i = draw_chol(x,y,i)
            chols.append(b)
            b.grid(row=x, column=y)
 
    for ch in range(1,39):
        if pole[ch] == 1:
            b = root.nametowidget(str(ch))
            b.create_image(15,15, anchor=NW, image=white_chol)
        if pole[ch] == 3:
            b = root.nametowidget(str(ch))
            b.create_image(15,15, anchor=NW, image=black_chol)
        if pole[ch] == 2:
            b = root.nametowidget(str(ch))
            b.create_image(15,15, anchor=NW, image=white_tob)
        if pole[ch] == 4:
            b = root.nametowidget(str(ch))
            b.create_image(15,15, anchor=NW, image=black_tob)
 
def проверка_всех_ходов_белыми():
    moves = []
    for place,color in pole.items():
        if color == 1:
            for direct,to in trans_table[place].items():
                if direct != 'down' and pole[to] == 0:
                    moves.append((place, to))
        if color == 2:
            for direct,to in trans_table[place].items():
                if pole[to] == 0:
                    moves.append((place, to))
    return moves
 
 
def обязательные_ходы_белых():
    moves = []
    for place,color in pole.items():
        if color == 1 or color == 2:
            for direct,to in trans_table[place].items():
                if pole[to] == 3 or pole[to] == 4:
                    if direct in trans_table[to]:
                        if pole[trans_table[to][direct]] == 0:
                            moves.append((place, trans_table[to][direct]))
    return moves
 
 
def ход_белых(x,y):
    global pole
    if y in trans_table[x].values():
        if y in white_tobit or pole[x] == 2:
            pole[x] = 0
            pole[y] = 2
        else:
            pole[x] = 0
            pole[y] = 1
    else:
        for n in trans_table[x].values():
            if n in trans_table[y].values():
                if y in white_tobit or pole[x] == 2:
                    pole[n] = 0
                    pole[x] = 0
                    pole[y] = 2
                else:
                    pole[n] = 0
                    pole[x] = 0
                    pole[y] = 1
    draw()
 
 
def проверка_всех_ходов_черными():
    moves = []
    for place,color in pole.items():
        if color == 3:
            for direct,to in trans_table[place].items():
                if direct != 'up' and pole[to] == 0:
                    moves.append((place, to))
        if color == 4:
            for direct,to in trans_table[place].items():
                if pole[to] == 0:
                    moves.append((place, to))
    return moves
 
 
def обязательные_ходы_черными():
    moves = []
    for place,color in pole.items():
        if color == 3 or color == 4:
            for direct,to in trans_table[place].items():
                if pole[to] == 1 or pole[to] == 2:
                    if direct in trans_table[to]:
                        if pole[trans_table[to][direct]] == 0:
                            moves.append((place, trans_table[to][direct]))
    return moves
 
 
def ход_черных(x,y):
    global pole
    if y in trans_table[x].values():
        if y in black_tobit or pole[x] == 4:
            pole[x] = 0
            pole[y] = 4
        else:
            pole[x] = 0
            pole[y] = 3
    else:
        for n in trans_table[x].values():
            if n in trans_table[y].values():
                if y in black_tobit or pole[x] == 4:
                    pole[n] = 0
                    pole[x] = 0
                    pole[y] = 4
                else:
                    pole[n] = 0
                    pole[x] = 0
                    pole[y] = 3
    draw()
 
draw()
root.mainloop()
1
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 10
03.06.2018, 10:53  [ТС] 14
ТабуретY, спасибо большое вы меня прям выручили
0
03.06.2018, 10:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2018, 10:53
Помогаю со студенческими работами здесь

Ребят, подскажите, не могу разобраться, плохо ноут ловит Wi-Fi!
В общем, такая ситуация, ноутбук плохо принимает Wi-Fi, драйвера поменял ничего, а главное с...

Не могу разобраться, почему при компиляции моя программа не работает? Варнингов 0 только вызывает исключение
Вообще нужно ввести в TextBox1 текст любого размера при нажатии на кнопку кодирования чтобы текст...

Не могу разобраться почему не работает прога. Слетает после вывода на экран 'Список искомых книг'
program Project1; {$APPTYPE CONSOLE} uses SysUtils; type book=record ...

Ребят может поможет кто, не могу разобраться с переключателями. VBA
Выполнить задания, используя переключатели. а) Выбирается число от 1 до 7, определяющее день...

Ребят не могу разобраться /новичок (Программа разница во времени и дате )
Ребят , хочу сделать програмулину которая будет считать количество дней и рабочих часов от...

Ребят, задачи по Delphi ,*совсем разобраться сама не могу. Кто поможет?
Очень сильно нуждаюсь в вашей помощи.:wall: P.S Вот зачем же девушкам Delphi )))?:-[


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru