Mayın tarlası, kullanıcının mayınların yerini tahmin ederek oyunu tamamladığı bir oyun türüdür. C# ile mayın tarlası oyunu yapmak için aşağıdaki adımları takip edebilirsiniz:
Mayın tarlası için gerekli olan özel karakterleri tanımlayın.
csharp
char unrevealedCell = ‘#’;
char emptyCell = ‘.’;
char mineCell = ‘*’;
Oyun alanı için gerekli olan değişkenleri tanımlayın.
csharp
int rowCount = 10;
int columnCount = 10;
int mineCount = 10;
Oyun alanını oluşturun ve rastgele mayınları yerleştirin.
csharp
char[,] gameBoard = new char[rowCount, columnCount];
int[,] mineBoard = new int[rowCount, columnCount];
// Oyun alanını oluşturun ve tüm hücreleri kapalı hale getirin
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
gameBoard[i, j] = unrevealedCell;
}
}
// Rastgele mayınları yerleştirin
Random random = new Random();
int minesToPlace = mineCount;
while (minesToPlace > 0)
{
int row = random.Next(rowCount);
int column = random.Next(columnCount);
if (mineBoard[row, column] == 0)
{
mineBoard[row, column] = 1;
minesToPlace--;
}
}
Kullanıcıdan hücre seçimleri alın ve oyun durumuna göre işlem yapın.
csharp
while (true)
{
Console.Clear();
// Oyun alanını ekrana yazdırın
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
Console.Write(gameBoard[i, j]);
}
Console.WriteLine();
}
// Kullanıcıdan hücre seçimi alın
Console.Write("Satır numarası girin (0-9): ");
int row = int.Parse(Console.ReadLine());
Console.Write("Sütun numarası girin (0-9): ");
int column = int.Parse(Console.ReadLine());
// Hücre seçimine göre işlem yapın
if (mineBoard[row, column] == 1)
{
Console.WriteLine("BOOM! Mayına bastınız. Oyun bitti.");
break;
}
else
{
int adjacentMineCount = CountAdjacentMines(mineBoard, row, column);
gameBoard[row, column] = adjacentMineCount == 0 ? emptyCell : adjacentMineCount.ToString()[0];
if (IsGameWon(gameBoard, mineBoard))
{
Console.WriteLine("Tebrikler! Tüm mayınları buldunuz.");
break;
}
}
}
// Konsol ekranında beklemek için
Console.ReadLine();
Yukarıdaki kodda, kullanıcının seçtiği hücrede mayın varsa oyun kaybedilir ve oyun döngüsü sona erer.
Eğer seçilen hücrede mayın yoksa, seçilen hücrenin etrafındaki mayın sayısı hesaplanır ve oyun alanına yazdırılır. Eğer kullanıcının tüm mayınları doğru bir şekilde tahmin ettiği durumda oyun kazanılır ve oyun döngüsü sona erer.
Ayrıca, oyun sırasında kullanılacak olan iki yardımcı fonksiyon da tanımlanmalıdır: CountAdjacentMines ve IsGameWon.
CountAdjacentMines fonksiyonu, seçilen hücrenin etrafındaki mayın sayısını hesaplar. Bu fonksiyon aşağıdaki gibi tanımlanabilir:
csharp
private static int CountAdjacentMines(int[,] mineBoard, int row, int column)
{
int count = 0;
for (int i = Math.Max(0, row - 1); i <= Math.Min(mineBoard.GetLength(0) - 1, row + 1); i++)
{
for (int j = Math.Max(0, column - 1); j <= Math.Min(mineBoard.GetLength(1) - 1, column + 1); j++)
{
count += mineBoard[i, j];
}
}
return count;
}
IsGameWon fonksiyonu, tüm mayınların doğru bir şekilde tahmin edilip edilmediğini kontrol eder. Bu fonksiyon aşağıdaki gibi tanımlanabilir:
csharp
private static bool IsGameWon(char[,] gameBoard, int[,] mineBoard)
{
for (int i = 0; i < gameBoard.GetLength(0); i++)
{
for (int j = 0; j < gameBoard.GetLength(1); j++)
{
if (gameBoard[i, j] == ‘#’ && mineBoard[i, j] == 0)
{
return false;
}
}
}
return true;
}
Yukarıdaki adımları takip ederek C# ile basit bir mayın tarlası oyunu yapabilirsiniz.