[YARDIM]Kelime Oyunu Cevap Kontrolü

      [YARDIM]Kelime Oyunu Cevap Kontrolü

      merhabalar. şimdi benim yaptığım resimli bir kelime oyunu var resme bakarak ne olduğunu bulacak fakat oyunun cevaplama bölümü ayrı hücrelerden(gameObject) oluşuyor tek bir gameObject değil resimdeki gibi. sürükle bırak yaparak harfleri yerleştiriyor ama kontrol scriptini bir türlü yapamadım. her türlü yolu denedim ama olmadı kafam çok karıştı. harflerin hepsini hücrelere yerleştirdikten sonra cevabı yazacak ve doğru mu değil mi kontrol edecek. bunu nasıl yaparım?



      En basit olarak surukledigin yerler var ya onlara BoxCollider2D ekleyip harflerin oldugu objelere script olusturup ornek:

      Source Code

      1. char benimHarfim;

      gibi bir tanim olusturup harfi atamak sonrada BoxCollider2D ekli olan yani bos kutulara script olusturup icine giren objenin olusturmus oldugun scriptin benimHarfim tanimini almasi ister o bos kutunun name'ini degistir ister script olusturup oraya ata ama son daki box'a script olusturup o cell objelerini onceden atayip name ile yaptiysan tanimdaki isimleri script olarak yaptiysan ekli scriptdeki tanimlarini kontrol ettirerek dogrulugunu kontrol ettirirsin tabiki sondaki kutuya kelimenin ne olmasi gerektiginide bir tanimda yazicaksin ki kontrol edilebilsin.

      Shevy wrote:

      En basit olarak surukledigin yerler var ya onlara BoxCollider2D ekleyip harflerin oldugu objelere script olusturup ornek:

      Source Code

      1. char benimHarfim;

      gibi bir tanim olusturup harfi atamak sonrada BoxCollider2D ekli olan yani bos kutulara script olusturup icine giren objenin olusturmus oldugun scriptin benimHarfim tanimini almasi ister o bos kutunun name'ini degistir ister script olusturup oraya ata ama son daki box'a script olusturup o cell objelerini onceden atayip name ile yaptiysan tanimdaki isimleri script olarak yaptiysan ekli scriptdeki tanimlarini kontrol ettirerek dogrulugunu kontrol ettirirsin tabiki sondaki kutuya kelimenin ne olmasi gerektiginide bir tanimda yazicaksin ki kontrol edilebilsin.
      her cell objesine harf isimleri vericem. yalnız harfleri hücreye sürüklerken ztn her harf her bir hücrenin child'ı oluyor. orda child ismini alarak yapiyim dedim ama beceremedim.
      Hucrelerin hepsi bir arraydaysa degilsede array olustur for dongusu kullanacaksin.Ornek:

      Source Code

      1. public GameObject[] tumHucreler;
      2. public string cevap;
      3. void Update(){
      4. for(int x = 0;x < tumHucreler.Length;x++){
      5. if(tumHucreler[x].transform.GetChild(0) != null){
      6. cevap += tumHucreler[x].transform.GetChild(0).name;
      7. }}}

      Ben bunu Update gosterdim ama bir seferlik cagiracak sekilde ayarla yoksa surekli answer tekrar eder harf olarak ekleme devam eder bildigin uzere.

      Shevy wrote:

      Hucrelerin hepsi bir arraydaysa degilsede array olustur for dongusu kullanacaksin.Ornek:

      Source Code

      1. public GameObject[] tumHucreler;
      2. public string cevap;
      3. void Update(){
      4. for(int x = 0;x < tumHucreler.Length;x++){
      5. if(tumHucreler[x].transform.GetChild(0) != null){
      6. cevap += tumHucreler[x].transform.GetChild(0).name;
      7. }}}

      Ben bunu Update gosterdim ama bir seferlik cagiracak sekilde ayarla yoksa surekli answer tekrar eder harf olarak ekleme devam eder bildigin uzere.
      bool ile oluyor true olunca bir kere yazdırıyor. aslında true false true false diye gitse tam olacak. onu da comp != comp dedim ama olmadı yanlış yere yerleştiriyorum herhalde

      Post was edited 3 times, last by “freedom667” ().

      True false diye getmesine gerek yok Update'de son hucreye atilip atilmadigini kontrol ettirirsen olur hepsini kontrol ettirmek performans kaybi ve bosa kod yazmaktan baska birsey olmaz sondaki mecbur olarak harf atanmak zorunda.Ondan sonra bu kodla hepsini kontrol ettirir answer dogruysa islemini yaparsin.

      Shevy wrote:

      True false diye getmesine gerek yok Update'de son hucreye atilip atilmadigini kontrol ettirirsen olur hepsini kontrol ettirmek performans kaybi ve bosa kod yazmaktan baska birsey olmaz sondaki mecbur olarak harf atanmak zorunda.Ondan sonra bu kodla hepsini kontrol ettirir answer dogruysa islemini yaparsin.
      son hücreyi tumHucreler [x].transform.GetChild (0) != null olan yerde kontrol etmek gerek sanırım fakat birşey Length -1 yazmamız lazım ama ne Length -1 yazmamız gerek son hücreyi kontrol ettiren o ama bulamadım.

      Post was edited 4 times, last by “freedom667” ().

      Shevy wrote:

      True false diye getmesine gerek yok Update'de son hucreye atilip atilmadigini kontrol ettirirsen olur hepsini kontrol ettirmek performans kaybi ve bosa kod yazmaktan baska birsey olmaz sondaki mecbur olarak harf atanmak zorunda.Ondan sonra bu kodla hepsini kontrol ettirir answer dogruysa islemini yaparsin.
      yaptım. if'in içindeki tumHucreler[]'in içine tumHucreler.Length -1 yazdım oldu. tek sefer çalışması içinde bool içine aldım yazdı fakat array out of range hatası veriyo. kelimeyi yazdırıyo ama nedense o hatayı da verdi.

      Source Code

      1. ​public bool comp = false;
      2. public GameObject[] tumHucreler;
      3. public string cevap;
      4. void Update(){
      5. if (!comp){
      6. for (int x = 0; x <= tumHucreler.Length; x++) {
      7. if (tumHucreler [tumHucreler.Length - 1].transform.GetChild (0) != null) {
      8. comp = true;
      9. cevap += tumHucreler [x].transform.GetChild (0).name;
      10. }
      11. }
      12. }
      13. }

      Shevy wrote:



      oyunun cevap kontrolünü yaptım fakat yanlış yaparken düzeltme kısmını yapamadım. şimdi bütün hücreler dolunca bool true oluyor. hücreler boş olduğunda ise false olsun dedim ama olmadı. nerede hata yapıyorum?

      Source Code

      1. public bool comp = false;
      2. public GameObject[] tumHucreler;
      3. public string result;
      4. public string answer;
      5. void Update(){
      6. if (!comp) {
      7. for (int x = 0; x < tumHucreler.Length; x++) {
      8. if (tumHucreler [tumHucreler.Length - 1].transform.GetChild (0) != null) {
      9. result += tumHucreler [x].transform.GetChild (0).name;
      10. comp = true;
      11. } else
      12. comp = false;
      13. }
      14. } else {
      15. if (result == answer)
      16. Debug.Log ("Correct");
      17. else{
      18. Debug.Log ("Wrong");
      19. result = "";
      20. }
      21. }
      22. }

      New

      freedom667 wrote:

      Shevy wrote:



      oyunun cevap kontrolünü yaptım fakat yanlış yaparken düzeltme kısmını yapamadım. şimdi bütün hücreler dolunca bool true oluyor. hücreler boş olduğunda ise false olsun dedim ama olmadı. nerede hata yapıyorum?

      Source Code

      1. public bool comp = false;
      2. public GameObject[] tumHucreler;
      3. public string result;
      4. public string answer;
      5. void Update(){
      6. if (!comp) {
      7. for (int x = 0; x < tumHucreler.Length; x++) {
      8. if (tumHucreler [tumHucreler.Length - 1].transform.GetChild (0) != null) {
      9. result += tumHucreler [x].transform.GetChild (0).name;
      10. comp = true;
      11. } else
      12. comp = false;
      13. }
      14. } else {
      15. if (result == answer)
      16. Debug.Log ("Correct");
      17. else{
      18. Debug.Log ("Wrong");
      19. result = "";
      20. }
      21. }
      22. }


      Kodlamada ki eksiklik şurada ;
      For döngüsü ile tüm hücreleri döndürmüşsünüz ve eğer hücre boş ise false dolu ise true demişsiniz. Fakat bi hücre boş olsada diğer hücreleride kontrol edeceğinden true değerine dönüştürmüş. Grafik taslağı olarak ;

      1. hücrenin değeri : abc
      2. hücrenin değeri : yok
      3. hücrenin değeri : cba

      For 1. hücreyi kontrol etti, bool true oldu.
      For 2. hücreyi kontrol etti, bool false oldu.
      For 3. hücreti kontrol etti, bool tekrar true oldu.

      Yani istediğinizi elde etmişsiniz fakat filtre veya emir vermeyi unutmuşsunuz. Kodunuzu bununla değiştirirseniz sorun hallolacaktır ;

      Source Code

      1. for (int x = 0; x < tumHucreler.Length; x++) {
      2. if (tumHucreler [tumHucreler.Length - 1].transform.GetChild (0) != null) {
      3. result += tumHucreler [x].transform.GetChild (0).name;
      4. comp = true;
      5. } else
      6. comp = false;
      7. break; // bu komut hücre boş olduğu zaman döngüden çıkmanızı sağlamaktadır. Haliyle bildiriminizi verip işleminize devam edebilirsiniz.
      8. }
      9. }
      Personal, coderbing.com/