Найти - Пользователи
Полная версия: помогите написать прогу, или подскажите алгоритм
Начало » Центр помощи » помогите написать прогу, или подскажите алгоритм
1 2 3 4
Nekron
На шахматной доске стоят черный король и былые ладья и слон(ладья бьет по вертикали и горизонтали, слон бьет по диагоналям). Проверить есть ли угроза королю и если есть, то от кого именно. Учесть возможность защиты(например ладья не бьет через слона и т.д)
sp3
Я делал так: при каждом изменении положения фигур для каждой из них я генерировал список в возможными ходами фигуры, если король противника входил в этот список, объявляем шах.
Nekron
А код можешь прислать?
sp3
легко http://pastebin.com/6B3cZYzz
надеюсь не из УПИ?
Nekron
Не
Nekron
Спасибо огромное!!
Nekron
А она рабочая или ее подредактировать надо?
Actor
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)
за быдлокод не пинайть. вроде работает. разберешься сам ;)
подсказка:
1 - король
2 - слон
3 - тура

если разберешь исходник - поймёшь алгоритм
Nekron
Благодарю!!
Felix_228
А у меня чуть другая задача не поможите????
На шахматной доске определите поля,в которые может попасть конь за n ходов из указанной позиции. Результат отобразить на экране.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB