我正在用 tkinter 制作蛇游戲,如果蛇碰到窗戶,我會嘗試列印出“游戲結束”訊息。我該怎么做呢?
這是我到目前為止所得到的:
from tkinter import *
# import random, disregard random module, unused
def up(event):
canvas.move(snakebody, 0, -20)
def down(event):
canvas.move(snakebody, 0, 20)
def left(event):
canvas.move(snakebody, -20, 0)
def right(event):
canvas.move(snakebody, 20, 0)
# root
window = Tk()
window.config(bg='darkgreen')
window.geometry('450x450')
window.resizable(0, 0)
# canvas
canvas = Canvas(window, bg='darkgreen', borderwidth=0)
canvas.pack(fill=BOTH, expand=1)
# snake body/head
snakebody = canvas.create_rectangle(100, 50, 50, 100, outline='lightgreen', fill='lightgreen')
# game over message
if canvas.coords(snakebody) == canvas.coords(snakebody, 50, 50, 100, 100):
print('game over')
# control binds
window.bind('<Up>', up)
window.bind('<Down>', down)
window.bind('<Left>', left)
window.bind('<Right>', right)
window.mainloop()
請幫忙
uj5u.com熱心網友回復:
我認為現在問你的問題還為時過早。您之前需要回答不同的問題。你的動作決不允許蛇咬自己。你的蛇也不會在拐角處移動。因此,您很可能必須更改該功能。無論如何,向您展示我在評論部分中提到的概念。
我已經實作了一個名為after_tick(). 在函式內部,我通過向畫布詢問其屬性來定義 (0,0) = 左上角的邊界以及寬度和高度的最大坐標。之后,我向畫布詢問此框內的專案,如果 idsnakebody不在其中,則列印game over。
補充建議:
- 實作一個功能
tick,打勾通常是自動化的下一步 - 為您的蛇使用多個矩形,并為頭部和身體使用標簽
- 不要使用通配符匯入以避免名稱沖突
from tkinter import *
def after_tick():
max_w = canvas.winfo_width()
max_h = canvas.winfo_height()
in_cnvs = canvas.find_enclosed(0,0,max_w,max_h)
if snakebody not in in_cnvs:
print('game over')
def move_event(event):
key = str(event.keysym)
if key == 'Up':
canvas.move(snakebody, 0, -20)
elif key == 'Down':
canvas.move(snakebody, 0, 20)
elif key == 'Left':
canvas.move(snakebody, -20, 0)
elif key == 'Right':
canvas.move(snakebody, 20, 0)
after_tick()
window = Tk()
window.config(bg='darkgreen')
window.geometry('450x450')
window.resizable(0, 0)
canvas = Canvas(window, bg='darkgreen', borderwidth=0)
canvas.pack(fill=BOTH, expand=1)
snakebody = canvas.create_rectangle(100, 50, 50, 100,
outline='lightgreen',
fill='lightgreen')
window.bind('<Up>', move_event)
window.bind('<Down>', move_event)
window.bind('<Left>', move_event)
window.bind('<Right>', move_event)
window.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462085.html
標籤:Python tkinter tkinter-canvas
