C# adam asmaca oyunu

sR-77

Katılımcı Üye
19 Haz 2010
361
0
Nereye
Merhaba Arkadaşlar,
Size ilkögretim yıllarımızın vazgeçilmez oyunu olan, adam asmacanın(-admin’den: internette de şiddete karşıyız. Oyunun adını tutulan ismi tahmin oyunu olarak değiştiriyorum ya da sizin isim tekliflerinize açığız. Özgür senin adına konuştum ama-) C# ile console uygulaması olarak nasıl yapıldığını anlatacağım.
Ben yaparken ve oynarken çok zevk aldım. Oyunun nasıl oynandığını hepiniz biliyorsunuz. Dolayısıyla senaryo geliştirmeye gerek yok. Oyunun belli olan senaryosunu kodlamamız geriye kalıyor.
İlk olarak programın hafızasında tutulacak kelimeleri bir dizi olarak tanımlıyoruz. Ben isim ve şehir adları koydum siz herşeyi koyabilirsiniz…


1string[] kelimeler ={"Gözde","Mustafa","İstanbul","Ankara","Özgür","Sibel"};


Ardından Random sınıfından bir nesne oluşturup, bu nesneye rastgele bir değer atıyoruz. Atanan bu değer ile kelimeler dizisinden eleman seçeceğiz o elemanda bulunan string ifadeyi seçmiş olacağız ve tutulan_Kelime değişkenine atayacağız.
1Random rastgele = new Random();
2string tutulan_Kelime = kelimeler[rastgele.Next(0, kelimeler.Length)];


Bir tane string dizi tanımlıyoruz ve her bir elemanına “_” verisini giriyoruz. Bu dizi bizim ekranımızda görünecek “_” leri ve doğru girilen harflerimizi barındıracaktır.
1string[] kelime = new string[tutulan_Kelime.Length];
2for (int k = 0; k < tutulan_Kelime.Length; k++)
3{
4 kelime[k] = "_".ToString();
5}


Yukarıdaki döngüde tutulan_Kelime değişkeninin eleman sayısı kadar dönecek döngü kurup, kelime dizisine “_” değerlerini atadık.
Şimdi kullanıcıdan harf isteyerek, ekranı temizleyip programın gövdesini oluşturan yani sorgulama işleminin yapılacağı bölüme geçiyoruz.
1Console.Write("\nHarf Girin: ");
2string harf = Convert.ToString(Console.ReadLine());
3Console.Clear();
4// Kullanıcıdan 10 kez harf tahmini isteyeceğiz.
5for (int i = 1; i <10; i++)
6{


Asıl işlem buradan sonra başlayacak arkadaşlar. Yukarıda tanımlama işlerini yapmıştık şimdi ise harfin bulunup bulunmadığını, kullanıcının kalan hakları gibi bilgileri göstereceğimiz bölüme geldik…
İlk olarak bi döngü açıyoruz. Bu döngü kullanıcıya 10 hak vereceğimiz için 1 den 10 a kadar dönecek ve içeriği sorgulamalarla dolu olacak. Ve bu sorgulamalar 10 kez tekrar edilecek…
Döngümüzün parantezini açıyoruz ve şu kodları yazıyoruz…

01int khak=10,kalan_hak;
02int adet = 0;
03// kelime dizisindeki "_" lerin sayısını tutan bir değişken
04for (int z = 0; z < tutulan_Kelime.Length; z++)
05 {
06 if (kelime[z] == "_")
07 {
08 adet++;
09 }
10}


Yukarıdaki sorgulamada, kelime dizisinde bulunan “_” lerin sayısını adet değişkenine atıyoruz. Bunu neden yapıyoruz derseniz de ileride yapacağımız sorgulamada kelime de “_” olup olmadığını kontrol edecegiz, eğer hiç yoksa yani 0 a eşitse program biticek. Eğer 0 değilse ve tahmin hakkı dolmadıysa tekrar harf isteyecek. Neyse programa geri dönelim şimdi…
1for(int d=0;d < tutulan_Kelime.Length; d++)
2 {
3 if(tutulan_Kelime[d].ToString() == harf || tutulan_Kelime[d].ToString() == harf.ToUpper())
4 {
5 kelime[d] = harf.ToString();
6 --adet;
7 }
8 }


Yukarıdaki kodda ise 10 kez dönecek olan for döngüsünü açmadan önce kullanıcıdan istedigimiz harfi programın hafızasında tuttugu kelimenin elemanları ile tek tek karşılaştırıyoruz. Eğer harf elemanlardan bir veya birkaç tanesi ile uyuşuyorsa, uyuşan elemanın index numarasının kelime dizisindeki karşılıgına girilen harfi yazdırıyoruz ve “_” lerin sayısının tutuldugu adet değişkenini 1 eksiltiyoruz. Sizinde dikkatınizi çektiyse if() in içerisinde “ToUpper()” kodu var. Bu kod ne işe yara derseniz açıklayayım. Bu girilen string değeri yani harfi büyük harfe çeviriyor. Yani girdigimiz “a” harfini bir de “A” olarak sorguluyor.
1for (int d = 0; d < tutulan_Kelime.Length; d++)
2{
3 Console.Write(" " + kelime[d].ToString()); //ekrana kelime dizisini yazdiriyoruz.
4}


Bu döngüde ekrana kelime dizisinin elemanlarını teker teker yazdırıyoruz.
1if (adet != 0)
2 {
3 Console.WriteLine("\n\nKalan sakli harf sayisi:{0}, Kalan Hakkiniz:{1} ", adet, kalan_hak);
4 Console.Write("\nHarf Girin: ");
5 harf = Convert.ToString(Console.ReadLine());
6 kalan_hak--; //Kullanıcının kalan hakkını 1 eksiltiyor.
7 Console.Clear();
8 }


Bu bölümde “_” lerin sayısının tutulduğu adet değişkeninin 0′a eşit olup olmadığına bakıyor. Eğer değilse kullanıcının kalan hakkını ve kalan harf sayısını ekrana yazdıracak. Ardından kullanıcıdan harf isteyecek ve hakkı bir eksiltecek… Adet 0 a eşitse alttaki kodlara geçecek.
1else if (adet == 0)
2{
3 Console.Clear();
4 Console.Write("Tebrik ederim basardin!\n\nÇikmak için bir tusa basiniz...");
5 Console.ReadKey();
6 return;
7}//if bloğunu kapattık.
8//Şimdi de 10 kez çalışan döngüyü kapatıyoruz.
9}


