• 28-05-2020, 16:07:29
    #1
    Arkadaşlar küçük bir uygulama yapıyoruz çocuklar için toplama çıkarma çarpma bölme için.
    Şimdi uygulamada örnek veriyorum 20 kare var ve soru soruluyor o kare içerisinden o cevap seçiliyor. Bölme işleminde bir sıkıntı yok. Fakat diğer işlemlerde karede sonuç olmayabiliyor, ayrıca sonuçlar eksi de çıkabiliyor bu konuda yardımcı olmanıza ihtiyacım var. Kodlar şu şekilde:

    Alıntı
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;
    using UnityEngine.SceneManagement;

    public class GameManager : MonoBehaviour
    {
    [SerializeField]
    private GameObject karePrefab;

    [SerializeField]
    private Transform karelerPaneli;

    [SerializeField]
    private Text soruText;

    private GameObject[] karelerDizisi = new GameObject[25];

    [SerializeField]
    private Transform soruPaneli;

    [SerializeField]
    private Sprite[] kareSprites;


    List<int> bolumDegerleriListesi = new List<int>();

    int bolunenSayi, bolenSayi;
    int kacinciSoru;
    int dogruSonuc;

    int butonDegeri;

    bool butonaBasilsinmi;

    int kalanHak;

    string sorununZorlukDerecesi;

    KalanHaklarManager kalanHaklarManager;

    PuanManager puanManager;

    GameObject gecerliKare;

    [SerializeField]
    private GameObject sonucPaneli;

    [SerializeField]
    AudioSource audioSource;

    public AudioClip butonSesi;

    private void Awake()
    {
    kalanHak = 3;

    audioSource = GetComponent<AudioSource>();

    sonucPaneli.GetComponent<RectTransform>().localSca le = Vector3.zero;

    kalanHaklarManager = Object.FindObjectOfType<KalanHaklarManager>();
    puanManager = Object.FindObjectOfType<PuanManager>();



    kalanHaklarManager.KalanHaklariKontrolEt(kalanHak) ;
    }

    void Start()
    {


    butonaBasilsinmi = false;

    soruPaneli.GetComponent<RectTransform>().localScal e = Vector3.zero;

    kareleriOlustur();
    }

    public void kareleriOlustur()
    {
    for (int i = 0; i < 25; i++)
    {
    GameObject kare = Instantiate(karePrefab, karelerPaneli);
    kare.transform.GetChild(1).GetComponent<Image>().s prite = kareSprites[Random.Range(0, kareSprites.Length)];
    kare.transform.GetComponent<Button>().onClick.AddL istener(() => ButonaBasildi());
    karelerDizisi[i] = kare;

    }
    BolumDegerleriniTexteYazdir();

    StartCoroutine(DoFadeRoutine());
    Invoke("SoruPaneliniAc", 2f);
    }

    void ButonaBasildi()
    {
    if (butonaBasilsinmi)
    {
    audioSource.PlayOneShot(butonSesi);

    butonDegeri = int.Parse(UnityEngine.EventSystems.EventSystem.cur rent.currentSelectedGameObject.transform.GetChild( 0).GetComponent<Text>().text);

    gecerliKare = UnityEngine.EventSystems.EventSystem.current.curre ntSelectedGameObject;

    SonucuKontrolEt();
    }

    }

    void SonucuKontrolEt()
    {
    if (butonDegeri == dogruSonuc)
    {
    gecerliKare.transform.GetChild(1).GetComponent<Ima ge>().enabled = true;
    gecerliKare.transform.GetChild(0).GetComponent<Tex t>().text = "";
    gecerliKare.transform.GetComponent<Button>().inter actable = false;


    puanManager.PuaniArtir(sorununZorlukDerecesi);

    bolumDegerleriListesi.RemoveAt(kacinciSoru);

    if(bolumDegerleriListesi.Count>0)
    {
    SoruPaneliniAc();
    }
    else
    {
    OyunBitti();
    }


    }
    else
    {
    kalanHak--;
    kalanHaklarManager.KalanHaklariKontrolEt(kalanHak) ;
    }

    if(kalanHak<=0)
    {
    OyunBitti();
    }
    }


    void OyunBitti()
    {
    butonaBasilsinmi = false;
    sonucPaneli.GetComponent<RectTransform>().DOScale( 1, 0.3f).SetEase(Ease.OutBack);
    }
    IEnumerator DoFadeRoutine()
    {
    foreach (var kare in karelerDizisi)
    {
    kare.GetComponent<CanvasGroup>().DOFade(1, 0.2f);

    yield return new WaitForSeconds(0.07f);
    }
    }



    void BolumDegerleriniTexteYazdir()
    {


    foreach (var kare in karelerDizisi)
    {
    int rastgeleDeger = Random.Range(1, 13);
    bolumDegerleriListesi.Add(rastgeleDeger);

    kare.transform.GetChild(0).GetComponent<Text>().te xt = rastgeleDeger.ToString();
    }


    }


    void SoruPaneliniAc()
    {
    SoruyuSor();
    butonaBasilsinmi = true;
    soruPaneli.GetComponent<RectTransform>().DOScale(1 , 0.3f).SetEase(Ease.OutBack);
    }


    void SoruyuSor()
    {
    bolenSayi = Random.Range(2, 11);

    kacinciSoru = Random.Range(0, bolumDegerleriListesi.Count);

    dogruSonuc = bolumDegerleriListesi[kacinciSoru];

    bolunenSayi = bolenSayi * dogruSonuc;

    if (bolunenSayi <= 40)
    {
    sorununZorlukDerecesi = "kolay";
    }
    else if (bolunenSayi > 40 && bolunenSayi <= 80)
    {
    sorununZorlukDerecesi = "orta";
    }
    else
    {
    sorununZorlukDerecesi = "zor";
    }


    soruText.text = bolunenSayi.ToString() + " : " + bolenSayi.ToString();

    }
    public void GeriDon()
    {
    SceneManager.LoadScene("MenuLevel");
    }
    }
  • 28-05-2020, 16:27:34
    #2
    Konu net anlaşılmıyor hocam. Ayrıca bu kadar uzun bir kodu kimse vakit ayırıp inceleyip anlayamaz. Kendi yazmadığı için yoğun bir vakit harcaması lazım. Bunun yanında inspector panelini de bilmiyoruz. Sadece ilgili kodları ekleyin. Ve mümkünse görsel ekleyin yardımcı olabiliriz o zaman.
  • 28-05-2020, 16:34:20
    #3
    kodu çok incelemeye vaktim olmadı ama hızlıca bakarken bişey dikkatimi çekti && operatörünü yanlış kullanıyor olabilirmisin.
    & Operatörü her iki operandın değerlerini alır ve her iki operandda doğru olmadığı sürece yalnış sonucunu üretir. Doğru sonucunu vermesi için her iki operandın doğru olması gerekir. Örn: (yalnıs & yalnıs = yalnıs , yalnıs & dogru = yalnıs , dogru & dogru = dogru) gibi
    tabi kodu da net incelemek lazım
  • 28-05-2020, 16:51:38
    #4
    mfa95 adlı üyeden alıntı: mesajı görüntüle
    Konu net anlaşılmıyor hocam. Ayrıca bu kadar uzun bir kodu kimse vakit ayırıp inceleyip anlayamaz. Kendi yazmadığı için yoğun bir vakit harcaması lazım. Bunun yanında inspector panelini de bilmiyoruz. Sadece ilgili kodları ekleyin. Ve mümkünse görsel ekleyin yardımcı olabiliriz o zaman.
    hkafali adlı üyeden alıntı: mesajı görüntüle
    kodu çok incelemeye vaktim olmadı ama hızlıca bakarken bişey dikkatimi çekti && operatörünü yanlış kullanıyor olabilirmisin.
    & Operatörü her iki operandın değerlerini alır ve her iki operandda doğru olmadığı sürece yalnış sonucunu üretir. Doğru sonucunu vermesi için her iki operandın doğru olması gerekir. Örn: (yalnıs & yalnıs = yalnıs , yalnıs & dogru = yalnıs , dogru & dogru = dogru) gibi
    tabi kodu da net incelemek lazım

    Bu şekilde bir uygulama hocam. Solda işlem var karelere tıklayarak onun cevabını buluyoruz.