Поэтому я пытаюсь написать код, который определяет, где фигуры размещаются на доске, и если на доске уже есть фигуры, она будет знать, перекрываются ли они.
Итак, теперь у меня есть код, который принимает пользовательский ввод, чтобы получить длину и длину платы.
Затем, предполагая, что пользователь знает размер доски, он предлагает ввести любые фигуры, уже имеющиеся на доске.
Так что, если бы доска была 5 х 4 и имела форму L, она бы выглядела так:
[1,1,0,0,0,
1,0,0,0,0,
1,0,0,0,0,
0,0,0,0,0]
Но вы бы ввели в [1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0]
Затем вам будет предложено ввести форму, начиная с позиции по умолчанию, которая будет в верхнем правом углу.
При вводе фигур доска будет выглядеть так:
[1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11,12,13,14,15,
16,17,18,19,20]
Таким образом, форма L будет иметь координаты по умолчанию:
[1,2,6,11]
Затем он спрашивает, где находится следующее доступное место, так что, если вы собираетесь добавить L на доску, где L уже существует. Следующее доступное место будет 3 следующим образом:
[1,1,X,0,0,
1,0,0,0,0,
1,0,0,0,0,
0,0,0,0,0]
Таким образом, программа выводит новые координаты фигуры, которые будут:
[3,4,8,13]
Но мне нужна помощь в проверке ошибок на переполнение. Другими словами, если кусок сходит с доски, программа напечатает ошибку.
Например: если я хочу поместить L-образную часть в 5, координаты выведут [5,6,11,16], и это неправильно.
Как это должно выглядеть:
[0,0,0,0,X,X
0,0,0,0,X,
0,0,0,0,X,
0,0,0,0,0]
Но что происходит:
[0,0,0,0,X,
X,0,0,0,0,
X,0,0,0,0,
X,0,0,0,0]
Как я могу сделать так, чтобы печать не удалась, если кусок сходит с доски? Я уже сделал так, чтобы вы не могли вводить отрицательные координаты и чтобы вы не могли сделать кусок дальше, чем самая большая координата.
Вот мой код:
user1 = input ('Enter the length of the board: ')
#Length of the board
user2 = input ('Enter the width of the board: ')
#Width of the board
user3 = user1 * user2
#Area of the board
board = input ('Enter in the contenets of the board, as a list (i.e. [0,1,....,0,0]): ')
#Use list to enter in contents of board if any
listA = input ('Enter the shape, in terms of default coordinates (i.e. [1,2,6,11]): ')
#Enter in shape of piece you are placing on board
if listA[-1] > user3:
print ('Failed!')
#Piece fails if end goes off board
else:
if listA[0] < 1:
print ('Failed!')
#Piece fails if begining goes off board
else:
c = int(input ('Enter the next free slot: '))
#Enter where the piece fits next
a = int(listA[0])
#First coordinate of piece
b = [((x + c) - a) for x in listA]
#Finds location of moved piece
overlap = False
#Boolean to check for piece overlap
for y in b:
if board[y - 1] == 1:
overlap = True
#Overlap is true if piece ovelaps
#another piece already on the board
else:
overlap = overlap
#If no overlapping occurs then continue
if overlap == True:
print ('Failed!')
#Fails if piece overlaps
else:
print b
#prints the coordinates of the moved piece