Also ich entwickle ein Dungeon Crawler wie Spiel in Tkinter und nicht Pygame. Ich finde es sehr schwierig, weil das Gitter im Code nicht funktioniert und ich keine Möglichkeit finde, eine Form auf der Leinwand zu erstellen, die durch Tasteneingaben verschoben wird. Ich habe mehrere Fixes ausprobiert, kann aber keinen Weg finden, dies alles zusammen zu bringen. Wenn ich etwas Hilfe beim Erstellen eines Rasters finden könnte, das es auch ermöglicht, dass eine Form durch die Eingabe eines Spielers bewegt wird, würde das größtenteils helfen. Dieser Code hat viele Fehler, weil ich immer noch ein sehr neuer Anfänger bin und dies könnte für ein erstes Spiel zu ehrgeizig gewesen sein.Versuchen, ein Objekt in einem Gitter mit tkinter durch Spielereingaben bewegen
from tkinter import*
import random
tk = Tk()
photo = PhotoImage(file="dungeon-wallpaper-1920x720.png")
label = Label(tk, image=photo)
label.pack()
def start(): #Starting Title
print("You are a lone human who has ventured into a dangerous dungeon. "
"The hallway is packed with monsters and is the only way out")
print("Can your escape the Necromaner's Dungeon?")
print("Developer's Note: Use python console for battle system and to check the introduction")
start = Button(text = "Start", command = start, bg = "Red", fg = "White")
start.pack()
def __init__(self, *args, **kwargs):
tk.__init__(self, *args, **kwargs)
self.canvas = tk.Canvas(self, width=500, height=500, borderwidth=0, highlightthickness=0)
self.canvas.pack(side="top", fill="both", expand="true")
self.rows = 100
self.columns = 100
self.cellwidth = 25
self.cellheight = 25
self.rect = {}
self.oval = {}
for column in range(20):
for row in range(20):
x1 = column*self.cellwidth
y1 = row * self.cellheight
x2 = x1 + self.cellwidth
y2 = y1 + self.cellheight
self.rect[row,column] = self.canvas.create_rectangle(x1,y1,x2,y2, fill="blue", tags="rect")
self.oval[row,column] = self.canvas.create_oval(x1+2,y1+2,x2-2,y2-2, fill="blue", tags="oval")
self.redraw(1000)
def redraw(self, delay):
self.canvas.itemconfig("rect", fill="blue")
self.canvas.itemconfig("oval", fill="blue")
for i in range(10):
row = random.randint(0,19)
col = random.randint(0,19)
item_id = self.oval[row,col]
self.canvas.itemconfig(item_id, fill="green")
self.after(delay, lambda: self.redraw(delay))
def rightKey(event):
print("Up key pressed")
def leftKey(event):
print("Up key pressed")
def upKey(event):
print("Up key pressed")
def downKey(event):
print("Down key pressed")
tk.bind('<Up>', upKey)
tk.bind('<Down>', downKey)
tk.bind('<Left>', leftKey)
tk.bind('<Right>', rightKey)
def lootSys(): #LootSystem
playerMoney = 0
playerAttack = 10
playerHealth = 100
print("Input anything to take a turn. Input 1 to quit.")
for i in range(0, 10):
i += 1
turn = input()
if turn == str(1):
break
else:
chance = random.randint(1, 100)
if chance <= 5:
playerMoney += 20
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 15:
playerMoney += 10
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 30:
playerMoney += 5
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 50:
playerMoney += 1
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 70:
playerAttack += 10
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 80:
playerAttack += 20
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
elif chance <= 100:
playerHealth += 20
print("Gold = " + str(playerMoney))
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
print("Gold = " + str(playerMoney)) #L00T
print("Attack Damage = " + str(playerAttack))
print("Health = " + str(playerHealth))
def battleSys(): #Battle System
playerHealth = 100
print("Input anything to take a turn, or input 1 to stop.")
for i in range(0, 10):
i += 1
turn = input()
if turn == str(1):
break
else:
chance = random.randint(1, 4)
if chance == 1:
playerHealth -= 10
print("Health = " + str(playerHealth))
elif chance == 2:
playerHealth -= 20
print("Health = " + str(playerHealth))
elif chance == 3:
playerHealth -= 40
print("Health = " + str(playerHealth))
else:
playerHealth += 5
print("Health = " + str(playerHealth))
if playerHealth <= 0:
print("Game Over")
break
else:
continue
if playerHealth > 0:
print("Congratulations! You win!")
lootSys()
battleSysAct = Button(text = "Battle System", command = battleSys, bg = "Blue", fg = "White")
battleSysAct.pack()
tk.mainloop()
Die Einrückung Ihres Codes ist nicht konsistent und erschwert das Verständnis. – sirfz
_ "Ich kann keinen Weg finden, um eine Form auf der Leinwand zu erstellen, die durch Tasteneingaben verschoben werden würde" _ - Jeder Canvas-Eintrag hat eine 'move'-Methode. Sie können es auch verschieben, indem Sie die Koordinaten des Objekts mit der Methode 'coords' anpassen. –
was versuchst du zu bewegen? Ich sehe keinen "Spieler" und "Feind", den du bewegen könntest. – furas