Ç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 Matlab 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 Matlab kodunu aşağıda bulabilirsiniz. Bu kod, Python'da olduğu gibi Pygame kütüphanesi gibi bir kütüphane ile yazılmamıştır. Ancak bu kez, MATLAB'ın grafik işleme işlevlerini kullanarak oyun ekranını çiziyoruz. Yılanın ve yemeğin konumlarını çizdirmek için plot
işlevini kullanıyoruz ve xlim
ve ylim
işlevleri ile oyun ekranının sınırlarını belirliyoruz. pause
işlevi ile de oyun hızını ayarlıyoruz.
Yılan Oyunu - MATLAB ile
% SNAKEGAME MATLAB ile Yılan Oyunu % Klasik yılan oyununun MATLAB implementasyonu properties % Oyun ayarları Width = 600 Height = 600 GridSize = 20 GridWidth GridHeight FPS = 10 % Yılan özellikleri Snake Food Score = 0 HighScore = 0 GameOver = false % Grafik nesneleri Figure Axes SnakePatches FoodPatch ScoreText HighScoreText GameOverText % Renkler Colors end methods function obj = SnakeGame() % SNAKEGAME Constructor - Oyunu başlat fprintf('=== MATLAB YILAN OYUNU ===\n'); fprintf('Kontroller: ↑ ↓ ← → tuşları\n'); fprintf('Yeniden başlatmak: R tuşu\n'); fprintf('Çıkmak: ESC tuşu\n\n'); % Izgara boyutlarını hesapla obj.GridWidth = obj.Width / obj.GridSize; obj.GridHeight = obj.Height / obj.GridSize; % Renkleri tanımla obj.Colors.White = [1 1 1]; obj.Colors.Black = [0 0 0]; obj.Colors.Red = [1 0 0]; obj.Colors.Green = [0 1 0]; obj.Colors.DarkGreen = [0 0.4 0]; obj.Colors.Yellow = [1 1 0]; obj.Colors.Blue = [0 0 1]; % Oyunu başlat obj.initializeGame(); obj.setupGraphics(); obj.runGame(); end function initializeGame(obj) % Oyun durumunu sıfırla obj.Score = 0; obj.GameOver = false; % Yılanı başlat obj.Snake.Positions = [floor(obj.GridWidth/2), floor(obj.GridHeight/2)]; obj.Snake.Direction = [1, 0]; % Sağa doğru obj.Snake.Length = 3; obj.Snake.GrowTo = 3; % Yem oluştur obj.generateFood(); end function setupGraphics(obj) % Grafik arayüzü oluştur % Figure ve axes oluştur obj.Figure = figure('Name', 'MATLAB Yılan Oyunu', ... 'NumberTitle', 'off', ... 'Position', [100, 100, obj.Width, obj.Height + 50], ... 'KeyPressFcn', @(src,event) obj.handleKeyPress(event), ... 'CloseRequestFcn', @(src,event) obj.cleanup(), ... 'MenuBar', 'none', ... 'Resize', 'off'); obj.Axes = axes('Parent', obj.Figure, ... 'Position', [0, 0, 1, 0.9], ... 'XLim', [0, obj.Width], ... 'YLim', [0, obj.Height], ... 'XTick', [], ... 'YTick', [], ... 'Color', obj.Colors.Black, ... 'XColor', obj.Colors.Black, ... 'YColor', obj.Colors.Black); hold on; axis equal; axis off; % Izgarayı çiz obj.drawGrid(); % Skor metinleri obj.ScoreText = text(10, obj.Height + 20, ... sprintf('Skor: %d', obj.Score), ... 'Color', obj.Colors.White, ... 'FontSize', 12); obj.HighScoreText = text(obj.Width - 100, obj.Height + 20, ... sprintf('En Yüksek: %d', obj.HighScore), ... 'Color', obj.Colors.Yellow, ... 'FontSize', 12); % Oyun bitti metni (başlangıçta gizli) obj.GameOverText = text(obj.Width/2, obj.Height/2, '', ... 'Color', obj.Colors.Red, ... 'FontSize', 24, ... 'HorizontalAlignment', 'center', ... 'Visible', 'off'); end function drawGrid(obj) % Izgara çiz for x = 0:obj.GridSize:obj.Width line([x, x], [0, obj.Height], 'Color', [0.3, 0.3, 0.3]); end for y = 0:obj.GridSize:obj.Height line([0, obj.Width], [y, y], 'Color', [0.3, 0.3, 0.3]); end end function generateFood(obj) % Rastgele yem pozisyonu oluştur while true pos = [randi(obj.GridWidth) - 1, randi(obj.GridHeight) - 1]; % Yem yılanın üzerinde olmasın if ~ismember(pos, obj.Snake.Positions, 'rows') obj.Food.Position = pos; break; end end end function handleKeyPress(obj, event) % Klavye girdilerini işle switch event.Key case 'uparrow' if ~isequal(obj.Snake.Direction, [0, 1]) % Aşağıdan gelmiyorsa obj.Snake.Direction = [0, -1]; end case 'downarrow' if ~isequal(obj.Snake.Direction, [0, -1]) % Yukarıdan gelmiyorsa obj.Snake.Direction = [0, 1]; end case 'leftarrow' if ~isequal(obj.Snake.Direction, [1, 0]) % Sağdan gelmiyorsa obj.Snake.Direction = [-1, 0]; end case 'rightarrow' if ~isequal(obj.Snake.Direction, [-1, 0]) % Soldan gelmiyorsa obj.Snake.Direction = [1, 0]; end case 'r' if obj.GameOver obj.initializeGame(); obj.updateGraphics(); end case 'escape' delete(obj.Figure); end end function success = moveSnake(obj) % Yılanı hareket ettir head = obj.Snake.Positions(1, :); newHead = head + obj.Snake.Direction; % Duvar geçişi (sarmal) newHead(1) = mod(newHead(1), obj.GridWidth); newHead(2) = mod(newHead(2), obj.GridHeight); % Kendine çarpma kontrolü if size(obj.Snake.Positions, 1) > 1 && ismember(newHead, obj.Snake.Positions(2:end, :), 'rows') success = false; return; end % Yeni pozisyonu ekle obj.Snake.Positions = [newHead; obj.Snake.Positions]; % Büyüme kontrolü if size(obj.Snake.Positions, 1) > obj.Snake.GrowTo obj.Snake.Positions(end, :) = []; end success = true; end function checkFood(obj) % Yem yendi mi kontrol et head = obj.Snake.Positions(1, :); if isequal(head, obj.Food.Position) obj.Snake.GrowTo = obj.Snake.GrowTo + 1; obj.Score = obj.Score + 10; obj.generateFood(); % Yüksek skor güncelleme if obj.Score > obj.HighScore obj.HighScore = obj.Score; end end end function updateGraphics(obj) % Grafikleri güncelle % Eski patch'leri temizle if ishandle(obj.SnakePatches) delete(obj.SnakePatches); end if ishandle(obj.FoodPatch) delete(obj.FoodPatch); end % Yılanı çiz obj.SnakePatches = []; for i = 1:size(obj.Snake.Positions, 1) pos = obj.Snake.Positions(i, :); x = pos(1) * obj.GridSize; y = pos(2) * obj.GridSize; if i == 1 % Baş color = obj.Colors.DarkGreen; else % Vücut color = obj.Colors.Green; end patch = rectangle('Position', [x, y, obj.GridSize, obj.GridSize], ... 'FaceColor', color, ... 'EdgeColor', obj.Colors.Black, ... 'LineWidth', 1); obj.SnakePatches = [obj.SnakePatches; patch]; end % Yemi çiz foodPos = obj.Food.Position; x = foodPos(1) * obj.GridSize; y = foodPos(2) * obj.GridSize; obj.FoodPatch = rectangle('Position', [x, y, obj.GridSize, obj.GridSize], ... 'FaceColor', obj.Colors.Red, ... 'EdgeColor', obj.Colors.Black, ... 'LineWidth', 1); % Skorları güncelle set(obj.ScoreText, 'String', sprintf('Skor: %d', obj.Score)); set(obj.HighScoreText, 'String', sprintf('En Yüksek: %d', obj.HighScore)); % Oyun bitti durumu if obj.GameOver set(obj.GameOverText, 'String', ... sprintf('OYUN BİTTİ!\nSkor: %d\nR tuşu ile yeniden başlat', obj.Score), ... 'Visible', 'on'); else set(obj.GameOverText, 'Visible', 'off'); end drawnow; end function runGame(obj) % Ana oyun döngüsü while ishandle(obj.Figure) if ~obj.GameOver % Yılanı hareket ettir if ~obj.moveSnake() obj.GameOver = true; continue; end % Yem kontrolü obj.checkFood(); % Grafikleri güncelle obj.updateGraphics(); % Bekleme pause(1/obj.FPS); else pause(0.1); % Oyun bittiğinde CPU kullanımını azalt end end end function cleanup(obj) % Temizlik işlemleri if ishandle(obj.Figure) delete(obj.Figure); end fprintf('Oyun sona erdi. İyi oyunlar!\n'); end end end % Oyunu başlat function playSnakeGame() game = SnakeGame(); end % Oyunu çalıştır playSnakeGame();
🎮 MATLAB Yılan Oyunu - Çalıştırma ve Kullanım
📋 Gereksinimler
-
MATLAB R2018b veya üzeri
-
Hiçbir ek toolbox gerekmez
🚀 Oyunu Başlatma
playSnakeGame() % Veya dosyayı çalıştırarak
🎯 Oyun Kontrolleri
-
↑ Yukarı Ok: Yukarı hareket
-
↓ Aşağı Ok: Aşağı hareket
-
← Sol Ok: Sola hareket
-
→ Sağ Ok: Sağa hareket
-
R: Oyunu yeniden başlat (game over durumunda)
-
ESC: Oyundan çık
✨ MATLAB'a Özel Özellikler
🏗️ Nesne Yönelimli Yapı
% MATLAB'ın OOP özelliklerini kullanır % Temiz ve modüler kod yapısı
🎨 MATLAB Grafik Motoru
rectangle('Position', [x, y, size, size], ... 'FaceColor', color, ... 'EdgeColor', 'black');
⚡ Gerçek Zamanlı Etkileşim
% Anında klavye tepkisi
🔧 Teknik Özellikler
🐍 Yılan Mekaniği
-
Sarmal duvar geçişi: Kenarlardan geçebilme
-
Büyüme sistemi: Yem yedikçe uzama
-
Çarpışma kontrolü: Kendine çarpma tespiti
🍎 Yem Sistemi
-
Akıllı yerleşim: Yılanın üzerine gelmeme
-
Rastgele konum: Her seferinde farklı pozisyon
📊 Skor ve İstatistikler
-
Anlık skor: Mevcut puan gösterimi
-
Rekor takibi: En yüksek skor kaydı
-
Görsel feedback: Renkli skor göstergeleri
🎮 Oyun Deneyimi
⚡ Performans
% Optimize edilmiş grafik güncelleme
🎨 Görsel Kalite
-
Net ızgara çizgileri
-
Renk kodlu elementler
-
Profesyonel oyun arayüzü
🕹️ Oyun Akışı
-
Başlangıç: 3 birimlik yılan
-
Oyun içi: Yemleri toplayarak büyüme
-
Game over: Kendine çarpma veya duvardan çıkma
-
Yeniden başlat: R tuşu ile tekrar oynama
🚀 Geliştirme İpuçları
Oyunu Özelleştirme
obj.FPS = 15; % Izgara boyutunu değiştir obj.GridSize = 25; % Renkleri değiştir obj.Colors.Green = [0, 0.8, 0]; % Daha açık yeşil
Yeni Özellikler Ekleyin
obj.Obstacles = [5,5; 5,6; 5,7]; % Engel pozisyonları % Özel yemler ekle obj.SpecialFood.Position = [10,10]; obj.SpecialFood.Color = [1,1,0]; % Sarı obj.SpecialFood.Points = 50; % Ekstra puan
Zorluk Seviyeleri
function setDifficulty(obj, level) switch level case 'easy' obj.FPS = 8; case 'medium' obj.FPS = 12; case 'hard' obj.FPS = 16; end end
💡 MATLAB Avantajları
🎯 Eğitimsel Değer
-
Matris işlemleri: Pozisyon yönetimi
-
Nesne yönelimli programlama: OOP prensipleri
-
Grafik programlama: MATLAB figure handling
⚡ Performans
-
Yerel MATLAB motoru: Hızlı çalışma
-
Optimize edilmiş: Düşük CPU kullanımı
-
Kararlı: Crash olmadan uzun süreli oynanış
🎨 Görsel Kalite
-
Vektörel grafikler: Keskin görüntü
-
Profesyonel arayüz: Temiz tasarım
-
Özelleştirilebilir: Kolay modifikasyon
🌟 MATLAB'da oyun geliştirme için mükemmel bir başlangıç! Kod yapısı sayesinde kolayca genişletebilir ve özelleştirebilirsiniz.
Happy coding! 🐍📊🎮
playSnakeGame();
NOT: Aynı oyunun Python ile yazılmış halini görmek için TIKLAYINIZ 😊
matlab, 'matlab yılan oyunu', 'matlab ile oyun', 'matlab snake game', 'matlab yılan oyunu kodları', 'matlab yılan oyunu kodu', 'matlab pygame kütüphanesi', matlab, 'oyun kodlama örnekleri', 'örnek oyun kodu', 'matlab örnek oyun kodu'