Mayın Tarlası Oyunu Matlab Kodları

Herkese merhaba. Mayın tarlası oyunu 1990 yılında Microsoft tarafından çıkarıldı ve o zamanlar Valorant, PUBG, LoL oynar gibi mayın tarlası oynardık. Yani bendeki ve benim dönemimdeki (Y kuşağı) etkisi / değeri büyüktür.

Bu nedenle daha önceden mayın tarlası oyununun Python kodlarını paylaşmama rağmen şimdi de Matlab ile aynı oyunun nasıl yazıldığını göreceksiniz.

Aslında mayın tarlası (Minesweeper) oyunu benzeri başka oyunlar da bulunmaktadır.  İşte bazı örnekler:

  1. Minesweeper X: Bu oyun, klasik mayın tarlası oyununun biraz daha zorlu bir versiyonudur. Oyun tahtası daha büyüktür ve mayınlar daha yoğun bir şekilde yerleştirilmiştir. Ayrıca, oyun tahtasında bazı özel hücreler bulunur ve bu hücrelerin açılması ekstra puan kazandırır.

  2. Hexagonal Minesweeper: Bu oyun, klasik mayın tarlası oyununun altıgen hücrelerle yeniden tasarlanmış versiyonudur. Oyun, klasik versiyona benzer şekilde oynanır, ancak altıgen hücrelerin düzeni oyun dinamiklerinde farklılık yaratır.

  3. Nonogram: Bu oyun, bir resmin renkli piksellerini bir ızgara üzerinde doğru şekilde açığa çıkarma hedefiyle oynanır. Her satır ve sütun, açılması gereken hangi piksellerin olduğunu gösteren bir dizi numara ile işaretlenir. Oyuncular, bu numaraları kullanarak ızgarayı doğru şekilde tamamlamaya çalışırlar.

  4. Sudoku: Bu oyun, 9x9 boyutlu bir ızgara üzerinde oynanır ve oyuncuların her satırda, her sütunda ve her 3x3 bölgede sayıları doğru şekilde yerleştirmesi gerekmektedir. Oyun, matematiksel zekayı test etmek için tasarlanmıştır ve genellikle diğer mantık oyunlarına benzer şekilde oynanır.

Bu oyunlar, birçok farklı platformda mevcut olan popüler mantık oyunlarıdır. Bu oyunların her biri, farklı zorluk seviyeleri ve oyun dinamikleri sunar ve birçok insanın zihinsel becerilerinizi geliştirmeye yardımcı olabilir. Şimdi gelelim Matlab ile Mayın Tarlası (Minesweeper) oyununun kodlarına:

function minesweeper()
    % MAYIN TARLASI OYUNU
    % Kullanıcı dostu bir mayın tarlası oyunu implementasyonu
    
    clc; % Konsolu temizle
    fprintf('=== MAYIN TARLASI OYUNU ===\n\n');
    
    % Oyun parametrelerini ayarla
    boardSize = input('Oyun tahtası boyutunu girin (örn: 8): ');
    numMines = input('Mayın sayısını girin: ');
    
    % Geçerli giriş kontrolü
    if numMines >= boardSize^2
        error('Mayın sayısı tahta boyutundan büyük olamaz!');
    end
    
    % Oyun tahtalarını başlat
    [playerBoard, mineBoard] = initializeBoards(boardSize, numMines);
    
    gameOver = false;
    gameWon = false;
    moves = 0;
    
    % Ana oyun döngüsü
    while ~gameOver && ~gameWon
        % Mevcut tahtayı göster
        displayBoard(playerBoard);
        
        % Kullanıcıdan hamle al
        [row, col, action] = getPlayerMove(boardSize);
        
        % Hamleyi işle
        if action == 1 % Sol tık - hücre açma
            if mineBoard(row, col) == -1 % Mayına bastı
                gameOver = true;
                fprintf('MAYINA BASTINIZ! OYUN BİTTİ.\n');
                revealMines(playerBoard, mineBoard);
                displayBoard(playerBoard);
            else
                % Hücreyi aç ve komşu mayın sayısını göster
                playerBoard = revealCell(playerBoard, mineBoard, row, col);
                moves = moves + 1;
            end
        else % Sağ tık - bayrak koyma/kaldırma
            if playerBoard(row, col) == -2 % Bayrak yoksa koy
                playerBoard(row, col) = -3; % Bayrak koy
                fprintf('Bayrak koyuldu: (%d,%d)\n', row, col);
            elseif playerBoard(row, col) == -3 % Bayrak varsa kaldır
                playerBoard(row, col) = -2; % Bayrak kaldır
                fprintf('Bayrak kaldırıldı: (%d,%d)\n', row, col);
            end
        end
        
        % Kazanma durumunu kontrol et
        if checkWinCondition(playerBoard, mineBoard, numMines)
            gameWon = true;
            fprintf('TEBRİKLER! OYUNU KAZANDINIZ!\n');
            fprintf('Toplam hamle: %d\n', moves);
            revealMines(playerBoard, mineBoard);
            displayBoard(playerBoard);
        end
    end
