Python ile Yılan Oyunu
Bu yazımızda, Python ile yılan oyunu kodlarını oluşturacağız. Bakınız:
from turtle import Screen from snake import Snake from food import Food from scoreboard import Scoreboard import time # Ekran ayarları. 'turtle' modülü bir pencere üzerinde grafik çizimler yapmamıza olanak tanır. screen = Screen() screen.setup(width=600, height=600) screen.bgcolor("black") screen.title("Benim Yılan Oyunum") screen.tracer(0) # Ekranın hemen güncellenmemesi için, böylece yılanın hareketi daha akıcı gözükür. # Oyun objelerinin başlatılması. snake = Snake() food = Food() scoreboard = Scoreboard() # Klavye hareketlerini dinlemek için komutlar. screen.listen() screen.onkey(snake.up, "Up") screen.onkey(snake.down, "Down") screen.onkey(snake.left, "Left") screen.onkey(snake.right, "Right") # Oyun döngüsü. Oyun süresince tekrar tekrar çalışır. game_is_on = True while game_is_on: screen.update() # Ekranı güncelle. time.sleep(0.1) # Yılanın hareket hızını kontrol etmek için 0.1 saniye bekleme ekliyoruz. snake.move() # Yılanı hareket ettir. # Yılanın yemle temas edip etmediğini kontrol eder. if snake.head.distance(food) < 15: food.refresh() # Yemi rastgele yeni bir yere taşı. snake.extend() # Yılanın boyutunu artır. scoreboard.increase_score() # Skoru 1 artır. # Yılanın ekran sınırlarıyla temas edip etmediğini kontrol eder. if snake.head.xcor() > 280 or snake.head.xcor() < -280 or snake.head.ycor() > 280 or snake.head.ycor() < -280: game_is_on = False scoreboard.game_over() # Oyun bitti yazısını göster. # Yılanın kendi gövdesine çarpıp çarpmadığını kontrol eder. for segment in snake.segments: if segment == snake.head: pass elif snake.head.distance(segment) < 10: game_is_on = False scoreboard.game_over() # Oyun bitti yazısını göster. # Oyun penceresini kapatmak için tıklama olayını dinler. screen.exitonclick()
from turtle import Turtle # Metin yazdırmak için ayarlar. ALIGNMENT = "center" FONT = ("Courier", 24, "normal") class Scoreboard(Turtle): def __init__(self): super().__init__() self.score = 0 self.color("white") self.penup() self.goto(0, 270) self.hideturtle() # Skor yazısını ekranın üst kısmına yerleştirirken kaplumbağa ikonunu gizler. self.update_scoreboard() # Başlangıçta skoru göster. # Skoru ekranda göstermek için kullanılır. def update_scoreboard(self): self.write(f"Skor: {self.score}", align=ALIGNMENT, font=FONT) # Oyun bittiğinde ekrana bu bilgiyi yazar. def game_over(self): self.goto(0, 0) self.write("OYUN BİTTİ", align=ALIGNMENT, font=FONT) # Skoru 1 artırma fonksiyonu. def increase_score(self): self.score += 1 self.clear() # Önceki skoru temizle. self.update_scoreboard() # Yeni skoru göster.
from turtle import Turtle # Yılanın başlangıç pozisyonları. STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)] # Yılanın hareket ettiğinde kaç birim ilerleyeceğini tanımlar. MOVE_DISTANCE = 20 # Yılanın hareket yönlerini tanımlayan sabitler. UP = 90 DOWN = 270 LEFT = 180 RIGHT = 0 class Snake: def __init__(self): self.segments = [] # Yılanın bölümlerini (segmentlerini) saklar. self.create_snake() # Yılanı başlangıç pozisyonunda oluşturur. self.head = self.segments[0] # Yılanın başını tanımlar. # Yılanın başlangıç segmentlerini oluşturur. def create_snake(self): for position in STARTING_POSITIONS: self.add_segment(position) # Yeni bir segment eklemek için kullanılır. def add_segment(self, position): new_segment = Turtle("square") # Yeni bir kare şeklinde segment oluşturur. new_segment.color("white") new_segment.penup() new_segment.goto(position) self.segments.append(new_segment) # Yılanı uzatır. Yem yendiğinde kullanılır. def extend(self): self.add_segment(self.segments[-1].position()) # Yılanın hareketini sağlar. Tüm segmentlerin bir öncekine doğru hareket etmesini sağlar. def move(self): for seg_num in range(len(self.segments) - 1, 0, -1): new_x = self.segments[seg_num - 1].xcor() new_y = self.segments[seg_num - 1].ycor() self.segments[seg_num].goto(new_x, new_y) self.head.forward(MOVE_DISTANCE) # Aşağıdaki fonksiyonlar yılanın hareket yönünü değiştirmek için kullanılır. def up(self): if self.head.heading() != DOWN: self.head.setheading(UP) def down(self): if self.head.heading() != UP: self.head.setheading(DOWN) def left(self): if self.head.heading() != RIGHT: self.head.setheading(LEFT) def right(self): if self.head.heading() != LEFT: self.head.setheading(RIGHT)
from turtle import Turtle import random class Food(Turtle): def __init__(self): super().__init__() self.shape("circle") # Yemi daire şeklinde oluşturur. self.penup() # Çizim yapmaz. self.shapesize(stretch_len=0.5, stretch_wid=0.5) # Yem boyutunu ayarlar. self.color("blue") # Yemin rengini mavi yapar. self.speed("fastest") # Yemin hızını en hızlı yapar. self.refresh() # Yemi başlangıçta rastgele bir konuma yerleştirir. # Yemi ekranda rastgele bir yere taşır. def refresh(self): random_x = random.randint(-280, 280) random_y = random.randint(-280, 280) self.goto(random_x, random_y)
Kodu çalıştırmak için: Trinket
Pythonda yılan oyunu yapıyorumda yılan yemi her yediğinde 1 birim değilde 3 birim uzaması lazım onun kodunu nasıl yazabilirim