2016-02-25 70 views
-2

這裏是我的代碼我需要幫助關鍵功能關閉位置識別 基本上是遊戲的主要機制,告訴你什麼時候你的可移動 字符(人)是在一個壞字(壞); 我的問題是我怎麼做的if語句,告訴我:如果 男人是壞卡住tkinter帆布遊戲的關鍵功能

這裏是我的代碼,讓身邊的男人移動,併產生不良

PS不要用勺子喂:

from tkinter import * 

import random 


def up(event): 
    c.move(man, 0, -150) 
def down(event): 
    c.move(man, 0, 150) 
def right(event): 
    c.move(man, 150, 0) 
def left(event): 
    c.move(man, -150, 0) 

wd = Tk() 
wd.bind('<Up>', up) 
wd.bind('<Down>', down) 
wd.bind('<Right>', right) 
wd.bind('<Left>', left) 

c = Canvas(wd, height=475, width=450, bg='white', cursor='plus')#room at bottom 
c.pack() 

plc = random.randint(1,9) 
if plc == 1: 
    bad = c.create_oval(50,50,100,100,fill='blue') 
if plc == 2: 
    bad = c.create_oval(200,50,250,100,fill='blue') 
if plc == 3: 
    bad = c.create_oval(350,50,400,100,fill='blue') 
if plc == 4: 
    bad = c.create_oval(50,200,100,250,fill='blue') 
if plc == 5: 
    bad = c.create_oval(200,200,250,250,fill='blue') 
if plc == 6: 
    bad = c.create_oval(350,200,400,250,fill='blue') 
if plc == 7: 
    bad = c.create_oval(50,350,100,400,fill='blue') 
if plc == 8: 
    bad = c.create_oval(200,350,250,400,fill='blue') 
if plc == 9: 
    bad = c.create_oval(350,350,400,400,fill='blue') 

sq1 = c.create_rectangle(0,0,150,150,fill='white') 
sq2 = c.create_rectangle(0,150,150,300,fill='white') 
sq3 = c.create_rectangle(0,300,150,450,fill='white') 
sq4 = c.create_rectangle(150,0,300,150,fill='white') 
sq5 = c.create_rectangle(150,150,300,300,fill='white') 
sq6 = c.create_rectangle(150,300,300,450,fill='white') 
sq7 = c.create_rectangle(300,0,450,150,fill='white') 
sq8 = c.create_rectangle(300,150,450,300,fill='white') 
sq9 = c.create_rectangle(300,300,450,450,fill='white') 

man = c.create_oval(175,175,275,275,fill='red')#25 in each way 

catch() 

wd.mainloop() 
+1

歡迎來到Stack Overflow!請發佈一個最小完整的可驗證示例[MCVE](http://stackoverflow.com/help/mcve)。 – MarkyPython

+0

你是什麼意思 –

+1

點擊我上面評論中的鏈接,並閱讀那個頁面關於如何正確提出Stack Overflow的問題。要記住的主要事情是你應該試着問一個使用最少量代碼的問題,但是會得到相同的結果。再次閱讀我鏈接的頁面尋求幫助。 – MarkyPython

回答

1

Methods on Canvas Widget您可以結合使用.bbox.find_enclosed檢查,如果兩個物體相交:

def is_intercecting(canvas,tag1,tag2): 
    return tag1 in canvas.find_enclosed(*canvas.bbox(tag2)) 

或你的情況具體爲:

def is_man_touching_bad(): 
    return bad in c.find_enclosed(*c.bbox(man)) 

然後每次你打電話的,你可以用它來檢查,如果他們發生碰撞的運動功能之一的時間。

(我猜這將在catch函數調用,但不要在您提供的代碼定義使用)

編輯:按要求我這裏是使用is_man_touching_bad這將打開man黑當移到bad

def catch(): 
    if is_man_touching_bad(): 
     c.itemconfigure(man,fill="black") 
    else: 
     c.itemconfigure(man,fill="red") 

確保該位置被更新,每次打電話:

def up(event): 
    c.move(man, 0, -150) 
    catch() 
def down(event): 
    c.move(man, 0, 150) 
    catch() 
def right(event): 
    c.move(man, 150, 0) 
    catch() 
def left(event): 
    c.move(man, -150, 0) 
    catch() 
+0

即時對不起,你可以擴展我如何檢查人是否與印刷不好碰撞(人是交叉壞)plz –

+0

是一個足夠的例子使用?我把它放在一個函數中,但是你可以簡單地把'bad in c.find_enclosed(* c.bbox(man))'放在合適的條件語句 –

+0

thx的幫助下 –