Atualmente, estou trabalhando em um editor de mapas para um jogo em pygame, usando mapas de blocos. O nível é construído a partir de blocos na seguinte estrutura (embora muito maior):
level1 = (
(1,1,1,1,1,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,1,1,1,1,1))
onde "1" é um bloco que é uma parede e "0" é um bloco que é ar vazio.
O código a seguir é basicamente aquele que lida com a alteração do tipo de bloco:
clicked = pygame.mouse.get_pressed()
if clicked[0] == 1:
currLevel[((mousey+cameraY)/60)][((mousex+cameraX)/60)] = 1
Mas como o nível é armazenado em uma tupla, não consigo alterar os valores dos diferentes blocos. Como faço para alterar os diferentes valores no nível de maneira fácil?
//
invés de apenas/
porque, no Python 3,/
realizará a divisão de ponto flutuante e estragará seu código.Respostas:
Converter tupla em lista:
Converter lista em tupla:
fonte
p list(...)
vez disso.Você tem uma tupla de tuplas.
Para converter todas as tuplas em uma lista:
--- OU ---
E depois que você terminar de editar, basta convertê-los de volta:
--- OU --- (Obrigado @jamylak)
Você também pode usar uma matriz numpy:
Para manipular:
fonte
Você pode ter uma lista de listas. Converta sua tupla de tuplas em uma lista de listas usando:
ou
e modifique-os de acordo.
Mas uma matriz numpy é mais fria.
fonte
Para converter tuplas em lista
(Faltava vírgulas entre as tuplas na pergunta especificada e foi adicionada para evitar mensagens de erro)
Método 1:
Método 2:
O método 1 levou --- 0,0019991397857666016 segundos ---
O método 2 levou --- 0,0010001659393310547 segundos ---
fonte
Por que você não tenta converter seu tipo de uma tupla para uma lista e vice-versa.
fonte
Ambas as respostas são boas, mas um pequeno conselho:
As tuplas são imutáveis, o que implica que elas não podem ser alteradas. Portanto, se você precisar manipular dados, é melhor armazenar dados em uma lista, pois isso reduzirá a sobrecarga desnecessária.
No seu caso, extraia os dados para uma lista, como mostrado por eumiro, e depois da modificação, crie uma tupla semelhante de estrutura semelhante à resposta dada pelo aluno.
Também como sugerido usando a matriz numpy é uma opção melhor
fonte
numpy
fornecerá a solução mais rápida para trabalhar com esse tipo de dados.A lista para Tupla e vice-versa pode ser feita conforme abaixo
fonte
Você poderia acelerar drasticamente suas coisas se usasse apenas uma lista em vez de uma lista de listas. Obviamente, isso só é possível se todas as suas listas internas tiverem o mesmo tamanho (o que é verdade no seu exemplo, então eu assumo isso).
E você poderia ser ainda mais rápido se usasse um campo de bits em vez de uma lista:
com
Mas isso funcionará apenas se seus campos contiverem 0 ou 1, é claro. Se você precisar de mais valores, precisará combinar vários bits, o que tornaria o problema muito mais complicado.
fonte