end

function [playerBoard, mineBoard] = initializeBoards(size, numMines)
    % OYUN TAHTALARINI BAŞLAT
    % playerBoard: -2 = kapalı, -3 = bayraklı, >=0 = açık
    % mineBoard: -1 = mayın, >=0 = komşu mayın sayısı
    
    playerBoard = ones(size) * -2; % Tüm hücreler kapalı başlar
    mineBoard = zeros(size); % Mayın tahtası
    
    % Mayınları rastgele yerleştir
    minesPlaced = 0;
    while minesPlaced < numMines
        row = randi(size);
        col = randi(size);
        
        if mineBoard(row, col) ~= -1 % Eğer zaten mayın yoksa
            mineBoard(row, col) = -1; % Mayın koy
            minesPlaced = minesPlaced + 1;
            
            % Komşu hücrelerin sayılarını güncelle
            for i = max(1, row-1):min(size, row+1)
                for j = max(1, col-1):min(size, col+1)
                    if mineBoard(i, j) ~= -1 % Mayın değilse
                        mineBoard(i, j) = mineBoard(i, j) + 1;
                    end
                end
            end
        end
    end
end

function displayBoard(board)
    % OYUN TAHTASINI EKRANDA GÖSTER
    
    [rows, cols] = size(board);
    
    fprintf('   ');
    for j = 1:cols
        fprintf('%2d ', j);
    end
    fprintf('\n');
    
    fprintf('   ');
    for j = 1:cols
        fprintf('---');
    end
    fprintf('\n');
    
    for i = 1:rows
        fprintf('%2d|', i);
        for j = 1:cols
            switch board(i, j)
                case -2 % Kapalı hücre
                    fprintf(' . ');
                case -3 % Bayraklı hücre
                    fprintf(' F ');
                case -1 % Mayın (açılmış)
                    fprintf(' * ');
                case 0 % Boş hücre
                    fprintf('   ');
                otherwise % Sayı
                    fprintf('%2d ', board(i, j));
            end
        end
        fprintf('\n');
    end
    fprintf('\n');
end

function [row, col, action] = getPlayerMove(boardSize)
    % KULLANICIDAN HAMLE AL
    
    validInput = false;
    while ~validInput
        inputStr = input('Hamle girin (örn: "3 4" açmak için, "3 4 f" bayrak için): ', 's');
        
        % Girdiyi parçala
        inputs = strsplit(strtrim(inputStr));
        
        if length(inputs) >= 2
            row = str2double(inputs{1});
            col = str2double(inputs{2});
            
            % Geçerli satır/sütun kontrolü
            if ~isnan(row) && ~isnan(col) && ...
               row >= 1 && row <= boardSize && ...
               col >= 1 && col <= boardSize
               
                % Eylem belirleme (sol tık veya sağ tık)
                if length(inputs) >= 3 && strcmpi(inputs{3}, 'f')
                    action = 2; % Sağ tık - bayrak
                else
                    action = 1; % Sol tık - açma
                end
                
                validInput = true;
            else
                fprintf('Geçersiz giriş! Satır ve sütun 1-%d arasında olmalı.\n', boardSize);
            end
        else
            fprintf('Geçersiz format! Örnek: "3 4" veya "3 4 f"\n');
        end
    end
end

function newBoard = revealCell(playerBoard, mineBoard, row, col)
    % HÜCREYİ AÇ VE GEREKİRSE YAYILIM YAP
    
    newBoard = playerBoard;
    
    % Eğer hücre zaten açıksa veya bayraklıysa, hiçbir şey yapma
    if newBoard(row, col) >= 0 || newBoard(row, col) == -3
        return;
    end
    
    % Mayın sayısını göster
    newBoard(row, col) = mineBoard(row, col);
    
    % Eğer boş hücreyse (0), komşuları da aç
    if mineBoard(row, col) == 0
        [rows, cols] = size(mineBoard);
        for i = max(1, row-1):min(rows, row+1)
            for j = max(1, col-1):min(cols, col+1)
                if ~(i == row && j == col) && newBoard(i, j) == -2
                    newBoard = revealCell(newBoard, mineBoard, i, j);
                end
            end
        end
    end
end

function revealMines(playerBoard, mineBoard)
    % OYUN BİTTİĞİNDE TÜM MAYINLARI GÖSTER
    
    [rows, cols] = size(mineBoard);
    for i = 1:rows
        for j = 1:cols
            if mineBoard(i, j) == -1 % Mayın ise
                playerBoard(i, j) = -1; % Mayını göster
            end
        end
    end
end

