Mein kleines Spiel ist so programmiert, dass zwei Charaktere gegeneinander kämpfen. Einer von der linken Seite und einer von der rechten Seite. Nach dem Kampf sollten beide gelöscht werden, unabhängig davon, wer gewinnt oder verliert. Sie werden in der Tat aus Listenfeldern gelöscht, aber nachdem Sie zwei weitere Charaktere von jeder Seite haben, kämpfen diese vorherigen Charaktere manchmal. Wenn Sie mit Zys und Rash kämpfen, werden in der Gewinn-und-Verlust-Sektion neben den anderen keine anderen Namen gedruckt. Nur wenn du rückwärts von Dant und Ilora gehst, funktioniert es so, wie es sollte, wenn jeder Charakter nur einmal einen Platz in Gewinnen oder Verlust einnimmt. Wenn Sie mit einigen anderen Charakteren beginnen, können Sie sie mehr als einmal in den Bereich Wins and Loss setzen. Es ist auch möglich, dass ein Charakter als Gewinn oder Verlust platziert wird, auch wenn er nicht zum Kämpfen ausgewählt wurde. Die Grundlinie ist, dass jeder Charakter einmal auf der gegenüberliegenden Seite gegen einen Charakter kämpfen muss und danach wird er platziert und dann im späteren Teil des Programms ohne Verwendung gelöscht. Aus irgendeinem ersichtlichen Grund tut es das nicht.Charaktere aus der Listbox werden immer noch aufgezeichnet, auch wenn sie aus der Listbox gelöscht wurden
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()
Dies ist nur der Teil des Codes, der sich auf das Problem beziehen könnte, nicht der Code als Ganzes.
Dies ist nicht die gleiche Frage von gestern, nur der gleiche Code. Ich dachte, es wäre angemessener, mit den Fehlern nacheinander als verschiedene Probleme zu arbeiten, damit sie besser organisiert werden können.
Was ist die Frage? – atomh33ls
Problem ist mit Ihrem 'if left == 0: namen =" Rash "', etc. Wenn Sie '" Rash "' Formularliste löschen und wählen Sie das erste Element in der Listbox ('" Untss "') dann 'if left == 0: namel = "Rash" 'gibt dir" Rash "' anstatt "' Untss "'. Sie können 'left == 0' nicht verwenden, um das ausgewählte Element zu erkennen. Sie müssen 'left ==" Rush "' oder etwas ähnliches verwenden. – furas