Kullanıcıyı tebrik edip, programı kapatması için bir tuşa basmasını isteyecek…
Açtığımız 10 kez tekrar eden döngümüzün parantezini kapatıyoruz. Alt kısımda kullanıcı kelimeyi 10 kez harf girmesine rağmen çözemedigi için döngü bitecek ve üzgünüm mesajını alacak.
1Console.Clear();
2Console.Write("Üzgünüm Malesef basaramadin...\n\nÇikmak için bir tusa basiniz...");
3Console.ReadLine();


Ve oyunumuz hazır…
Umarım yararlı olmuştur. (-admin’ den : Anlamak için, emek verenlere öğrencilere eminim, faydalı olacaktır.)

Programın tamamı şu şekilde olacaktır. (-Özgür izninle programında bazı problemler vardı değişikler yaptım. Son hali şu şekildedir-)
01string[] kelimeler = { "Gözde", "Mustafa", "İstanbul", "Ankara", "Özgür", "Sibel" };
02Random rastgele = new Random();
03string tutulan_Kelime = kelimeler[rastgele.Next(0, 5)];
04int khak = 10,kalan_hak;
05Console.Write("Programin hafizasindaki isim {0} harfli\n", tutulan_Kelime.Length);
06string[] kelime = new string[tutulan_Kelime.Length];
07for (int k = 0; k < tutulan_Kelime.Length; k++)
08{
09 kelime[k] = "_".ToString();
10}
11
12Console.Write("\nHarf Girin: ");
13string harf = Convert.ToString(Console.ReadLine());
14Console.Clear();
15
16for (int i = 1; i <10; i++)
17{
18int adet = 0;
19for (int z = 0; z < tutulan_Kelime.Length; z++)
20{
21 if (kelime[z] == "_")
22 {
23 adet++;
24 }
25}
26
27for (int d = 0; d < tutulan_Kelime.Length; d++)
28{
29 if (tutulan_Kelime[d].ToString() == harf.ToString() || tutulan_Kelime[d].ToString() == harf.ToLower() || tutulan_Kelime[d].ToString() == harf.ToUpper())
30 {
31 kelime[d] = harf.ToString();
32 --adet;
33 }
34}
35
36for (int d = 0; d < tutulan_Kelime.Length; d++)
37{
38 Console.Write(" " + kelime[d].ToString());
39}
40if (adet != 0)
41{
42 kalan_hak = khak - i;
43 Console.WriteLine("\n\nKalan sakli harf sayisi:{0}, Kalan Hakkiniz:{1} ", adet, kalan_hak);
44 Console.Write("\nHarf Girin: ");
45 harf = Convert.ToString(Console.ReadLine());
46 kalan_hak--;
47 Console.Clear();
48}
49else if (adet == 0)
50{
51 Console.Clear();
52 Console.Write("Tebrik ederim basardin!\n\nÇikmak için bir tusa basiniz...");
53 Console.ReadKey();
54 return;
55}
56}
57Console.Clear();
58Console.WriteLine("Üzgünüm Malesef basaramadin...\n Çikmak için bir tusa basiniz...");
59Console.ReadKey();
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.