因此,我正在開發一個類似tkinter遊戲的地牢爬行器,而不是pygame。我發現它非常困難,因爲網格不能在代碼中工作,並且我無法找到在畫布上創建可通過鍵輸入移動的形狀的方法。我已經嘗試了多種修復方法,但無法實現這種方式。如果我能找到一些幫助製作一個網格,也可以通過玩家的輸入來移動形狀,這對大多數人都有幫助。這段代碼有很多錯誤,因爲我仍然是一個非常新的初學者,這可能對第一場比賽來說太過雄心勃勃。試圖讓一個對象通過玩家輸入與tkinter移動
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()
您的代碼的縮進不一致,很難理解。 – sirfz
_「我找不到在畫布上創建可通過按鍵輸入移動的形狀的方法」_ - 每個畫布項都有一個「移動」方法。您還可以通過使用「coords」方法調整項目的座標來移動它。 –
你嘗試移動什麼?我沒有看到任何可以移動的「玩家」和「敵人」。 – furas