У меня есть программа обучалка для детей. Суть такова: генерируется случайный пример из чисел a и b и генерируется случайный знак. Все работает отлично, только вот не могу сделать счетчик правильных ответов(переменная prav). Скрипт присвоил кнопкам(otvet1,otvet2,otvet3) и примеру(zadacha), но у меня получается какая то ерунда. ПРОШОУ ПОМОГИТЕ УЖЕ ГОЛОВА ГОРИТ 2 ДЕНЬ СИЖУ НЕ ВЫХОДИТ
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class GameControl : MonoBehaviour
{
public int a, znak, b, c, count, otvet, randomtext, tochnosykablyat;
static int prav=0;
public Text otvet1;
public Text otvet2;
public Text otvet3;
public Text zadacha;
public Text Count;
void Start()
{
Yravnenie();
}
void Yravnenie()
{
count++;
//if(count<21)
//{ Application.Quit(); Count.text = count+"/20"; }
a = Random.Range(1, 21);
b = Random.RandomRange(1, 21);
znak = Random.RandomRange(1, 3);
if (znak == 1)
{
zadacha.text = a + " + " + b + " = ?";
otvet = a + b;
}
if (znak == 2 && a >= b)
{
zadacha.text = a + " - " + b + " = ?";
otvet = a - b;
}
if (znak == 2 && a < b)
{
zadacha.text = a + " + " + b + " = ?";
otvet = a + b;
}
randomtext = Random.RandomRange(1, 4);
tochnosykablyat = randomtext;
if (randomtext == 1)
otvet1.text = otvet.ToString();
if (randomtext == 2)
otvet2.text = otvet.ToString();
if (randomtext == 3)
otvet3.text = otvet.ToString();
a = Random.Range(2, 16);
if (a == otvet)
a--;
if (randomtext == 1)
otvet3.text = a.ToString();
if (randomtext == 2)
otvet1.text = a.ToString();
if (randomtext == 3)
otvet2.text = a.ToString();
b = Random.RandomRange(17, 31);
if (b == otvet)
b--;
if (randomtext == 1)
otvet2.text = b.ToString();
if (randomtext == 2)
otvet3.text = b.ToString();
if (randomtext == 3)
otvet1.text = b.ToString();
}
void OnMouseUpAsButton()
{
if (gameObject.name == "otvet1" && tochnosykablyat == 1)
{
prav = prav + 1;
Yravnenie();
}
if (gameObject.name == "otvet2" && tochnosykablyat == 2)
{
prav = prav + 1;
Yravnenie();
}
if (gameObject.name == "otvet3" && tochnosykablyat == 3)
{
prav = prav + 1;
Yravnenie();
}
Count.text = prav.ToString();
}
}
Если я правильно все понял, то у Вас три кнопки. И три экземпляра класса "GameControl". При этом переменная с модификатором static только одна - счетчик побед. Проблема в том, что переменная "tochnosykablyat" в каждом экземпляре своя. А это значит, что после визуального обновления информации в кнопках в других кнопках значение правильного ответа осталось прежним.
Попробуйте "tochnosykablyat" также сделать статичной переменной
public static int tochnosykablyat;
Оффтопное послесловие. Пожалуйста, старайтесь избегать такого странного именования переменных как "tochnosykablyat"...
Создай пустой обьект на сцене и повесь этот скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample : MonoBehaviour {
private int _a, _b;
private string _text;
private Znak CurrZnak;
public int UserWinCounter;
public int PCWinCounter;
public int ExpectedRezult = 0;
public int[] Otvets = new int[3];
// Use this for initialization
void Awake () {
NewEquation();
}
public void NewEquation()
{
_a = Random.Range(7, 31);
_b = Random.Range(4, _a);
CurrZnak = (Znak) Random.Range(0, 2);
switch (CurrZnak)
{
case (Znak.Plus):
_text = _a + " + " + _b + " = ?";
ExpectedRezult = _a + _b;
break;
case (Znak.Minus):
_text = _a + " - " + _b + " = ?";
ExpectedRezult = _a - _b;
break;
}
Otvets[0] = ExpectedRezult;
Otvets[1] = ExpectedRezult + Random.Range(1, 3);
Otvets[2] = ExpectedRezult - Random.Range(1, 3);
Shuffle(Otvets);
}
public enum Znak
{
Plus = 0,
Minus = 1
}
private void Shuffle<T>(T[] array)
{
int n = array.Length;
while (n > 1)
{
n--;
int k = Random.Range(0, n + 1);
T value = array[k];
array[k] = array[n];
array[n] = value;
}
}
void OnGUI()
{
GUI.Label(new Rect(10, 10, 100, 20), _text);
if (GUI.Button(new Rect(10, 50, 50, 50), Otvets[0].ToString()))
CheckWinnerWithNumber(Otvets[0]);
if (GUI.Button(new Rect(70, 50, 50, 50), Otvets[1].ToString()))
CheckWinnerWithNumber(Otvets[1]);
if (GUI.Button(new Rect(130, 50, 50, 50), Otvets[2].ToString()))
CheckWinnerWithNumber(Otvets[2]);
GUI.Label(new Rect(10, 100, 400, 20), "PC Win:" + PCWinCounter + "; User Win: " + UserWinCounter);
}
private void CheckWinnerWithNumber(int otvet)
{
if (otvet == ExpectedRezult)
{
UserWinCounter++;
NewEquation();
}
else
{
PCWinCounter++;
NewEquation();
}
}
}
Не забудь отметить самый полезный из ответов как верный.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите, а в чем мотивация того, что этот метод работает только с List<T>? Ведь IEnumerable тоже имеет все необходимое
Всем привет, у меня возникла проблема с настройкой звукаДобавил в настройки Slider который регулирует громкость звука (по крайне мере должен...
конвертация DXF Arc в WPF ArcSegment представлена в следующем коде,
Роюсь , роюсь у https://githubcom/xceedsoftware/DocX и http://cathalscorner