Kelimenin son harfi ile başlayan kelime oyunu

Eminim hepimiz, kendi aramızda, “Kelimenin Son Harfi ile Başlayan Kelime Oyunu“nu oynamışızdır.

Oyunun kuralları basittir, iki “oyuncu” karşılıklı oturur, oyunculardan biri, bir kelime söyleyerek oyunu başlatır. Sonra oyuncular sırayla, diğerinin söylediği kelimenin son harfi ile başlayan başka bir kelime söylemek zorundadır. Söyleyecek kelime bulamayan oyuncu “oyunu” kaybeder.

Gelin bu basit oyunu C# ile yazalım. Hemen ekran görüntüsü vererek başlıyorum;

Oyunu, bir Oyuncu, bir Bilgisayar Oyuncusuna karşı oynayacak. İhtiyacımız olan ilk şey, Bilgisayar Oyuncusu’nun içinden kelime seçeceği sözlük. Sözlük oluşturmak için daha önce yazdığım Web Sayfasından Sözlük Oluşturma ve Dizi Karıştırma makalelerini birleştirip kullanacağız.

btnYeniOyun butonunun Click olayında, txtAdres kontrolüne yazılmış olan web sayfasındaki kelimeler bir listeye dolduruluyor, ayıklanıyor, karıştırılıyor ve lbKullanilabilecekKelimeler ListBox kontrolünde gösteriliyor.

public static class ExtensionManager { private static Random r = new Random();

public static List<T> ListeKaristir<T>(this List<T> Liste)
{
    List<T> tmpList = Liste.GetRange(0, Liste.Count);
    List<T> arrReturn = new List<T>();

    while (tmpList.Count > 0)
    {
        int rastgele = r.Next(0, tmpList.Count);
        arrReturn.Add(tmpList[rastgele]);
        tmpList.RemoveAt(rastgele);
    }

    return arrReturn;
} }</pre>
private void btnYeniOyun_Click(object sender, EventArgs e)
{
    lbKullanilabilecekKelimeler.Items.Clear();
    lbKullanilabilecekKelimeler.BeginUpdate();

    WebRequest wr = WebRequest.Create(txtAdres.Text);
    WebResponse ws = wr.GetResponse();
    StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
    string response = sr.ReadToEnd();
    sr.Close();
    ws.Close();

    List<string> arrKelime = new List<string>();

    Regex r = new Regex("<(.|\n)*?>");
    foreach (string satir in r.Replace(response, "").Split(" \t\r\n({[]}),.;:*-+/?<>&%'#@=\"\\_".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
        if (satir.Trim().Length > 5 && !arrKelime.Contains(satir.Trim()))
            arrKelime.Add(satir.Trim());

    lbKullanilabilecekKelimeler.Items.AddRange(arrKelime.ListeKaristir().ToArray());

    lbKullanilabilecekKelimeler.EndUpdate();

    txtYeniKelime.Clear();
    txtOyunTarihce.Clear();
}

Oyun, birinci oyuncunun txtYeniKelime kontrolüne yazdığı kelime ile başlıyor.

string OncekiKelimeninSonHarfi = string.Empty;
private void btnYeniKelime_Click(object sender, EventArgs e)
{
    if (txtYeniKelime.Text != "" && txtYeniKelime.Text.StartsWith(OncekiKelimeninSonHarfi))
    {
        string Kelime = txtYeniKelime.Text.Trim();
        txtOyunTarihce.Text = string.Format("(O): {0}{1}{2}", Kelime, Environment.NewLine, txtOyunTarihce.Text);
        txtYeniKelime.Clear();
        KelimeSec(Kelime);
        txtYeniKelime.Focus();
    }
}

Bilgisayar Oyuncusu Sözlük’ten kelimenin son harfi ile başlayan kelimelerden bir tanesini rastgele olarak seçiyor.

Kullandığı her kelimeyi lbKullanilabilecekKelimeler ListBox kontrolünden çıkartıp, lbKullanilmisKelimeler ListBox listesine ekliyor.

private void KelimeSec(string OncekiKelime)
{
    Random r = new Random();

    var Kelimeler = (from k in lbKullanilabilecekKelimeler.Items.OfType<string>() where k.StartsWith(OncekiKelime.Substring(OncekiKelime.Length - 1, 1)) select k).ToList<string>();

    if (Kelimeler.Count == 0)
    {
        MessageBox.Show(lbKullanilmisKelimeler.Items.Count + ". Kelimede Bilgisayar Oyuncusu oynayacak Kelime bulamadı!.", "Oyun Bitti!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        return;
    }

    int Sira = r.Next(0, Kelimeler.Count);
    string Kelime = Kelimeler[Sira];
    OncekiKelimeninSonHarfi = Kelime.Substring(Kelime.Length - 1, 1);

    lbKullanilabilecekKelimeler.Items.Remove(Kelime);
    lbKullanilmisKelimeler.Items.Add(Kelime);

    txtOyunTarihce.Text = string.Format("(B): {0}{1}{2}", Kelime, Environment.NewLine, txtOyunTarihce.Text);
}

![](/assets/uploads/2010/01/KSHBKO_3.png "KSHBKO_3")

Oyun, Bilgisayar Oyuncusu'nun kelime bulamamasına kadar devam ediyor.

![](/assets/uploads/2010/01/KSHBKO_4.png "KSHBKO_4")

Oyunun kaynak kodlarını buradan indirebilirsiniz.

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı