Форум сайта python.su
На шахматной доске стоят черный король и былые ладья и слон(ладья бьет по вертикали и горизонтали, слон бьет по диагоналям). Проверить есть ли угроза королю и если есть, то от кого именно. Учесть возможность защиты(например ладья не бьет через слона и т.д)
Офлайн
Я делал так: при каждом изменении положения фигур для каждой из них я генерировал список в возможными ходами фигуры, если король противника входил в этот список, объявляем шах.
Офлайн
А код можешь прислать?
Офлайн
легко http://pastebin.com/6B3cZYzz
надеюсь не из УПИ?
Офлайн
Не
Офлайн
Спасибо огромное!!
Офлайн
А она рабочая или ее подредактировать надо?
Офлайн
doska = [[0 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska): #doska dlya naglyadnosti
for i in doska:
print i
print '-------------------------------------'
print_doska(doska)
f = [[0,0],[0,0],[0,0]] #1 - korol 2- slon 3-tura
for i in xrange(3):
f[i][0] = input() #koordinata po gorizontali
f[i][1] = input() #po verticali
doska[f[i][0]][f[i][1]] = i + 1 #oboznochaem figuru, dlya naglyadnosti. na algoritm ne vliyaet
print_doska(doska)
def check_tura(f):
if f[0][0] == f[2][0]:
if (f[0][0]==f[1][0]) and ((f[0][1]<f[1][1]<f[2][1]) or (f[2][1]<f[1][1]<f[0][1])): return False
else: return True
elif f[0][1] == f[2][1]:
if (f[0][1]==f[1][1]) and ((f[0][0]<f[1][0]<f[2][0]) or (f[2][0]<f[1][0]<f[0][0])): return False
else: return True
else: return False
def check_officer(f):
if (f[0][0]-f[1][0]==f[0][1]-f[1][1]):
if (f[0][0]-f[2][0]==f[0][1]-f[2][1]):
if ((f[0][0]<f[2][0]<f[1][0]) and (f[0][1]<f[2][1]<f[1][1])) or \
((f[0][0]>f[2][0]>f[1][0]) and (f[0][1]<f[2][1]<f[1][1])) or \
((f[0][0]<f[2][0]<f[1][0]) and (f[0][1]>f[2][1]>f[1][1])) or \
((f[0][0]>f[2][0]>f[1][0]) and (f[0][1]>f[2][1]>f[1][1])):
return False
else: return True
else: return True
else: return False
#esli functsiyi vozvrashayut True - znachit korol' pod udarom
print 'Bjet tura - ', check_tura(f), ', bjet officer - ', check_officer(f)
Отредактировано (Июль 5, 2011 23:12:50)
Офлайн
Благодарю!!
Офлайн
А у меня чуть другая задача не поможите????
На шахматной доске определите поля,в которые может попасть конь за n ходов из указанной позиции. Результат отобразить на экране.
Офлайн