es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no se muestran las imágenes de las primeras dos instancias de WhitePawn()?

Aquí está mi código:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image
from kivy.uix.relativelayout import RelativeLayout

class PeonBlanco():
def init(self):
self.source = ‘whitepawn.png’

class CubeWidget(RelativeLayout):
def init(self, color, id, piece,kwargs):
self.color = color
self.id = id
self.piece = piece
super().init(
kwargs)
if self.piece:
self.img = Image(source=’whitepawn.png’)
self.add_widget(self.img)
def on_touch_down(self, touch):
if self.collide_point(touch.x, touch.y):
print(self.id, self.pos)
return True
return super().on_touch_down(touch)
class NuevoTablero(GridLayout):
def init(self, kwargs):
super().init(
kwargs)
self.tablero = []
self.tema = None
self.generar_tablero()
def generar_tablero(self):
a = [(PeonBlanco(), 1, 1), (PeonBlanco(), 2, 2), (PeonBlanco(), 3, 3)]
for i in range(8):
for j in range(8):
color = (0,1,0,1) if (i+j)%2!=0 else (1,1,1,1)
for k in a:
if (k[1],k[2]) == (i,j):
cube = CubeWidget(color, (i,j), k[0])
self.tablero.append((k[0], cube))
else:
cube = CubeWidget(color, (0,0), None)
self.add_widget(cube)
class MiAplicacionDeAjedrez(App):
def build(self):
tablero = NuevoTablero()
return tablero

MiAplicacionDeAjedrez().run()

sólo la última instancia del peón blanco está mostrando la imagen, ninguna otra.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado crea una clase New_Board que es una GridLayout con cubos de 8×8. Cada cubo es un CubeWidget que toma como argumentos un color, un id y una pieza. Si el argumento piece no es None, se añade una Image al CubeWidget con la fuente whitepawn.png.

    El método gen_board crea una lista de tuplas que contiene una instancia de WhitePawn y dos enteros. Luego itera a través de la cuadrícula de 8×8 y comprueba si los dos enteros de la tupla coinciden con la fila y columna actuales. Si coinciden, se crea un CubeWidget con la instancia de WhitePawn como argumento de piece. En caso contrario, se crea un CubeWidget con None como argumento de piece.

    El problema es que sólo se muestra la imagen de la última instancia de WhitePawn, no se muestra ninguna de las demás. Esto se debe a que el método gen_board está sobrescribiendo los CubeWidget con la instancia de WhitePawn con los CubeWidget con None como argumento de piece. Para solucionarlo, el método gen_board debe ser modificado para crear sólo CubeWidget con instancias de WhitePawn si los dos enteros de la tupla coinciden con la fila y columna actuales.

Comments are closed.