Я столкнулся с проблемой с моим кодом, который я просто не могу понять.Словарь не заселен правильно
В соответствии с приведенной ниже секции кода:
После создания 2-го словаря (worldmap)
в Generate_Game_World
классе, расположение HQ хранится в
self.worldmap[HQLOCATIONX,HQLOCATIONY]["Region_Type"] = "HQ"
Однако, после того, как сделать это, кажется, чтобы заполнить весь массив со значением «HQ», как показано в тестовом окне. Я просто не могу понять, почему это происходит.
import pygame
from tkinter import *
test = Tk()
test.geometry = ("640x480")
pygame.init()
WORLDSIZE = 499
HQLOCATIONX = int(WORLDSIZE/2)
HQLOCATIONY = int(WORLDSIZE/2)
class Generate_Game_World():
regionData = {"Region_Type" : "None",
"Region_Level" : 0}
def __init__(self, mapSize):
self.mapSize = mapSize
def main (self):
# creates 2d map
self.worldmap = {(x,y) : self.regionData for x in range(self.mapSize) for y in range (self.mapSize)}
# Sets the HQ to worldmap(249,249)
self.worldmap[HQLOCATIONX,HQLOCATIONY]["Region_Type"] = "HQ"
# checks worldmap(0,0) --> (10,10) for its Region Type
for x in range (10):
for y in range (10):
label = Label (text=self.worldmap[x,y]["Region_Type"]).grid(row = x, column=y)
class Game (object):
def main (self, screen):
gameworld = Generate_Game_World(WORLDSIZE)
gameworld.main()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
return
test.mainloop()
pygame.display.flip()
if __name__ == "__main__":
screen = pygame.display.set_mode((1024, 768))
Game().main(screen)
Код, который я предоставил, является лишь фрагментом из большей части проекта, изолируя область, которая причиняет мне неприятности. Ключи используются для отображения фрагментов, на которые они ссылаются. None.png, HQ.png и т. Д. – Jess
@ Джесс: Правильно, в этом случае вы хотите создать копии словаря. Если ваш словарь 'regionData' содержит другие изменяемые значения, вместо этого используйте' copy.deepcopy() '. –
Я потратил больше 2 часов, пытаясь понять это, и вы помогли мне сэкономить еще много часов. Благодаря :) – Jess