我正在使用pygame实现一个简单的游戏,但是在鼠标单击事件中遇到了一个奇怪的问题。
结果不是我所期望的,当我尝试使用打印功能进行调试时,发生了奇怪的事情。
#check if d1 and d2 have same keys, but d1.values > d2.values,
#FOR Crafting purpose only
def check(d1, d2):
a = d1.keys() == d2.keys()
if a:
b = all(d1[k] >= d2[k] for k in d2)
return b
return a
def subtraction(d1, d2):
d3 = {key: d1[key] - d2.get(key, 0) for key in d1.keys()}
return d3
def myFunction(basket, ingredients, recipes):
#find all avaliable crafting recipe's name into a list
c = craftable(basket)
#convert basket of itemObj list into dict
#for example, [apple, apple, banana] into {apple: 2, banna: 1}
b = listToDict2(basket)
#input recipes namelist and recipeObj list, return the recipeObjs that apper
#in namelist into a list
recipes = get_recipes(c, recipes)
result = []
for i in range(0, len(recipes)):
#each recipes[i] has few dicts
for j in range(0, len(recipes[i].recipes_specific)):
#check if the basket match the condition
if check(b, recipes[i].recipes_specific[j]):
new_item = get_ingreds(recipes[i].name, ingredients)
result = subtraction(b, recipes[i].recipes_specific[j])
result[new_item.name] = 1
result = {k:v for k,v in result.items() if v != 0}
return result
#Crafting fail, resource in basket reduce to half
result = dict_value_reduce(b)
return result
if event.type == pygame.MOUSEBUTTONUP:
#run my function to caculate the result
result = myFunction(basket, ingredients, recipes)
print("Just for testing.")
print(result)
print("Testing again.")
根据我的经验,如果我单击鼠标,则应首先打印“仅用于测试”,然后打印所需的结果,然后再打印“再次测试”。最后。
但是实际发生的是,当我单击鼠标时,它仅显示“仅用于测试”。然后停下来。如果再次单击,它将继续打印我的结果并“再次测试”。和“仅供测试”。
-----第一次单击-----
“仅供测试。”
-----第二次单击-----
结果
“再次测试。”
“仅供测试。”
-----第三次并进一步单击-----
结果
“再次测试。”
“仅供测试。”
我不明白这里发生了什么,为什么打印效果如此奇怪。
我没有将详细代码粘贴到myFuction
中,但是如果问题是myFunction
中的代码,我将更新myFunction
中的代码。