Python ile yılan oyunu yaptım ama kuyruğa çarpınca ölmesi gerekiyorken yeme çarpınca da ölüyor nerede hata yapıyorum?

import turtle     
import time       
hiz = 0.12       
import random         
                 


ekranım = turtle.Screen()           
ekranım.title("yılan oyunu")        
ekranım.bgcolor("lightgreen")             
ekranım.setup(width=600, height=600,)     
ekranım.tracer(0)                          


kafası = turtle.Turtle()       
kafası.speed(0)                
kafası.shape("square")            
kafası.color("white")
kafası.penup()                
kafası.goto(0,100)             
kafası.direction = "stop"          


yemek = turtle.Turtle()              
yemek.speed(0)                       
yemek.shape("circle")                
yemek.color("red")                   
yemek.penup()                        
yemek.goto(0,0)                      
yemek.shapesize(0.80 , 0.80)         



kuyruklar = []                                     



puan = 0
puanyazısı= turtle.Turtle()                     
puanyazısı.speed(0)                    
puanyazısı.shape("square")             
puanyazısı.color("darkblue")          
puanyazısı.penup()                       
puanyazısı.goto(0,260)                 
puanyazısı.hideturtle()                
                                     
puanyazısı.write(f"puan: {puan}" , align="center" , font="courier" "normal")


def move():                             
    if kafası.direction == "up":        
        y = kafası.ycor()               
        kafası.sety(y+15)              

    if kafası.direction == "down":       
        y = kafası.ycor()               
        kafası.sety(y-15)  
 
    if kafası.direction == "right":         
        x = kafası.xcor()               
        kafası.setx(x+15) 
  
    if kafası.direction == "left":       
        x = kafası.xcor()               
        kafası.setx(x-15) 


def goUp():
    if kafası.direction != "down":           
         kafası.direction = "up"

def goDown():
    if kafası.direction != "up":           
         kafası.direction = "down"

def goRight():
    if kafası.direction != "left":           
         kafası.direction = "right"

def goLeft():
    if kafası.direction != "right":           
         kafası.direction = "left"
                                            
            

ekranım.listen()                       
ekranım.onkey(goUp, "Up")            
ekranım.onkey(goDown, "Down")        
ekranım.onkey(goLeft, "Left")  






while True:
    ekranım.update()              
    

    if kafası.xcor()>300 or kafası.xcor()<-300 or kafası.ycor()>300 or kafası.ycor()<-300:   
         time.sleep(0.5)                                                                    
         kafası.goto(0,0)                                                                   
         kafası.direction = "stop"                                                          
         
         for eskikuyruk in kuyruklar:                                     
              eskikuyruk.goto(1000,1000)                                
         
         hiz = 0.12
         kuyruklar = []                                                  
                                                                         
         puan = 0                                                        
         puanyazısı.clear()                                                                                  
         puanyazısı.write(f"puan: {puan}" , align="center" , font="courier" "normal")




    if kafası.distance(yemek) < 20:         
        x = random.randint(-250 , 250)      
        y = random.randint(-250 , 250)      
        yemek.goto(x,y)                                                     
   


        yenikuyruk = turtle.Turtle()        
        yenikuyruk.speed(0)                 
        yenikuyruk.shape("square")          
        yenikuyruk.color("black")          
        yenikuyruk.penup()
        kuyruklar.append(yenikuyruk)
        
        hiz-=0.0025 

        puan += 10                          
        puanyazısı.clear()                  
                                     
        puanyazısı.write(f"puan: {puan}" , align="center" , font="courier" "normal")



    for i in range(len(kuyruklar)-1 , 0 , -1):    
        x = kuyruklar[i-1].xcor()                 
        y = kuyruklar[i-1].ycor()                 
        kuyruklar[i].goto(x,y)                    
                                                 

    if len(kuyruklar) > 0 :
        x = kafası.xcor()                       
        y = kafası.ycor()                      
        kuyruklar[0].goto(x,y)              
         

    move()                                      
                
    for çarpma in kuyruklar:                      
        if çarpma.distance(kafası) < 20:            
            time.sleep(0.5)                         
            kafası.goto(0, 0)                      
            kafası.direction = "stop"           
            
            for çarpma in kuyruklar:               
                çarpma.goto(1000, 1000)            
           
            kuyruklar = []                             
            puan = 0                              
            puanyazısı.clear()                         
            puanyazısı.write(f"Puan: {puan}", align='center', font='Courier'  'normal')   
            hiz = 0.12                                 
    
    time.sleep(hiz)
    if len(kuyruklar) > 0 :
        x = kafası.xcor()                       
        y = kafası.ycor()                      
        kuyruklar[0].goto(x,y)              
         

Bu kod satırı yemi yedikten sonra çıkan ilk kuyruğu kafa ile aynı yere yerleştiriyor.

    for çarpma in kuyruklar:
        if çarpma.distance(kafası) < 20:
            time.sleep(0.5)
            kafası.goto(0, 0)
            kafası.direction = "stop"

Hemen ardından bura çalışınca kafa ile kuyruğun birbirine değdiğini görüyor ve oyunu bitiriyor.

    if len(kuyruklar) > 0:
        x = kafası.xcor()
        y = kafası.ycor()
        if kafası.direction == "up":
            kuyruklar[0].goto(x, y-5)

Bunun önüne geçmek için ya burda benim yaptığım gibi kuyruğun yılanın arkasında (sadece tek bir yön için yaptım kalanını siz halledersiniz) ortaya çıkacak şekilde yapabilirsiniz ya da bu kodu yem yeme yerinin oraya koyun ortaya çıkma animasyonu bitene kadar listeye ekleyemeyebilirsiniz.

1 Beğeni