我正在创建一个扫雷舰风格的游戏使用海龟为基础的网格设置。无论是在一个图标下找到一个最接近的图标,我都需要找到它。我不想让它精确,我只需要鼠标点击找到网格中最近的单元格,即使点击不是直接在板上。目前,我的代码只显示了最后一个在板上创建的海龟的图标,然后通过进一步的点击来做其他任何事情。在
我该怎么做才能让它识别出真正的最接近的点击并多次重复,直到找到最后一颗炸弹?在
import random
import turtle
import cell
class Game:
def __init__(self, size):
registershapes()
self.__boardsize = size
self.__boardlist = []
self.__bombnum = 0
self.__probe = 0
self.__probelist = []
offset = (size-1) * 17
for x in range(size):
for y in range(size):
t = cell.Cell(x,y)
t.up()
t.shape('question.gif')
t.goto(y*34-offset, offset-x*34)
self.__boardlist.append(t)
def hideMines(self, num):
if num > self.__boardsize ** 2:
return False
self.__bombnum = num
self.__rnums = []
i = 0
while i < self.__bombnum:
currentnum = random.randrange(0, (self.__boardsize**2) - 1)
if currentnum not in self.__rnums:
self.__rnums.append(currentnum)
i += 1
return True
def probe(self, x, y):
for t in self.__boardlist:
pos = t.position()
distx = abs(x - pos[0])
disty = abs(y - pos[1])
distfinal = (distx ** 2 + disty ** 2) ** 0.5
curdist = 0
if curdist < distfinal:
curdist = distfinal
closest = t
if closest in self.__probelist:
return (self.__probe, self.__bombnum)
elif closest in self.__rnums:
closest.shape("bomb.gif")
self.__bombnum -= 1
self.__probe += 1
self.__probelist.append(closest)
return (self.__probe, self.__bombnum)
else:
closest.shape("0.gif")
self.__probe += 1
self.__probelist.append(closest)
return (self.__probe, self.__bombnum)
def registershapes():
wn = turtle.Screen()
wn.register_shape('0.gif')
wn.register_shape('1.gif')
wn.register_shape('2.gif')
wn.register_shape('3.gif')
wn.register_shape('4.gif')
wn.register_shape('5.gif')
wn.register_shape('6.gif')
wn.register_shape('7.gif')
wn.register_shape('8.gif')
wn.register_shape('9.gif')
wn.register_shape('bomb.gif')
wn.register_shape('question.gif')
我相信你处理这个问题的方法不对。您正在激活
screen.onclick()
并试图将其映射到海龟。相反,激活单个海龟上的turtle.onclick()
,当一只海龟被选中时,将其停用。然后你就不必搜索有问题的海龟,也不必主动忽略已经被选中的海龟。在下面是我对你的代码从这个和你之前的问题到一个例子你可以运行。我不得不猜测Cell类的定义:
相关问题 更多 >
编程相关推荐