代码中存在两个问题。\n\n首先,在循环中使用 deepcopy 复制集合 tempSet 是多余的。因为在每次循环的开始,tempSet 都会被重新赋值为空集合,所以不需要复制。\n\n其次,在更新星星矩阵 stars 时,应该使用 con 集合的副本进行更新,而不是直接使用 con。因为在循环中,我们需要使用 con 来判断相邻的星星是否需要消除,如果直接使用 con 进行更新,会导致 con 发生变化,从而影响到后续的判断。\n\n修复后的代码如下:\n\npython\ndef on_mouse_down(pos, button):\n ic = int(pos[1]/TILE_SIZE)\n jc = int(pos[0]/TILE_SIZE)\n con = {(ic,jc)}\n for k in range(20):\n tempSet = set(con)\n for each in tempSet:\n i = each[0]\n j = each[1]\n clid = stars[i][j]\n if i > 0 and stars[i-1][j] == clid:\n con.add((i-1, j))\n if i < 9 and stars[i+1][j] == clid:\n con.add((i+1, j))\n if j > 0 and stars[i][j-1] == clid:\n con.add((i, j-1))\n if j < 9 and stars[i][j+1] == clid:\n con.add((i, j+1))\n\n for each in con:\n stars[each[0]][each[1]] = 0\n\n con.clear()\n\n updateTiles()\n\n\n这样修复后,代码应该能够正确地执行星星消除的逻辑。

Python 星星消除游戏代码优化:解决 deepcopy 和 con 更新问题

原文地址: https://www.cveoy.top/t/topic/pPzQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录