Mayın tarlası, bir strateji oyunudur. Oyun tahtası üzerinde rastgele yerleştirilmiş gizli mayınlardan kaçınılması gerekmektedir. Oyuncu, mayınların yerlerini tahmin ederek, her bir hücre için "mayın var" veya "mayın yok" şeklinde bir işaret koyar.
Oyunucunun amacı, tüm mayınların yerlerini doğru bir şekilde tahmin etmek ve tüm boş hücreleri açmaktır.
Oyuncunun her bir hamlesi, bir hücrenin açılması veya işaretlenmesi şeklinde olabilir. Eğer açılan bir hücrede bir mayın varsa, oyun kaybedilir. Eğer açılan hücrede bir mayın yoksa, o hücredeki sayı, komşu hücrelerdeki mayın sayısını gösterir. Bu sayılar, oyuncunun tahminlerinde yararlıdır. Oyuncunun işaretlemeleri de önemlidir. İşaretlenen bir hücrede bir mayın varsa, oyuncu o hücreyi işaretler ve diğer hamlelerinde bu hücreyi göz önünde bulundurur. İşaretlenen bir hücrede bir mayın yoksa, oyuncu o hücreyi açmaz ve diğer hamlelerinde bu hücreyi göz önünde bulundurur. Oyunun amacı, tüm boş hücreleri açmak ve tüm mayınların yerlerini doğru bir şekilde tahmin etmektir.
Aşağıda yüksek seviyeli bir programlama dili olan Python ile mayın tarlasının oyununun nasıl yazıldığını göreceksiniz.
import os class Minesweeper: def __init__(self): """Oyunu başlat ve temel ayarları yap""" print("=== MAYIN TARLASI OYUNU ===\n") self.board_size = self.get_valid_input("Oyun tahtası boyutunu girin (örn: 8): ", 4, 20) self.num_mines = self.get_valid_input("Mayın sayısını girin: ", 1, self.board_size**2 - 1) # Oyun tahtalarını başlat self.player_board = [['.' for _ in range(self.board_size)] for _ in range(self.board_size)] self.mine_board = [[0 for _ in range(self.board_size)] for _ in range(self.board_size)] self.game_over = False self.game_won = False self.moves = 0 # Mayınları yerleştir self.place_mines() def get_valid_input(self, prompt, min_val, max_val): """Geçerli kullanıcı girişi al""" while True: try: value = int(input(prompt)) if min_val <= value <= max_val: return value else: print(f"Lütfen {min_val} ile {max_val} arasında bir değer girin.") except ValueError: print("Geçersiz giriş! Lütfen bir sayı girin.") def place_mines(self): """Mayınları rastgele yerleştir ve komşu sayılarını hesapla""" mines_placed = 0 while mines_placed < self.num_mines: row = random.randint(0, self.board_size - 1) col = random.randint(0, self.board_size - 1) # Eğer bu hücrede zaten mayın yoksa if self.mine_board[row][col] != -1: self.mine_board[row][col] = -1 # Mayın koy mines_placed += 1 # Komşu hücrelerin sayılarını güncelle for i in range(max(0, row-1), min(self.board_size, row+2)): for j in range(max(0, col-1), min(self.board_size, col+2)): if self.mine_board[i][j] != -1: # Mayın değilse self.mine_board[i][j] += 1 def display_board(self, show_mines=False): """Oyun tahtasını ekranda göster""" os.system('cls' if os.name == 'nt' else 'clear') # Konsolu temizle print(" " + " ".join(f"{i+1:2}" for i in range(self.board_size))) print(" " + "---" * self.board_size) for i in range(self.board_size): print(f"{i+1:2}|", end=" ") for j in range(self.board_size): if show_mines and self.mine_board[i][j] == -1: print(" * ", end="") # Mayın göster elif self.player_board[i][j] == 'F': print(" F ", end="") # Bayrak elif self.player_board[i][j] == '.': print(" . ", end="") # Kapalı hücre elif self.player_board[i][j] == ' ': print(" ", end="") # Boş hücre else: print(f" {self.player_board[i][j]} ", end="") # Sayı print() print() def get_player_move(self): """Kullanıcıdan hamle al""" while True: try: move = input("Hamle girin (örn: '3 4' açmak için, '3 4 f' bayrak için): ").strip().lower() parts = move.split() if len(parts) < 2: print("Geçersiz format! Örnek: '3 4' veya '3 4 f'") continue row = int(parts[0]) - 1 col = int(parts[1]) - 1 # Geçerli satır/sütun kontrolü if not (0 <= row < self.board_size and 0 <= col < self.board_size): print(f"Satır ve sütun 1-{self.board_size} arasında olmalı.") continue # Eylem belirleme action = 'flag' if len(parts) > 2 and parts[2] == 'f' else 'reveal' return row, col, action except ValueError: print("Geçersiz giriş! Lütfen sayıları doğru formatta girin.") def reveal_cell(self, row, col): """Hücreyi aç ve gerekirse yayılım yap""" # Eğer hücre zaten açıksa veya bayraklıysa if self.player_board[row][col] != '.': return # Mayına bastıysa if self.mine_board[row][col] == -1: self.game_over = True return # Mayın sayısını göster mine_count = self.mine_board[row][col] if mine_count > 0: self.player_board[row][col] = str(mine_count) else: self.player_board[row][col] = ' ' # Boş hücre # Eğer boş hücreyse, komşuları da aç (özyinelemeli) for i in range(max(0, row-1), min(self.board_size, row+2)): for j in range(max(0, col-1), min(self.board_size, col+2)): if not (i == row and j == col): self.reveal_cell(i, j) def toggle_flag(self, row, col): """Bayrak koy veya kaldır""" if self.player_board[row][col] == '.': self.player_board[row][col] = 'F' print(f"Bayrak koyuldu: ({row+1},{col+1})") elif self.player_board[row][col] == 'F': self.player_board[row][col] = '.' print(f"Bayrak kaldırıldı: ({row+1},{col+1})") else: print("Bu hücre zaten açık!") def check_win(self): """Kazanma durumunu kontrol et""" # Tüm güvenli hücreler açıldı mı? for i in range(self.board_size): for j in range(self.board_size): if self.mine_board[i][j] != -1 and self.player_board[i][j] in ['.', 'F']: return False # Tüm mayınlar doğru bayraklanmış mı? correct_flags = 0 for i in range(self.board_size): for j in range(self.board_size): if self.player_board[i][j] == 'F' and self.mine_board[i][j] == -1: correct_flags += 1 return correct_flags == self.num_mines def play(self): """Ana oyun döngüsü""" while not self.game_over and not self.game_won: self.display_board() # Kullanıcıdan hamle al row, col, action = self.get_player_move() # Hamleyi işle if action == 'reveal': if self.player_board[row][col] == 'F': print("Önce bayrağı kaldırın!") continue self.reveal_cell(row, col) self.moves += 1 if self.game_over: print("MAYINA BASTINIZ! OYUN BİTTİ.") self.display_board(show_mines=True) break else: # Bayrak işlemi self.toggle_flag(row, col) # Kazanma durumunu kontrol et if self.check_win(): self.game_won = True print("TEBRİKLER! OYUNU KAZANDINIZ!") print(f"Toplam hamle: {self.moves}") self.display_board(show_mines=True) break # Oyunu başlat if __name__ == "__main__": while True: game = Minesweeper() game.play() play_again = input("\nTekrar oynamak ister misiniz? (e/h): ").strip().lower() if play_again not in ['e', 'evet', 'y', 'yes']: print("Oynadığınız için teşekkürler!") break
🎮 Tam Özelleştirilebilir Oyun Deneyimi
board_size = 10 # 4x4'ten 20x20'ye kadar num_mines = 15 # Tahta boyutuna uygun herhangi bir sayı
🚀 Akıllı Oyun Mekaniği
-
Sol tıklama (reveal): Hücreleri güvenle aç
-
Sağ tıklama (flag): Mayın şüphesi olan yerlere bayrak koy
-
Otomatik genişleme: Boş alanların otomatik olarak açılması
-
Anlık geri bildirim: Her hamlede tahtanın güncellenmesi
🏆 İki Farklı Kazanma Yolu
-
Tüm mayınları doğru bayrakla işaretleyerek
-
Tüm güvenli hücreleri başarıyla açarak
👀 Şeffaf Öğrenme Deneyimi
Oyun sonunda tüm mayınlar gösterilir, böylece:
-
Hatalarınızı analiz edebilirsiniz
-
Stratejinizi geliştirebilirsiniz
-
Algoritmayı daha iyi anlayabilirsiniz
🕹️ Nasıl Oynanır? - Adım Adım Kılavuz
1. 🎮 Oyunu Başlatma
Program sizi hemen karşılayacak:
Oyun tahtası boyutunu girin (örn: 8): 10 Mayın sayısını girin: 15
2. 🎯 Hamle Yapma Sanatı
Temel komutlar:
-
3 4
→ 3. satır, 4. sütunu açar -
3 4 f
→ 3. satır, 4. sütuna bayrak koyar/kaldırır
Örnek oyun akışı:
Hamle girin (örn: '3 4' açmak için, '3 4 f' bayrak için): 1 1 Hamle girin (örn: '3 4' açmak için, '3 4 f' bayrak için): 5 5 f Hamle girin (örn: '3 4' açmak için, '3 4 f' bayrak için): 8 2
3. 📊 Tahta Görünümü ve İşaretler
-
.
→ Henüz keşfedilmemiş bölge -
F
→ Bayrak: "Burada mayın var!" -
(boşluk) → Tamamen güvenli alan
-
1-8
→ Etraftaki mayın sayısı -
*
→ Mayın (sadece oyun sonunda görünür)
4. 🏆 Strateji ve İpuçları
Başlangıç taktikleri:
# İlk hamle: "1 1" veya "8 8" gibi köşe noktaları
Orta oyun stratejileri:
-
Sayıları matematiksel olarak yorumla
-
Mantık yürüterek mayın konumlarını tahmin et
-
Bayrakları stratejik kullan
İleri seviye teknikler:
-
Örüntü tanıma: Benzer sayı dağılımlarını hatırla
-
Olasılık hesaplama: Riskli hamleleri minimize et
💻 Teknik Detaylar - Kodun Arkasındaki Mantık
🎲 Mayın Yerleştirme Algoritması
def place_mines(self): mines_placed = 0 while mines_placed < self.num_mines: row = random.randint(0, self.board_size - 1) col = random.randint(0, self.board_size - 1) if self.mine_board[row][col] != -1: self.mine_board[row][col] = -1 mines_placed += 1 # Komşu hücrelerin sayılarını güncelle for i in range(max(0, row-1), min(self.board_size, row+2)): for j in range(max(0, col-1), min(self.board_size, col+2)): if self.mine_board[i][j] != -1: self.mine_board[i][j] += 1
🔍 Özyinelemeli Hücre Açma
def reveal_cell(self, row, col): if self.player_board[row][col] != '.': return if self.mine_board[row][col] == -1: self.game_over = True return mine_count = self.mine_board[row][col] if mine_count > 0: self.player_board[row][col] = str(mine_count) else: self.player_board[row][col] = ' ' # Özyinelemeli olarak komşuları aç for i in range(max(0, row-1), min(self.board_size, row+2)): for j in range(max(0, col-1), min(self.board_size, col+2)): if not (i == row and j == col): self.reveal_cell(i, j)
🚀 Projeyi Geliştirme Fikirleri
🌈 Görsel İyileştirmeler
print("\033[91m * \033[0m") # Kırmızı mayın print("\033[94m F \033[0m") # Mavi bayrak
🎯 Zorluk Seviyeleri
"kolay": {"size": 8, "mines": 10}, "orta": {"size": 12, "mines": 20}, "zor": {"size": 16, "mines": 40} }
⏱️ Zamanlayıcı ve Skor Tablosu
start_time = time.time() # Oyun süresini hesapla elapsed_time = time.time() - start_time
🎉 Neden Bu Projeyi Yapmalısınız?
✅ Öğrenecekleriniz:
-
Nesne yönelimli programlama prensipleri
-
Özyineleme ve backtracking algoritmaları
-
Matris işlemleri ve hücre yönetimi
-
Kullanıcı etkileşimi ve input validation
🚀 Sonraki Adımlar:
-
Pygame ile grafik arayüz ekle
-
Yapay zeka çözücü geliştir
-
Web versiyonu oluştur (Flask/Django)
-
Mobil uygulama yap (Kivy)
🌟 Unutmayın: Her mayın, öğrenme fırsatıdır! Oyunu kaybetseniz bile, Python becerileriniz artıyor.
Happy coding! 🐍💣🚩
python, 'python mayın tarlası oyunu', 'python ile oyun', 'python mayın tarlası', 'python mayın tarlası kodları'', python mayın tarlası oyunu kodu', 'python pygame', 'python pygame kütüphanesi', 'oyun kodlama örnekleri', 'örnek oyun kodu', 'python örnek oyun kodu'