C# ile bir Kim Milyoner Olmak İster yarışması yapmak için öncelikle soruların ve cevapların yer aldığı bir veritabanına ihtiyacınız var. Bu veritabanı, her soru için soru metni, seçenekler ve doğru cevabı içermelidir. Ardından, yarışmanın oynanışını kontrol eden bir program oluşturmanız gerekiyor.
Aşağıdaki örnek, basit bir Kim Milyoner Olmak İster yarışmasıdır. Sorular ve cevaplar, bir SQLite veritabanında saklanmaktadır.
csharp
Copy code
using System;
using System.Collections.Generic;
using System.Data.SQLite;
namespace KimMilyonerOlmakIster
{
class Program
{
static void Main(string[] args)
{
string connectionString = @”Data Source=KimMilyonerOlmakIster.db”;
SQLiteConnection connection = new SQLiteConnection(connectionString);
try
{
connection.Open();
Console.WriteLine("Kim Milyoner Olmak İster Oyununa Hoş Geldiniz!");
int toplamPuan = 0;
int soruSayisi = 1;
while (soruSayisi <= 10) // Toplam 10 soru olacak
{
// Rastgele bir soru seç
Soru soru = RastgeleSoruSec(connection);
Console.WriteLine("Soru " + soruSayisi + ": " + soru.Metin);
// Seçenekleri rastgele sırala
List<string> secenekler = new List<string> { soru.Cevap, soru.YanlisSecenek1, soru.YanlisSecenek2, soru.YanlisSecenek3 };
secenekler = SecenekleriKaristir(secenekler);
// Seçenekleri ekrana yazdır
for (int i = 0; i < secenekler.Count; i++)
{
Console.WriteLine((i + 1) + ") " + secenekler[i]);
}
// Kullanıcıdan cevap al
Console.Write("Cevap: ");
string cevap = Console.ReadLine();
// Doğru cevap kontrolü yap
if (cevap == soru.Cevap)
{
Console.WriteLine("Tebrikler, doğru cevap!");
int puan = (soruSayisi * 1000);
Console.WriteLine("Kazandığınız Puan: " + puan);
toplamPuan += puan;
}
else
{
Console.WriteLine("Maalesef, yanlış cevap! Doğru cevap: " + soru.Cevap);
Console.WriteLine("Toplam Puanınız: " + toplamPuan);
break; // Oyunu bitir
}
Console.WriteLine("Toplam Puanınız: " + toplamPuan);
Console.WriteLine();
soruSayisi++;
}
if (soruSayisi == 11) // Oyuncu tüm soruları doğru yanıtladı
{
Console.WriteLine("Tebrikler, tüm soruları doğru yanıtladınız!");
Console.WriteLine("Toplam Puanınız: " + toplamPuan);
Console.WriteLine();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
connection.Close();
}
Console.ReadLine();
}
static Soru RastgeleSoruSec(SQLiteConnection connection)
{
Random random = new Random();
int soruNo = random.Next(1, 11); // Toplam 10 soru var
string query = "SELECT * FROM Sorular WHERE SoruNo = " + soruNo;
SQLiteCommand command = new SQLiteCommand(query, connection);
using (SQLiteDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
Soru soru = new Soru();
soru.SoruNo = soruNo;
soru.Metin = reader["SoruMetni"].ToString();
soru.Cevap = reader["Cevap"].ToString();
soru.YanlisSecenek1 = reader["YanlisSecenek1"].ToString();
soru.YanlisSecenek2 = reader["YanlisSecenek2"].ToString();
soru.YanlisSecenek3 = reader["YanlisSecenek3"].ToString();
return soru;
}
else
{
throw new Exception("Soru bulunamadı!");
}
}
}
static List<string> SecenekleriKaristir(List<string> secenekler)
{
Random random = new Random();
for (int i = 0; i < secenekler.Count; i++)
{
int randomIndex = random.Next(i, secenekler.Count);
string temp = secenekler[i];
secenekler[i] = secenekler[randomIndex];
secenekler[randomIndex] = temp;
}
return secenekler;
}
}
class Soru
{
public int SoruNo { get; set; }
public string Metin { get; set; }
public string Cevap { get; set; }
public string YanlisSecenek1 { get; set; }
public string YanlisSecenek2 { get; set; }
public string YanlisSecenek3 { get; set; }
}
}
Bu örnekte, yarışmanın işleyişi aşağıdaki adımlarla özetlenebilir:
- Bir veritabanı bağlantısı oluşturun ve bağlantıyı açın.
- Toplam puanı ve soru sayısını tutmak için değişkenler oluşturun.
- Soru sayısı 10 olana kadar aşağıdaki adımları tekrarlayın:
a. Veritabanından rastgele bir soru seçin.
b. Soruyu ekrana yazdırın.
c. Seçenekleri karıştırın ve ekrana yazdırın.
d. Kullanıcıdan cevap alın.
e. Cevabı kontrol edin. Eğer doğruysa, puanı hesaplayın ve ekrana yazdırın. Toplam puanı güncelleyin.
f. Eğer yanlış cevap verilirse, oyuncunun toplam puanını güncellemeyin ve doğru cevabı ekrana yazdırın. - Soru sayısı 10 olduğunda, oyuncuya tebrik mesajı yazdırın.
Veritabanı bağlantısını kapatın.
Bu örnekte, SQLite veritabanı kullanılmıştır ve “Sorular” adında bir tablo oluşturulmuştur. Tabloda her bir sorunun soru metni, doğru cevap ve yanlış seçenekleri bulunmaktadır. Program, her seferinde rastgele bir soru seçerek kullanıcıya sormaktadır. Kullanıcının verdiği cevap, doğru cevapla karşılaştırılarak puan hesaplanmakta ve sonucu ekrana yazdırılmaktadır. Her soru için seçenekler karıştırılmaktadır ve kullanıcıya doğru seçeneği bulma zorluğu eklenmektedir.