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:
-
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.
-
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.
-
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.
-
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:
-
Tüm mayınları doğru şekilde bayrakla işaretleyerek
-
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ı
-
Köşelerden başlayın: İstatistiksel olarak köşelerde mayın bulunma olasılığı daha düşüktür
-
Sayıları dikkatle okuyun: Her sayı, etraftaki 8 hücredeki mayın sayısını verir
-
Mantık yürütün: Şans yerine dedüksiyon kullanarak ilerleyin
-
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