Adam Asmaca Oyunu (C Programlama)
Arkadaşla derste konuşurken beraber oyun falan yazalım dedi. Ben de anca siyah ekranda bir şeyler yazabiliriz şimdilik dedim. Sayı tahmin oyunu falan yazarız ancak şeklinde. Sonrasında adam asmaca oyunu yapamaz mıyız dedi. O an da ben de ekrana adamı nasıl çizeriz olayını düşündüm direkt tabi :). Kağıt üzerinde mümkün görünüyordu ve öyle de oldu. Ortaya çıkan çalışmayı paylaşmak istedim.
Oyunun İşleyişi
-
Bir kelimemiz olacak. Kullanıcı bu kelimedeki harfleri tahmin ederek sonuca ulaşmaya çalışacak.
-
Her olmayan harf için adamın bir kısmını ekrana çizdireceğiz.
-
Bilinen harf oldu mu da onu da ekrana yazdırıp adamın önceki halini değiştirmeyeceğiz.
Programda Kullanılan C dili özellikleri
-
Dizi(array), matris yapısı(multi-dimensional array),
-
Fonksiyonlar(functions),
-
İşaretçiler(pointers),
-
Switch-case, if-else,
-
Dinamik bellek ayırımı(dynamic memory allocation),
-
While ve for döngüsü.
Programın programlanması
Kelimeyi dışarıdan alma şansımız yok burada tabi, tekli kullanıcı durumunu düşünürsek. O yüzden farklı uzunluktaki kelimeleri bir matriste sakladım. Bunlar değiştirilebilir tabi, ekleme/çıkarmalar. Matrisin satır sayisi kelime sayımız olacak. Her seferinde farklı bir kelime seçerken de rastgele sayı seçme fonksiyonu(rand) sayesinde satir sayisi aralığında bir değer seçeceğiz.
Rastgele seçilen kelime uzunluğunda bir dizi için bellek ayırıyoruz ve bir fonksiyon yardımıyla dizinin her karakterini alt-tire yapıyoruz. Kağıt üzerindeki gibi :) Dıştaki while döngümüz kullanıcı hakkını bitirmemişse - ki adamın çizim durumuna göre programda 9 hak - ve kelimeyi doğru tahmin etmemişse -kelime bulunmamışsa- devam ediyor.
Kullanıcıdan harf alıp bu harfin rastgele seçilen kelime içerisine olup olmadığını for döngüsü ile kontrol ediyoruz. Harf kelime içerisinde var ise diziye ekliyoruz, yoksa hak sayisini artıyoruz/azaltıyoruz. Yazdığım programda artıyor gibi de, uygulamada bir değişiklik olmuş tabi. Ve döngünün sonuna bulunan harfleri tutan dizinin son halini ve adamın son halini ekrana yazdıyoruz.
Programın kaynak kodu ve ekran çıktısı
Kaynak Kod : Gist - Github
Ekran Çıktısı :
Daha da geliştirmek için yapılabilecekler
Program bir kaç saatlik uğraşın sonucu, o yüzden üzerinde fazla düzeltme, geliştirme yapmadım. Sadece sonuca ulaşmak istedim ve şu an da elimde olan kod da o işe yarıyor. Eleştirirken fazla acımasız olmayın :)
// Kelime seçme kısmı pek efektif olmadı bu şekliyle tabi. Derlendikten sonra değiştirilmesi mümkün değil. Onun haricinde kelimeler görüldüğü için tahmini kolay oluyor. Dosyadan kelime seçme işi daha etkili olabilirdi. Bir dosya içerisine eklenen daha fazla kelime ve ordan kelimenin seçilmesi. Dosya işlemlerine C de şu an için pek hakim değilim o yüzden böyle kaldı.
// Türkçe karakterler(ı,ü,ş,ç,ö,ğ) gözlemlediğim kadarıyla sıkıntı çıkarıyor. Çözümünü, onları harf olarak girilmemesi gerektiği uyarısı yaparak çözdüm :)
// Tek harf okumak C ‘de sıkıntı bir durum gibi görünüyor. Bir iki farklı çözüm var gördüğüm kadarıyla. Fazladan eklenmiş bir getchar() fonksiyonu ile fazla enter(’’) karakterini okuyarak harf alma sorununu çözmeye çalıştım.
// Adam çizdirme fonksiyonu geliştirilebilir diye düşünüyorum. Yani tek çözüm adamları o şekilde tek tek ayrı durumlar için bir iki karakter eksilterek yazdırılması olamaz.
// Bu yazıyı yazarken aklıma geldi. Oynayan kişi kelimeyi programın ortasında bulduğunu düşünebilir. O yüzden harfleri tek tek girmek yerine kelimeyi bir kereden girmek isteyebilir. Detaylı düşünmedim ama normal kağıt üzerinde öyle bir durum var sanırım. Bunun için farklı seçenekler sunulmalı ve ya girilen “şey” tek karakter değilse, kelime ise arkada farklı bir yapı ile doğru olup olmadığı sorgulanabilir.
Eleştiri veya önerileriz/fikirleriniz varsa lütfen paylaşın. İyi kodlamalar.