這是我的代碼:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image
from kivy.uix.relativelayout import RelativeLayout
class WhitePawn():
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 New_Board(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.board=[]
self.theme=None
self.gen_board()
def gen_board(self):
a=[(WhitePawn(),1,1),(WhitePawn(),2,2),(WhitePawn(),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.board.append((k[0],cube))
else:
cube=CubeWidget(color,(0,0),None)
self.add_widget(cube)
class MyChessApp(App):
def build(self):
board=New_Board()
return board
MyChessApp().run()
只有最后一個 whitepawn 實體顯示影像。
uj5u.com熱心網友回復:
你的方法有缺陷。您的for k in a:回圈正在列印板的每個正方形三次。
這是您當前正在做的事情的一個簡短的可復制示例。
a = [(1, 1), (2, 2), (3, 3)]
for i in range(8):
for j in range(8):
for k in a:
if (k[0], k[1]) == (i, j):
print((i, j), 'printed piece')
else:
print((i, j), 'printed blank')
對于該職位,(1, 1)您將看到:
(1, 1) printed piece
(1, 1) printed blank
(1, 1) printed blank
如您所見,這(3, 3)是它檢查的唯一一個工件處于最終位置的位置。這就是為什么它是幸存下來的原因。
(3, 3) printed blank
(3, 3) printed blank
(3, 3) printed piece
如果回圈沒有產生任何結果,則一個簡單的解決方法是else在您的最終for回圈中使用 列印空白位置for。
a = [(1, 1), (2, 2), (3, 3)]
for i in range(8):
for j in range(8):
for k in a:
if (k[0], k[1]) == (i, j):
print((i, j), 'printed piece')
break
else:
print((i, j), 'printed blank')
然而,有些人回避elseonfor回圈,因為它是語言中較少使用的部分。
如果你想要一些不使用 就else可以作業的東西,這應該可以作業。
a = [(1, 1), (2, 2), (3, 3)]
for i in range(8):
for j in range(8):
piece = None
for k in a:
if (k[0], k[1]) == (i, j):
piece = k
if piece is not None:
print((piece[0], piece[1]), 'printed piece')
else:
print((i, j), 'printed blank')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363996.html
