2016-05-18 17 views
0

私はPythonでポンスタイルのゲームを作ろうとしていますが、そのたびにタイトルにエラーが書き込まれます。私はすでにエラーを修正するためにグーグルの方法を試みましたが、私は最初から始めるべき場所がありません。私の距離機能が機能していない可能性があります。しかし、何かが壊れる可能性があるので、どんな助けも愛されるでしょう!また、これが出てくる完全なエラーです:TypeError:順序付け不可能な型:NoneType()<int()

Traceback (most recent call last): 
    File "/Users/NAME/Documents/PyPong.py", line 47, in <module> 
    checkCollisions() 
    File "/Users/NAME/Documents/PyPong.py", line 35, in checkCollisions 
    if distance(b,e) < 10: 
TypeError: unorderable types: NoneType() < int() 

そして、これはコードです:

from tkinter import * 
from math import * 
##MAIN GAME PART## 
window = Tk() 
canvas = Canvas(window,width=400,height=400) 
canvas.pack() 
##FUNCTIONS## 
def movePaddles(event): 
    key=event.keysym 
    if key == 'Up': 
     canvas.move(PaddleTwo,0,-10) 
    elif key == 'Down': 
     canvas.move(PaddleTwo,0,10) 
    if key == 'w': 
     canvas.move(PaddleOne,0,-10) 
    elif key == 's': 
     canvas.move(PaddleOne,0,10) 
    if key == 'j': 
     canvas.move(PingPongBall,-10,0) 
    elif key == 'k': 
     canvas.move(PingPongBall,10,0) 

def distance(target1,target2): 
    target1coords = canvas.coords(target1) 
    target2coords = canvas.coords(target2) 
    x1 = (target1coords[0] + target1coords[2])/2 
    y1 = (target1coords[1] + target1coords[3])/2 
    x2 = (target2coords[0] + target2coords[2])/2 
    y2 = (target2coords[1] + target2coords[3])/2 
    d = sqrt((x2-x1)** 2 + (y2-y1)** 2) 

def checkCollisions(): 
    for e in PaddleList: 
     if distance(PingPongBall,e) < 10: 
      print('hit') #print info on the shell 

##PADDLES##  
PaddleOne = canvas.create_rectangle(10 ,150 ,25 ,250 ,fill='blue') 
PaddleTwo = canvas.create_rectangle(400,150 ,385 ,250 ,fill='blue') 
PingPongBall = canvas.create_rectangle(200, 200, 210 ,210 ,fill='red') 
PaddleList = [PaddleOne,PaddleTwo] 
BallList = [PingPongBall] 

canvas.bind_all('<Key>',movePaddles) 
while True: 
    checkCollisions() 
+1

を 'ので、それはあなたの比較が失敗した理由である' NONE'を返し、何も返さdistance'doesn't。かなり明示的なエラーメッセージ。 – miradulo

+1

'def distance()'関数の最後に 'return d 'が必要 – TessellatingHeckler

+1

あなたは距離から何も返さない – PyNEwbie

答えて

2

それはNoneを返すようにするには、distance()から何かを返すことはありません。 Noneを10と比較することはできません。そのため、エラーが発生します。

の代わりに:

d = sqrt((x2-x1)** 2 + (y2-y1)** 2) 

単に書く:

return sqrt((x2-x1)** 2 + (y2-y1)** 2) 
関連する問題