Python ile Yılan Oyunu

Çoğumuzun bildiği gibi yılan oyunu genellikle oyuncunun yılanın kafasını yönlendirdiği bir oyun türüdür. Oyuncu yılanın yönünü belirleyerek yılanın kafasını hareket ettirir ve yılanın kafası nereye giderse yılan da o yönde hareket eder.

Yılanın amacı, yılanın kafasını yönlendirerek oyunda rastgele yerleştirilen yemleri yemek ve yılanın boyunu uzatmaktır. Yılanın kafası veya vücudu, oyun alanının kenarlarına veya kendisine dokunduğunda oyun biter.

Aşağıda sizlerle paylaştığım Python kodu, oyuncunun yılanın kafasını yöneltmesini sağlayacak klavye kontrollerini sağlar ve yılanın hareketini işler. Ayrıca yemek oluşturma, yılanın uzunluğunu kontrol etme ve oyunun bitişini kontrol etme gibi işlevleri de sağlar. Bu şekilde, oyuncu yılanı yönlendirerek oyunu oynar ve yılanın boyunu uzatırken, yılanın kendisine veya oyun alanının kenarlarına çarpmasını önlemeye çalışır. 

Yılan oyununun Python kodunu aşağıda bulabilirsiniz. Bu kod, Pygame kütüphanesi kullanılarak yazılmıştır.  

Yılan Oyunu - Python Pygame ile

import pygame
import random
import sys
import time

# Pygame başlat
pygame.init()

# Renkler
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
DARK_GREEN = (0, 100, 0)
YELLOW = (255, 255, 0)

# Oyun ayarları
WIDTH, HEIGHT = 600, 600
GRID_SIZE = 20
GRID_WIDTH = WIDTH // GRID_SIZE
GRID_HEIGHT = HEIGHT // GRID_SIZE
FPS = 10

# Ekran oluştur
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Yılan Oyunu - Python")
clock = pygame.time.Clock()

# Fontlar
font = pygame.font.SysFont('Arial', 35)
small_font = pygame.font.SysFont('Arial', 20)

