Я пытаюсь использовать заливку заливом, но только на определенное расстояние (включая диагонали). Наводнение работает хорошо (вероятно, не идеально). Но после каждого движения, которое я делаю вверх/вниз/влево/вправо, предполагается перерисовать доску. Но вместо этого он перерисовывается поверх предыдущей доски, а также меняет глобальную доску, которая, как предполагается, никогда не изменится.Глобальный массив перезаписывается без переназначения
Я попробовал несколько различных способов назначения новой доски, прежде чем наводить наводнение, но ничего не изменило результат. Я предполагаю, что это как-то связано с
board = gameBoard[:]
в игреFlow() функция. Но я не знаю, почему это было бы так. Я использовал [:] после прочтения этого другого stack exchange post, но, похоже, это не исправить проблему.
Пример вывод из заявлений печати я оставил в:
GameBoard
#########
#.. #
#.. #
# #
#
# #
# #
# #
#########
LightBoard
#########
#.. #
#.. #
# #
#
# #
# #
# #
#########
только свет Совет должен меняться во время игры Совет остается тем же самым.
Код:
import random
#Sample Game Board
gameBoard = [
["#","#","#","#","#","#","#", "#", "#"],
["#"," "," "," "," "," "," ", " ", "#"],
["#"," "," "," "," "," "," ", " ", "#"],
["#"," "," "," "," "," "," ", " ", "#"],
["#"," "," "," "," "," "," ", " ", " "],
["#"," "," "," "," "," "," ", " ", "#"],
["#"," "," "," "," "," "," ", " ", "#"],
["#"," "," "," "," "," "," ", " ", "#"],
["#","#","#","#","#","#","#", "#", "#"]
]
#Defining globals
currentPlayerX = -1
currentPlayerY = -1
lightRadiusMax = -1
#function flood
#Params:
# lightBoard: array, starts off empty
# x: int, current x position to check, starts off as players starting x
# y: int, current y position to check, starts off as players starting y
# oldChard: char, character to replace
# fillChar: char, character to replace with
#Return:
# returns the completed lightBoard
def flood(lightBoard, x, y, oldChar, fillChar):
global currentPlayerX
global currentPlayerY
global lightRadiusMax
global gameBoard
width = len(gameBoard[0])
height = len(gameBoard)
if gameBoard[y][x] == " ":
oldChar = lightBoard[y][x]
if gameBoard[y][x] == oldChar:
if (lightRadiusMax >= abs(currentPlayerX-x)) and (lightRadiusMax >= abs(currentPlayerY-y)):
lightBoard[y][x] = fillChar
if (lightRadiusMax == abs(currentPlayerX-x)) and (lightRadiusMax == abs(currentPlayerY-y)):
flood(lightBoard, x+1, y+1, oldChar, fillChar)
if x > 0:
flood(lightBoard, x-1, y, oldChar, fillChar)
if y > 0:
flood(lightBoard, x, y-1, oldChar, fillChar)
if x < width-1:
flood(lightBoard, x+1, y, oldChar, fillChar)
if y < height-1:
flood(lightBoard, x, y+1, oldChar, fillChar)
print("GameBoard")
for row in gameBoard:
for item in row:
print(item,end="")
print("")
print("LightBoard")
for row in lightBoard:
for item in row:
print(item,end="")
print("")
return lightBoard
def gameFlow():
global currentPlayerX
global currentPlayerY
global gameBoard
while(1):
board = gameBoard[:]
board = flood(board, currentPlayerX, currentPlayerY, None, ".")
board[currentPlayerY][currentPlayerX] = "@"
for row in board:
for item in row:
print(item,end="")
print("")
moveDirection = input("What would you like to do?\nMove (N,S,E,W) or (Q)uit: ")
moveDirection = moveDirection.lower()
if moveDirection == "n":
currentPlayerY -= 1
if moveDirection == "s":
currentPlayerY += 1
if moveDirection == "e":
currentPlayerX += 1
if moveDirection == "w":
currentPlayerX -= 1
if moveDirection == "q":
print("Thanks for playing!")
exit(0)
def startGame():
global currentPlayerX
global currentPlayerY
global lightRadiusMax
#randXStart = random.randint(1, len(gameBoard[0])-2)
#randYStart = random.randint(1, len(gameBoard)-2)
currentPlayerX = 1
currentPlayerY = 1
print(currentPlayerX)
print(currentPlayerY)
lightRadiusMax = int(input("Enter your light radius: "))
gameFlow()
startGame()
Кредиты inventwithpython.com для обучения меня основам Заливка
Спасибо за совет! Как только я вернусь домой, я попробую и отредактирую этот комментарий. – canpan14
Работал отлично! Я не читал это другое сообщение должным образом и думал [:] сделал бы копию всех элементы также. – canpan14