所以我的小游戏被编程为让两个角色互相争斗。一个在左侧,一个在右侧。在他们战斗之后,无论谁赢谁输,都应该删除他们。事实上,它们是从列表框中删除的,但当你从每一方都有两个以上的角色时,前面的角色有时会出现。如果你从Zys和Rash fighting开始,那么除了他们的名字外,赢与输部分没有其他名字。只有当你从但丁和伊洛拉那里后退时,它才会以应有的方式工作,每个角色只在一次胜负中占有一席之地。如果你从其他角色开始,他们可能会被放在赢和输的部分不止一次。一个角色即使没有被选中参战,也有可能被视为赢或输。底线是每个角色与对方的角色战斗一次,然后放置并删除它,在程序的后面部分没有任何用处。出于某种明显的原因,它没有做到这一点
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
class Character:
def __init__(self, name, attack, defense, health):
self.name = name
self.attack = attack
self.defense = defense
self.health = health
self.total = attack+defense+health
#Left side characters
Rash = Character("Rash", 42, 50, 80)
Untss = Character("Untss", 15, 54, 100)
Ilora = Character("Ilora", 60, 35, 80)
#Both sides have totals of 165 168 and 175
#Right side characters
Zys = Character("Zys", 12, 97, 83)
Eentha = Character("Eentha", 55, 17, 90)
Dant = Character("Dant", 73, 28, 88)
def fight(): #Part of code that checks for wins and loss checks which has greater total stats and deletes from list box
try:
namel = ""
namer=""
left = lbox.curselection()[0]
right = rbox.curselection()[0]
totalleft = 0
totalright = 0
if left == 0:
namel = "Rash"
totalleft = Rash.total
elif left==1:
namel = "Untss"
totalleft = Untss.total
elif left==2:
namel = "Ilora"
totalleft = 60+35+80
if right == 0:
namer = "Zys"
totalright = Zys.total
elif right==1:
namer = "Eentha"
totalright = Eentha.total
elif right==2:
namer = "Dant"
totalright = Dant.total
lbox.delete(lbox.curselection()[0])
rbox.delete(rbox.curselection()[0])
print(namel)
print(namer)
if (totalleft>totalright): #Checks if won or lost
wins.set(wins.get()+"\n"+namel)
loss.set(loss.get()+"\n"+namer)
else:
wins.set(wins.get()+"\n"+namer)
loss.set(loss.get()+"\n"+namel)
except IndexError:
pass
#The left listbox and its characters
leftnames = ('Rash', 'Untss', 'Ilora')
lnames = StringVar(value=leftnames)
lbox = Listbox(mainframe, listvariable=lnames, exportselection=0, height=3)
lbox.grid(column=0, row=0)
#Right listboxes characters
rightnames = ('Zys', 'Eentha', 'Dant')
rnames = StringVar(value=rightnames)
rbox = Listbox(mainframe, listvariable=rnames, exportselection=0, height=3)
rbox.grid(column=1, row=0)
#Shows users wins and lossses
wins = StringVar()
loss = StringVar()
#Label that
ttk.Label(mainframe, text="Wins", width=13).grid(column=2, row=0, sticky=N)
ttk.Label(mainframe, text="Loss", width=13).grid(column=2, row=1, sticky=N)
ttk.Label(mainframe, textvariable=wins).grid(column=2, row=0, sticky=(S,E))
ttk.Label(mainframe, textvariable=loss).grid(column=2, row=1, sticky=(S, E))
#Button for fighting
fightbttn= ttk.Button(mainframe, text="Fight", command=fight)
fightbttn.grid(column=3, row=3, sticky=(E))
root.mainloop()
这只是代码中与问题相关的部分,而不是整个代码
这不是昨天的问题,只是相同的代码。我认为将bug作为不同的问题一次处理一个更合适,这样它们就可以更有组织性
问题是因为您总是使用
if left == 0: namel = "Rash" even if
“Rash”was deleted from listbox and now
left==0means
“Untss”您必须获取选定的名称而不是索引
并使用它
但你们可以使用字典来获取数据
然后
若你们在字典中添加了新字符,那个么你们就不需要修改代码了
顺便说一句:不要在
except
中使用pass
,因为如果代码有问题,您不会看到错误相关问题 更多 >
编程相关推荐