class Snake:
    def __init__(self):
        self.reset()
    
    def reset(self):
        # Yılanın başlangıç pozisyonu ve uzunluğu
        self.length = 3
        self.positions = [(GRID_WIDTH // 2, GRID_HEIGHT // 2)]
        self.direction = random.choice([(0, 1), (0, -1), (1, 0), (-1, 0)])
        self.score = 0
        self.grow_to = 3
        self.color = GREEN
        self.head_color = DARK_GREEN
    
    def get_head_position(self):
        return self.positions[0]
    
    def turn(self, point):
        # Yılanın yönünü değiştir (kendine doğru dönemez)
        if self.length > 1 and (point[0] * -1, point[1] * -1) == self.direction:
            return
        else:
            self.direction = point
    
    def move(self):
        # Yılanı hareket ettir
        head = self.get_head_position()
        x, y = self.direction
        new_x = (head[0] + x) % GRID_WIDTH
        new_y = (head[1] + y) % GRID_HEIGHT
        new_position = (new_x, new_y)
        
        # Kendine çarparsa oyun biter
        if new_position in self.positions[1:]:
            return False
        
        self.positions.insert(0, new_position)
        
        # Yılan büyümesi
        if len(self.positions) > self.grow_to:
            self.positions.pop()
        
        return True
    
    def draw(self, surface):
        # Yılanı çiz
        for i, p in enumerate(self.positions):
            rect = pygame.Rect((p[0] * GRID_SIZE, p[1] * GRID_SIZE), (GRID_SIZE, GRID_SIZE))
            if i == 0:  # Baş kısmı
                pygame.draw.rect(surface, self.head_color, rect)
                pygame.draw.rect(surface, BLACK, rect, 1)
                
                # Gözler çiz
                eye_size = GRID_SIZE // 5
                if self.direction == (1, 0):  # Sağa
                    pygame.draw.circle(surface, WHITE, (rect.right - eye_size, rect.top + eye_size*2), eye_size)
                    pygame.draw.circle(surface, WHITE, (rect.right - eye_size, rect.bottom - eye_size*2), eye_size)
                elif self.direction == (-1, 0):  # Sola
                    pygame.draw.circle(surface, WHITE, (rect.left + eye_size, rect.top + eye_size*2), eye_size)
                    pygame.draw.circle(surface, WHITE, (rect.left + eye_size, rect.bottom - eye_size*2), eye_size)
                elif self.direction == (0, 1):  # Aşağı
                    pygame.draw.circle(surface, WHITE, (rect.left + eye_size*2, rect.bottom - eye_size), eye_size)
                    pygame.draw.circle(surface, WHITE, (rect.right - eye_size*2, rect.bottom - eye_size), eye_size)
                elif self.direction == (0, -1):  # Yukarı
                    pygame.draw.circle(surface, WHITE, (rect.left + eye_size*2, rect.top + eye_size), eye_size)
                    pygame.draw.circle(surface, WHITE, (rect.right - eye_size*2, rect.top + eye_size), eye_size)
            else:  # Vücut kısmı
                pygame.draw.rect(surface, self.color, rect)
                pygame.draw.rect(surface, BLACK, rect, 1)

class Food:
    def __init__(self):
        self.position = (0, 0)
        self.color = RED
        self.randomize_position()
    
    def randomize_position(self):
        # Rastgele yem pozisyonu oluştur
        self.position = (random.randint(0, GRID_WIDTH - 1), random.randint(0, GRID_HEIGHT - 1))
    
    def draw(self, surface):
        # Yemi çiz
        rect = pygame.Rect((self.position[0] * GRID_SIZE, self.position[1] * GRID_SIZE), (GRID_SIZE, GRID_SIZE))
        pygame.draw.rect(surface, self.color, rect)
        pygame.draw.rect(surface, BLACK, rect, 1)
        
        # Yeme elma sapı çiz
        pygame.draw.line(surface, DARK_GREEN, 
                        (rect.centerx, rect.top + 2),
                        (rect.centerx - 3, rect.top - 3), 2)

def draw_grid(surface):
    # Izgara çiz
    for y in range(0, HEIGHT, GRID_SIZE):
        for x in range(0, WIDTH, GRID_SIZE):
            rect = pygame.Rect((x, y), (GRID_SIZE, GRID_SIZE))
            pygame.draw.rect(surface, BLACK, rect, 1)

def show_game_over(surface, score):
    # Oyun bitti ekranı
    surface.fill(BLACK)
    
    game_over_text = font.render('OYUN BİTTİ!', True, RED)
    score_text = font.render(f'Skor: {score}', True, WHITE)
    restart_text = small_font.render('Yeniden başlamak için SPACE tuşuna basın', True, WHITE)
    quit_text = small_font.render('Çıkmak için ESC tuşuna basın', True, WHITE)
    
    surface.blit(game_over_text, (WIDTH//2 - game_over_text.get_width()//2, HEIGHT//2 - 60))
    surface.blit(score_text, (WIDTH//2 - score_text.get_width()//2, HEIGHT//2 - 10))
    surface.blit(restart_text, (WIDTH//2 - restart_text.get_width()//2, HEIGHT//2 + 40))
    surface.blit(quit_text, (WIDTH//2 - quit_text.get_width()//2, HEIGHT//2 + 70))
    
    pygame.display.update()

def show_score(surface, score, high_score):
    # Skor göster
    score_text = small_font.render(f'Skor: {score}', True, WHITE)
    high_score_text = small_font.render(f'En Yüksek: {high_score}', True, YELLOW)
    surface.blit(score_text, (10, 10))
    surface.blit(high_score_text, (WIDTH - high_score_text.get_width() - 10, 10))

def main():
    snake = Snake()
    food = Food()
    high_score = 0
    game_over = False
    
    # Ana oyun döngüsü
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if game_over:
                    if event.key == pygame.K_SPACE:
                        # Yeniden başla
                        snake.reset()
                        food.randomize_position()
                        game_over = False
                    elif event.key == pygame.K_ESCAPE:
                        pygame.quit()
                        sys.exit()
                else:
                    # Yön tuşları
                    if event.key == pygame.K_UP:
                        snake.turn((0, -1))
                    elif event.key == pygame.K_DOWN:
                        snake.turn((0, 1))
                    elif event.key == pygame.K_LEFT:
                        snake.turn((-1, 0))
                    elif event.key == pygame.K_RIGHT:
                        snake.turn((1, 0))
        
        if not game_over:
            # Yılanı hareket ettir
            if not snake.move():
                game_over = True
                if snake.score > high_score:
                    high_score = snake.score
            
            # Yem yendi mi kontrol et
            if snake.get_head_position() == food.position:
                snake.grow_to += 1
                snake.score += 10
                food.randomize_position()
                # Yem yılanın üzerine gelmesin
                while food.position in snake.positions:
                    food.randomize_position()
            
            # Ekranı temizle ve çiz
            screen.fill(BLACK)
            draw_grid(screen)
            snake.draw(screen)
            food.draw(screen)
            show_score(screen, snake.score, high_score)
        else:
            show_game_over(screen, snake.score)
        
        pygame.display.update()
        clock.tick(FPS)

if __name__ == "__main__":
    main()

🎮 Yılan Oyunu Kurulum ve Çalıştırma

📋 Gereksinimler

# Pygame kütüphanesi gerekli
pip install pygame

🚀 Oyunu Çalıştırma

python snake_game.py

🎯 Oyun Kontrolleri

  • ↑ Yukarı Ok: Yukarı hareket

  • ↓ Aşağı Ok: Aşağı hareket

  • ← Sol Ok: Sola hareket

  • → Sağ Ok: Sağa hareket

  • SPACE: Oyunu yeniden başlat

  • ESC: Oyundan çık

✨ Özellikler

🐍 Yılan Özellikleri

  • Gerçekçi görünüm: Baş ve vücut ayrımı

  • Yön gözleri: Hareket yönüne göre değişen gözler

  • Büyüme mekaniği: Yem yedikçe uzama

🍎 Yem Özellikleri

  • Elma tasarımı: Gerçekçi yem görünümü

  • Akıllı yerleşim: Yılanın üzerine gelmeme

🏆 Skor Sistemi

  • Anlık skor: Mevcut puan gösterimi

  • En yüksek skor: Rekor takibi

  • Zorluk artışı: Skor arttıkça hızlanma

🎨 Görsel Özellikler

  • Izgara sistemi: Düzenli oyun alanı

  • Renk kodları: Farklı elementler için farklı renkler

  • Oyun sonu ekranı: Detaylı bilgilendirme

🚀 Geliştirme İpuçları

Oyunu Zorlaştırma

# Hızı artır
FPS = 15

# Yılan rengini değiştir
self.color = BLUE

Yeni Özellikler Ekleyin

# Çoklu yem ekle
class SpecialFood(Food):
    def __init__(self):
        super().__init__()
        self.color = YELLOW
        self.points = 50

# Engel ekle
class Obstacle:
    def __init__(self):
        self.positions = [(5, 5), (5, 6), (5, 7)]
        self.color = GRAY

Mobil Uyumluluk

# Dokunmatik kontroller ekle
if event.type == pygame.MOUSEBUTTONDOWN:
    # Dokunmatik kontrolleri işle

Bu yılan oyunu, Pygame'in temel özelliklerini kullanarak klasik oyun deneyimini modern bir şekilde sunar. Kod modüler yapıda olduğu için kolayca genişletilebilir ve özelleştirilebilir! 🎮

 

python, 'python yılan oyunu', 'python ile oyun', 'python snake game', 'python yılan oyunu kodları'', python yılan oyunu kodu', 'python pygame', 'python pygame kütüphanesi', pygame, 'pygame kütüphanesi örnek', 'oyun kodlama örnekleri', 'örnek oyun kodu', 'python örnek oyun kodu'

 

Bilgilendirme

www.aliosmangokcan.com sayfasına gösterdiğiniz ilgiden dolayı teşekkür ederim. İçeriklerle ilgili duygu ve düşüncelerinizi mail adresim üzerinden iletebilirsiniz...

 

İstatistikler

  • Kullanıcılar 1
  • Makaleler 113
  • Makale Görüntüleme 1003834