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