Şahın ve kalenin koordinat değerlerini row ve column olarak tutacak olursanız, hangisinin tehdit altında olduğunu kolaylıkla hesaplayabilirsiniz.
columns = ("8", "7", "6", "5", "4", "3", "2", "1")
rows = ("a", "b", "c", "d", "e", "f", "g", "h")
# Satranç tahtasını oluşturalım.
board = []
# koordinatları oluşturalım.
for number in columns:
row = []
for letter in rows:
coordinate = letter + number
row.append(coordinate)
board.append(row)
# Tahtayı yazdıralım.
for row in board:
print(row)
# Şimdi ise şahın ve kalenin koordinatlarını talep edelim.
# Ama bunun için bir fonksiyon oluşturalım.
def talep_et(message):
_input = input(message)
# Girilen koordinat geçerli mi diye kontrol edelim.
if (_input[0] in rows) and (_input[1] in columns):
# Geçerli ise girdiyi kullanışlı olacak şekilde return edelim.
row = rows.index(_input[0])
column = columns.index(_input[1])
return {"row": row, "column": column}
else:
# Geçerli değil ise program hata versin.
raise ValueError("Geçersiz Koordinat!")
king = talep_et("Şahın Koordinatı: ")
rook = talep_et("Kalenin Koordinatı: ")
# Son olarak, tehdit durumunun olup olmadığını kontrol edelim.
# Bunun için yeni bir fonksiyon oluşturalım.
def kontrol_et(king, rook):
# tehdit değeri 0 ise "ROOK", 1 ise "KING", 2 ise "NOBODY" yazdıralım.
threat = 2
# Eğer kale ve şahın koordinat bilgisindeki harf aynı ise
# veya her ikisinin de sayı değeri aynı ise şah için tehdit söz konusudur.
if king["row"] == rook["row"]:
threat = 0
elif king["column"] == rook["column"]:
threat = 0
# Eğer şah ile kale arasındaki max uzaklık 1 birim ise kale için tehdit söz konusudur.
distance = max((abs(king["row"] - rook["row"]), abs(king["column"] - rook["column"])))
if distance == 1:
threat = 1
output = ("ROOK", "KING", "NOBODY")
print(output[threat])
kontrol_et(king, rook)
Sıra kimde? Sıra vermediği için her iki yönden kontrol yapıp, ikisi için karşılıklı tehdit olduğunda ayrıca uyaracak şekilde koda bir iki satır eklemelisin…
Eklerdim ama olabildiğince kod yazmamaya çalışırım, öğrenmek isteyen biraz çabalarsa öğrenir kodu hazır verirsem öğrenmez diye düşünüyorum.
Eline sağlık son koşul hariç gayet güzel kod olmuş.