Ç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 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
pip install pygame
🚀 Oyunu Çalıştırma
🎯 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
FPS = 15 # Yılan rengini değiştir self.color = BLUE
Yeni Özellikler Ekleyin
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
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'