У меня есть школьное задание, в котором цель состоит в том, чтобы имитировать движение рыцаря на шахматной доске. Первая часть, где рыцарь перемещается случайным образом, хороша, но вторая часть, где пользователь выбирает движение, дает мне головную боль. Поскольку у нас есть перерыв в праздники, я не могу получить помощь в школе.Как дать пользователю возможность переместить Рыцаря в шахматную игру?
from random import choice
#From the module random imports the random choice option
class Point: #Class for a point on the board
def __init__(self, xCoord, yCoord):#Coordinates of a position on the board
self.xCoord = xCoord #x-coordinate, i.e. row
self.yCoord = yCoord #y-coordinate, i.e. column
def getCoordinates(self):
return (self.xCoord, self.yCoord) #Returns coordinates for point on board
def getOffsetCoordinates(self, i = 65):
return (chr(self.xCoord + i), self.yCoord + 1)
def __str__(self):
return str(self.getCoordinates()) #Returns the coordinates in a string
return str(self.getLegalPoints())
class Board: #Class for the board
def __init__(self): #Creates the board using matrices
self.rows = [] #A list which will be used as a base for the rows
for x in range(8): #Adds 8 columns in which every
column = []
for y in range(8):
column.append(0)
self.rows.append(column)
def getBoard(self):
return self.rows #Returns rows, aka the board
def setPointTaken(self, point, stepnumber):
x,y = point.getCoordinates()
self.rows[x][y] = stepnumber
def __str__(self):
boardString = ""
boardString += " 1 2 3 4 5 6 7 8\n"
for i in range(len(self.rows)):
currentRow = self.rows[i]
boardString += " |" + chr(65 + i) + "| "
for j in range(len(currentRow)):
elementString = str(currentRow[j])
elementStringAdjusted = elementString.ljust(2)
boardString += elementStringAdjusted + " "
boardString += "\n"
return boardString
def getLegalPoints(currentPosition, board):
possiblePoints = []
legalPoints = []
stringlegalPoints = str(legalPoints)
originX, originY = currentPosition.getCoordinates()
possiblePoints.append(Point(originX + 1, originY + 2))
possiblePoints.append(Point(originX + 1, originY - 2))
possiblePoints.append(Point(originX - 1, originY - 2))
possiblePoints.append(Point(originX - 1, originY + 2))
possiblePoints.append(Point(originX + 2, originY + 1))
possiblePoints.append(Point(originX + 2, originY - 1))
possiblePoints.append(Point(originX - 2, originY - 1))
possiblePoints.append(Point(originX - 2, originY + 1))
for point in possiblePoints:
x, y = point.getCoordinates()
if 0 <= x <= 7 and 0 <= y <= 7 and not board.rows[x][y]:
legalPoints.append(point)
return legalPoints
return strlegalPoints
def main():
playType = None
while playType != 1 or playType != 2:
playType = int(input("\n""This program shows the path of a knight on a chessboard." "\n" + "[1] - Random path" "\n" + "[2] - Make your own path" + "\n" + "Choose option 1 for a random path or option 2 to create your own!" "\n"))
if playType == 1:
board = Board()
startLetter = input("Choose a row (A-H): ").upper()
startNumber = input("Choose a number (1-8): ")
xCoord = ord(startLetter)-65
yCoord = (int(startNumber) - 1)
startPoint = Point(xCoord, yCoord)
stepnumber = 1
board.setPointTaken(startPoint, stepnumber)
legalPoints = getLegalPoints(startPoint, board)
while legalPoints != None:
stepnumber += 1
nextPosition = choice(legalPoints)
board.setPointTaken(nextPosition, stepnumber)
legalPoints = getLegalPoints(nextPosition, board)
if len(legalPoints) <= 0:
break
print(board)
print("Last visited square: ",nextPosition.getOffsetCoordinates(),"\n" "Number of steps: ",stepnumber,"\n")
break
elif playType == 2:
board = Board()
startLetter = input("Choose a row (A-H): ").upper()
startNumber = input("Choose a number (1-8): ")
xCoord = ord(startLetter)-65
yCoord = (int(startNumber) - 1)
startPoint = Point(xCoord, yCoord)
stepnumber = 1
board.setPointTaken(startPoint, stepnumber)
legalPoints = getLegalPoints(startPoint, board)
while legalPoints != None:
print(str(legalPoints))
stepnumber += 1
nextPosition = input("Choose your next square among those presented: ")
board.setPointTaken(nextPosition, stepnumber)
legalPoints = getLegalPoints(nextPosition, board)
print(board)
print(nextPosition.getOffsetcoordinates(), "\n" "Number of steps: ",stepnumber,"\n")
if len(legalPoints) <= 0:
break
break
main()
Вот что у меня есть. Я попытался повторно использовать движение для случайного пути для создания персонализированного пути, но я не могу понять, как распечатать разрешенные движения без него появляется так:
[<__main__.Point object at 0x03915030>, <__main__.Point object at 0x03915090>, <__main__.Point object at 0x039150B0>, <__main__.Point object at 0x039150D0>, <__main__.Point object at 0x039150F0>, <__main__.Point object at 0x03915110>, <__main__.Point object at 0x03915130>, <__main__.Point object at 0x03915150>]
Choose your next square among those presented:
Из того, что я понял, что я должен иметь функцию legalpoints в классе, чтобы получить ее как строку. Любые идеи по устранению этой проблемы? Я полный новичок, и если я нарушаю любые правила, удалите этот пост.