function won = checkWinCondition(playerBoard, mineBoard, numMines)
    % KAZANMA DURUMUNU KONTROL ET
    
    [rows, cols] = size(playerBoard);
    correctFlags = 0;
    unrevealedSafe = 0;
    
    for i = 1:rows
        for j = 1:cols
            if playerBoard(i, j) == -3 && mineBoard(i, j) == -1
                correctFlags = correctFlags + 1;
            elseif playerBoard(i, j) == -2 && mineBoard(i, j) ~= -1
                unrevealedSafe = unrevealedSafe + 1;
            end
        end
    end
    
    % Tüm mayınlar doğru bayraklanmışsa veya tüm güvenli hücreler açılmışsa
    won = (correctFlags == numMines) || (unrevealedSafe == 0);
end

% Oyunu başlat
minesweeper();

Oyunumuz, size tam bir özelleştirme özgürlüğü sunuyor. İster 8x8 geleneksel bir tahta, ister daha büyük heyecanlar için 16x16 boyutunda bir oyun alanı oluşturabilirsiniz. Mayın sayısını da kendi zorluk seviyenize göre ayarlayabilirsiniz - tabii ki tahtaya sığacak kadar!

🚀 Sezgisel Oyun Mekaniği

Klasik mayın tarlası deneyimini eksiksiz bir şekilde sunuyoruz:

  • Sol tıklama ile hücreleri güvenle açabilir

  • Sağ tıklama (veya 'f' tuşu) ile şüpheli mayınları bayrakla işaretleyebilir

  • Otomatik genişleme özelliği sayesinde boş alanlar anında keşfedilir

🎯 Akıllı Kazanma Koşulları

Oyunumuz iki farklı şekilde kazanmanıza olanak tanır:

  1. Tüm mayınları doğru şekilde bayrakla işaretleyerek

  2. Tüm güvenli hücreleri başarıyla açarak

👀 Şeffaf Oyun Deneyimi

Oyun sonunda tüm mayınların yerleri gösterilir, böylece nerede hata yaptığınızı analiz edebilir ve bir sonraki oyununuz için stratejinizi geliştirebilirsiniz.

🕹️ Nasıl Oynanır?

🎮 Oyunu Başlatma

MATLAB'da kodu çalıştırdığınızda sizi basit ve anlaşılır bir kurulum süreci bekliyor:

>> minesweeper()
=== MAYIN TARLASI OYUNU ===

Oyun tahtası boyutunu girin (örn: 8): 10
Mayın sayısını girin: 15

🎯 Hamle Yapma

Oyun tahtası karşınıza geldiğinde, hamlelerinizi doğal bir dilde yapabilirsiniz:

  • Hücre açmak için: "3 4" yazıp Enter'a basın (3. satır, 4. sütundaki hücreyi açar)

  • Bayrak koymak için: "3 4 f" yazıp Enter'a basın

  • Bayrak kaldırmak için: Bayraklı hücrede tekrar "3 4 f" yazın

📊 Tahta Görünümü

  • Nokta (.): Henüz açılmamış hücre

  • F: Bayrakla işaretlenmiş hücre

  • Boşluk: Mayın olmayan ve etrafında mayın bulunmayan güvenli alan

  • Sayılar: Etraftaki mayın sayısını gösterir (1-8 arası)

  • Yıldız (*): Mayın (oyun sonunda gösterilir)

🏆 Strateji İpuçları

  1. Köşelerden başlayın: İstatistiksel olarak köşelerde mayın bulunma olasılığı daha düşüktür

  2. Sayıları dikkatle okuyun: Her sayı, etraftaki 8 hücredeki mayın sayısını verir

  3. Mantık yürütün: Şans yerine dedüksiyon kullanarak ilerleyin

  4. Bayrakları akıllca kullanın: Kesin mayınları işaretleyerek kafanızı karıştırmaktan kurtulun

💡 Neden MATLAB'da Mayın Tarlası?

Bu proje, MATLAB'ın:

  • Matris işlemlerindeki gücünü

  • Kullanıcı etkileşim kolaylığını

  • Algoritmik düşünme becerilerini geliştirme potansiyelini

mükemmel bir şekilde sergiliyor. Özellikle özyinelemeli fonksiyonların kullanımı (hücre açma yayılımı) ve matris manipülasyonları için harika bir egzersiz sunuyor.

Oyunu deneyimledikten sonra kendi özelleştirmelerinizi yapmaktan çekinmeyin! Tahta boyutunu büyütün, mayın sayısını artırın veya görsel arayüzü geliştirin. Unutmayın, en iyi öğrenme yöntemi yaparak deneyimlemektir!

İyi oyunlar ve happy coding! 🚀

matlab, 'matlab mayın tarlası oyunu', 'matlab ile oyun', 'matlab mayın tarlası', 'matlab mayın tarlası kodları'', matlab mayın tarlası oyunu kodu', 'oyun kodlama örnekleri', 'örnek oyun kodu', 'matlab örnek oyun kodu', minesweeper

 

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 1003927