擅长:python、mysql、java
<p>游戏是事件驱动的应用程序。在事件驱动的应用程序中,有一个主循环检查所有事件,并在检测到事件时执行代码。逻辑的起点始终是事件</p>
<p>在您的情况下,事件是单击按钮。您必须在代码中(在主循环中)只检查一次单击,然后确定代码必须执行的操作。如果同一事件可能触发不同的操作,则需要一些额外的逻辑或标志来确定应执行哪些操作</p>
<p>在您的情况下,您有一个事件(鼠标单击)和两个可能的操作,请检查单击了哪些块,或移动该块</p>
<p>因此,代码的设计应如下所示:</p>
<pre><code>def check_and_grab(position):
# code here
def move_piece(position):
# code here
piece_grabbed = None
while True:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTODOWN:
if piece_grabbed is None:
check_and_grab(event.pos)
else:
move_piece(event.pos)
</code></pre>
<p><code>piece_grabbed</code>是一个存储抓取的工件的变量:如果是<code>None</code>,则没有抓取工件</p>
<p><code>check_and_grab(position)</code>应检查单击位置是否有工件,如果有,则将<code>piece_grabbed</code>设置为该工件。它实现了第2点和第3点</p>
<p><code>move_piece(position)</code>应将抓取的工件移动到新位置,然后再次设置<code>grabbed_piece = None</code>。它实现了你的第5点</p>