0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 80

Как реализовать генерацию букв в игре

30.03.2020, 16:25. Показов 6854. Ответов 15

Author24 — интернет-сервис помощи студентам
Делаю игру и пришел в тупик, задача состоит в том что на экране есть 7 облаков и в самом верхнем будет появляться рандомная буква на несколько секунд и в 6 остальных другие буквы, но так чтобы среди этих 6-ти была буква которая соответствует той букве которая в самом верхнем облаке, и при нажатии вариант ответа буквы менялись на другие и давалось 10 очков за правильный ответ, как это реализовать помогите пожалуйста!

На первом скрине показано как есть
На втором скрине как хочу сделать
Миниатюры
Как реализовать генерацию букв в игре   Как реализовать генерацию букв в игре  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2020, 16:25
Ответы с готовыми решениями:

Как правильно реализовать непроходимость и генерацию стен в игре
Я тут накодил вывод массива, рандомную генерацию стен и управление игроком(@) для игрушки. uses crt; const m = 24; n = 48; ...

Как реализовать генерацию события в основном потоке?
Всем здравствуйте! У меня есть некий класс, в котором в отдельном потоке выполняется циклическая операция, после каждой с итераций...

Как реализовать генерацию чисел от 000000 до 999999
Здравствуйте, подскажите пожалуйста, как реализовать генерацию от 000000 до 999999, VB заменяет мне 6 нулей на один и отсчет идет от 0, то...

15
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
30.03.2020, 21:32
Думаю нужно создать массив букв, затем с помощью параметра Random.Range берём случайную букву из массива, ставим её в центр и запоминаем.

Далее с помощью этого же Random.Range вытягиваем случайные буквы из массива и ставим их по остальным облакам. И не забываем подкинуть нужную букву.

Только имей виду, что если Random.Range(0, 33); то 33 букву вы никогда не увидите в выборке, последнее число не включено, берите Random.Range(0, 34);
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 80
30.03.2020, 22:25  [ТС]
MrFelix, Согласен, только у меня проблема. Не могу создать правильное условие в котором буквы должны меняться каждые 10 секунд, у меня получается либо они генерируются как сумасшедшие либо если поставить условие, то они вообще отказываются генерироваться
0
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
31.03.2020, 10:57
Можешь мой код использовать, закинь его в Update

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private float waitTame = 10.0f; //Ждём 10 сек
private float waitTimer; 
 
private void Update()
    {         
          Letters();
    }
 
private void Letters()
    {
        waitTimer += Time.deltaTime;
        if (waitTimer < waitTame)
        {
        //через if и какой то boot удаляем текущие буквы
        //Проверяем если буквы удалены, то генерим новые
        waitTimer = 0.0f;//Этот код нужно будет выполнить, когда сгенерится последняя буква, через If или ещё как
                                
        }
    }
Добавлено через 4 минуты
А вообще выложи код, что у тебя получилось, так больше шансов, что тебе помогут да и проще будет понять в чём проблема, а так это всё гадание на кофейной гуще

Добавлено через 2 часа 30 минут
Или с помощью корутины
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 80
31.03.2020, 11:13  [ТС]
MrFelix, Ну-с что то такое получилось, да он теперь останавливает генерацию, но потом не уменьшается для того чтобы сработали следующие условия if.
Так то я уверен что где-то туплю.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public Text texts;
 
    public Text texts1;
    public Text texts2;
    public Text texts3;
    public Text texts4;
    public Text texts5;
    public Text texts6;
    public float timer = 60f;  //Таймер который для UI
    private float hidetimer = 60f; //Таймер который заставляет все работать
 
   char[] rw = {'а','б','в','г','д','е','ё','ж','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'};
    void Start()
    {
      
    }
    void Update()
    {
        timer -= Time.deltaTime;
        hidetimer -= Time.deltaTime;
        Randoming();
    }
    void Randoming()
    { 
      if(hidetimer == 60.0f || hidetimer == 50.0f || hidetimer == 40.0f || hidetimer == 30.0f)
      {
        hidetimer = timer; // тут я пытался приравнять значения чтобы таймер начал работать дальше
        texts.text  = rw[Random.Range(0, rw.Length)].ToString();
        texts1.text = rw[Random.Range(0, rw.Length)].ToString();
        texts2.text = rw[Random.Range(0, rw.Length)].ToString();
        texts3.text = rw[Random.Range(0, rw.Length)].ToString();
        texts4.text = rw[Random.Range(0, rw.Length)].ToString();
        texts5.text = rw[Random.Range(0, rw.Length)].ToString();
        texts6.text = rw[Random.Range(0, rw.Length)].ToString();
      }
      else if(hidetimer != 60.0f || hidetimer != 50.0f || hidetimer != 40.0f || hidetimer != 30.0f) 
/* это условие останавливает таймер но я все не пойму как правильно все оформить*/
      {
        hidetimer += Time.deltaTime;
          Debug.Log("Bruh");
          Debug.Log(hidetimer);
          }  
    }
}
0
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
31.03.2020, 12:35
Сделал тебе код, может более опытные разработчики улучшат, моего опыта хватает только на этот) и он работает.
Кликните здесь для просмотра всего текста

Как реализовать генерацию букв в игре

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class LetterADD : MonoBehaviour
{
    [SerializeField] Text[] text;
    [SerializeField] float waitTime = 0.1f;
    char[] rw = {'а','б','в','г','д','е','ё','ж','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'};    
    private string cutternLettre;
    private bool currentLetterAdd;
    // Start is called before the first frame update
    void Start()
    {        
        LettersDelete();
    }
 
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {               
            StartCoroutine(LettersAdd()); 
        }
 
        if (Input.GetKeyDown(KeyCode.D))
        {
           LettersDelete();
        }
    }
 
    IEnumerator LettersAdd()
    {   
        cutternLettre = rw[Random.Range(0, rw.Length)].ToString();
        text[0].text = cutternLettre;        
        currentLetterAdd = false;
 
        for (int i = 1; i <= 6; i++)
        {   
            int chance = Random.Range(0, 6); //шанс 1 из 5, что следующая буква будет текущая в шапке 
            if (currentLetterAdd == false && chance == 3 || currentLetterAdd == false && i == 6) // если шанс выпал и текущая буква не создана или подошли к концу цикла, то добавляем её
            {
                currentLetterAdd = true;
                text[i].text = cutternLettre;
            }
            else 
            {
                text[i].text = rw[Random.Range(0, rw.Length)].ToString();
            }          
 
            yield return new WaitForSeconds(waitTime);
        }
    }
 
     private void LettersDelete() // чистим игровое поле
    {         
        for (int i = 0; i <= text.Length-1; i++)
        {               
            text[i].text = ""; 
            
        }
    }
}
1
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
31.03.2020, 12:36
Только тут есть момент, что буквы могут дублироваться, в том числе и целевая буква, которая в шапке, нужно как-то пофиксить.
0
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
31.03.2020, 16:05
Лучший ответ Сообщение было отмечено Timka6434 как решение

Решение

Вариантов конечно много, например можно и таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class CloudsGame : MonoBehaviour
{
    public Text mainText;      // текстовое поле самого верхнего облака
    public Text[] answersList; // текстовые поля остальных облак
 
    [Space]
 
    public float updateTimeInSeconds = 5f; // время которое дано на поиск буквы пользотелем
    
    // приватные данные таймера
    private float _currentTime = 0;
    private bool _timerIsEnable = false;
 
    // массив символов, которые будут загадываться.
    private char[] _chars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".ToCharArray();
 
 
    // ИНИЦИАЛИЗАЦИЯ
    private void Start()
    {
        // для каждого текста добавляем компонент кнопки, чтобы ловить клики по нему.
        foreach (var text in answersList)
        {
            Button button = text.gameObject.AddComponent<Button>();
            button.onClick.AddListener(() => onCloudClick(text));
        }
 
        // запускаем игру
        updateTask();
        resetTimer();
        enableTimer();
 
    }
 
    // если таймер включён, то через заданный интервал - задание и время обновляются.
    private void Update()
    {
        if (_timerIsEnable)
        {
            _currentTime -= Time.deltaTime;
            if (_currentTime <= 0)
            {
                resetTimer();
                updateTask();
            }
        }
    }
 
    // включает таймер
    private void enableTimer()
    {
        _timerIsEnable = true;
    }
 
    // сбросить значения таймера в начальные, то-есть он не останавливается, а отсчёт начинается заново
    private void resetTimer()
    {
        _currentTime = updateTimeInSeconds;
    }
 
    // остановить таймер
    private void disableTimer()
    {
        _timerIsEnable = false;
    }
 
 
    // при клике по любому из шести облак:
    private void onCloudClick(Text textUI)
    {
        //  если текст облака совпадает с текстом верхнего облака
        if (textUI.text == mainText.text)
        {
 
            // добавляем очки
            Debug.Log("+10 points!!!");
 
            // сбрасываем таймер и обновляем задание
            resetTimer();
            updateTask();
        }
        else
        {
            Debug.Log("nooo");
        }
    }
 
    // обновление задания
    private void updateTask()
    {
        // копируем массив всех символов и выбираем случайный
        List<char> randChars = new List<char>(_chars);
        int randIndex = Random.Range(0, randChars.Count);
 
 
        // случайный символ назначаем верхнему облаку 
        // и удаляем этот символ из копии массива (чтобы его больше нельзя было выбрать)
        mainText.text = randChars[randIndex].ToString();
        randChars.RemoveAt(randIndex);
 
        // проходим по всем шести облакам и так же назначаем им случайный символ
        // из тех символов, которые остались в копии
        foreach (var textUI in answersList)
        {
            randIndex = Random.Range(0, randChars.Count);
            textUI.text = randChars[randIndex].ToString();
            randChars.RemoveAt(randIndex);
        }
 
        // в самом конце назначаем случайному (из шести) облаку тот символ,
        // который в главном верхнем облаке. Чтобы одно облако содержало правильный ответ.
        int randTextUI = Random.Range(0, answersList.Length);
        answersList[randTextUI].text = mainText.text;
 
    }
 
    // это просто для тестов, можно безболезненно удалить
    private void OnGUI()
    {
        GUILayout.Label($"Игра включена: {_timerIsEnable}");
        GUILayout.Label(_currentTime.ToString("0.00"));
    }
 
}
Как реализовать генерацию букв в игре
0
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
31.03.2020, 16:21
samana Этот вариант, намного лучше чем мой

Интересные для меня моменты:
C#
1
2
3
4
5
6
7
//Преобразования char массива
private char[] _chars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ".ToCharArray();
 
//Перевод в лист и удаление данных из листа
List<char> randChars = new List<char>(_chars);
int randIndex = Random.Range(0, randChars.Count);
randChars.RemoveAt(randIndex);
1
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
31.03.2020, 16:36
Цитата Сообщение от MrFelix Посмотреть сообщение
Этот вариант, намного лучше чем мой
Он не лучше, он просто другой)

Цитата Сообщение от MrFelix Посмотреть сообщение
Интересные для меня моменты:
С этого всё и началось. Когда я увидел
C#
1
char[] rw = {'а','б','в','г','д','е','ё','ж','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'};
то подумал - "эти ребята похоже ещё не знают про .ToCharArray(), надо бы подсказать. Но потом строка за строкой зацепилась и написал весь скрипт..)
1
 Аватар для MrFelix
75 / 53 / 25
Регистрация: 08.03.2020
Сообщений: 243
31.03.2020, 17:03
Цитата Сообщение от samana Посмотреть сообщение
то подумал - "эти ребята похоже ещё не знают про .ToCharArray(), надо бы подсказать. Но потом строка за строкой зацепилась и написал весь скрипт..)
Есть такое
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 80
31.03.2020, 18:57  [ТС]
samana, Капеец я сейчас с такой улыбкой сидел от того, что все работает, спасибо большое за помощь и если не трудно, то расскажите как вы изучали С#. Если это книга, то какой автор?

Добавлено через 2 минуты
MrFelix, Спасибо за помощь)

Добавлено через 15 секунд
MrFelix, Спасибо за помощь)
0
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
31.03.2020, 19:17
Цитата Сообщение от Timka6434 Посмотреть сообщение
если не трудно, то расскажите как вы изучали С#

Не по теме:

Я и до сих пор его изучаю, но очень маленькими шагами.. Вся суть в самых простых основах, да, да эти циклы, ифы, классы, события и тп. По основам есть очень много материла в сети. Сложнее всем этим добром начать правильно пользоваться. Правильно (на сколько это возможно) составлять архитектуру приложения, продумать о том что и чем будет управлять и как всё будет контролироваться, так, чтобы не запутаться самому в созданных связях и происходящем в целом.
Смотрю до сих пор всякие материалы по С#, очень много не понимаю.
Но всё достигается практикой. Сначала делал так, как знал - один большой запутанный код на ифах и циклах. Потом что-то узнал новенькое, например про методы - начал разбивать код на них и тп. Просто пишите, исправляйте, переделывайте с нуля и т.п. Невозможно взять и запросто написать сложную (или даже не очень) программу. Я например не написал ни одной конкретной программы.

1
 Аватар для zalec
76 / 54 / 22
Регистрация: 03.03.2019
Сообщений: 176
31.03.2020, 22:53
У меня тоже делать не чего.
Кликните здесь для просмотра всего текста

надень на камеру
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
 
public class mainSCRIPT : MonoBehaviour
{
    Texture2D ob, tAbc, backgroundError1, backgroundError2, line2, timer;
    Rect rBut, rectLine1, rectLine2, cursorRect;
    GUIStyle gs;
    float line2Size = 0.1f;
    bool loadOK = false;
    string[] descriptAbc = { "абвгде", "ёжзийк", "лмнопр", "стуфхц", "чшщъыь", "эюя   " };
    string stringTest = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    int aSize = 128; // смещение для вывода шрифта
    int gOff = 49; int vOff = 83;
    int gInt = 32; int vInt = 16;
    int points;
    float butW = 0.4f;
    float offsetX, incFromTime, lineInc;
    Vector2 oStartSize, oSize;
    Rect rStart, rEnd, rCurrent, rTimerLine;
    float timeShowBegin = 1;
    public Rect[] rButtons;
    float timeStart, timeTask, timeTaskMax, timeTaskMin, timeTaskDec, timeEnd, timeError, offsetXnl;
    bool drawError = false;
    enum status { begin, showTest, play, nextLevel, end } //start, show,
    status game = status.begin;
 
    enum showTest { begin, show, showEnd, end }
    showTest drawTest = showTest.begin;
 
    public string test, ans;
    public string[] answer;
 
 
    void Start()
    {
        StartCoroutine(textureLoad());
        float oh = (Screen.height - 20) / 4;
        oSize = new Vector2(Screen.width * 0.4f, oh);
        oStartSize = new Vector2(Screen.width * 0.8f, Screen.width * 0.5f);
        answer = new string[6];
        Color color;
        ColorUtility.TryParseHtmlString("#4A44F2FF", out color);
        Camera.main.backgroundColor = color; // #4A44F2
        backgroundError1 = new Texture2D(1, 1, TextureFormat.RGBA32, false, false);
        ColorUtility.TryParseHtmlString("#F2BE22FF", out color);
        backgroundError1.SetPixel(1, 1, color);
        backgroundError1.Apply();
        backgroundError2 = new Texture2D(1, 1, TextureFormat.RGBA32, false, false);
        ColorUtility.TryParseHtmlString("#F20505FF", out color);
        backgroundError2.SetPixel(1, 1, color);
        backgroundError2.Apply();
        line2 = new Texture2D(1, 1, TextureFormat.RGBA32, false, false);
        ColorUtility.TryParseHtmlString("#F2E635FF", out color);
        line2.SetPixel(1, 1, color);
        line2.Apply();
        timer = new Texture2D(1, 1, TextureFormat.RGBA32, false, false);
        ColorUtility.TryParseHtmlString("#3726A6FF", out color);
        timer.SetPixel(1, 1, color);
        timer.Apply();
        timeShowBegin = 1;
        rStart = new Rect(new Vector2((Screen.width - oStartSize.x) / 2, Screen.height), oStartSize);
        rEnd = new Rect(new Vector2((Screen.width - oStartSize.x) / 2, -oStartSize.y / 4), oStartSize);
        float yStart = (rEnd.y + rEnd.height);
        float bh = (Screen.height - (Screen.height * line2Size) - yStart) / 3;
        float bw = Screen.width * butW;
        float x1 = (Screen.width * 0.5f - Screen.width * butW) / 2;
        float x2 = Screen.width * 0.5f + x1;
        rButtons = new Rect[6];
        offsetX = Screen.width;
        for (int i = 0; i < 3; i++)
        {
            rButtons[i * 2] = new Rect(x1, yStart + i * bh, bw, bh);
            rButtons[i * 2 + 1] = new Rect(x2, yStart + i * bh, bw, bh);
        }
        gs = new GUIStyle();
        gs.fontSize = Screen.height / 100 * 3;
 
    }
 
    void Update()
    {
        if (loadOK)
        {
            if (game == status.begin)
            {
                // линии
                lineInc = Screen.height * line2Size;
                rectLine1 = new Rect(0, 0, Screen.width, lineInc);
                rectLine2 = new Rect(0, Screen.height - lineInc, Screen.width, lineInc);
                rTimerLine = new Rect(-Screen.width, lineInc + 1, Screen.width, Screen.height - lineInc * 2);
                points = 0;
                // переменные со временем
                timeTaskMax = 3;
                timeTaskMin = 0.5f;
                timeTaskDec = 0.3f;
                timeTask = timeTaskMax + timeTaskDec;
                offsetX = Screen.width;
                drawTest = showTest.begin;
                game = status.showTest;
            }
            if (game == status.showTest)
            {
                if (drawTest == showTest.begin)
                {
                    test = stringTest.Substring(Random.Range(0, 33), 1);
                    for (int i = 0; i < 6; i++)
                    {
                        answer[i] = stringTest.Substring(Random.Range(0, 33), 1);
                    }
                    answer[Random.Range(0, 6)] = test;
                    rCurrent = rStart;
                    drawTest = showTest.show;
                    offsetX = Screen.width;
                }
                if (drawTest == showTest.show)
                {
                    incFromTime = (rStart.y - rEnd.y) / (timeShowBegin * 30);
                    rCurrent.y -= incFromTime;
                    if (rCurrent.y < rEnd.y)
                    {
                        drawTest = showTest.showEnd;
                        rCurrent.y = rEnd.y;
                    }
                    rBut = rCurrent;
                }
                if (drawTest == showTest.showEnd)
                {
                    offsetX -= incFromTime;
                    if (offsetX < 0)
                    {
                        offsetX = 0;
                        drawTest = showTest.end;
                    }
                    lineInc -= incFromTime / 3;
                    if (lineInc < 0) lineInc = 0;
                }
                if (drawTest == showTest.end)
                {
                    //lineInc -= 1f;
                    lineInc -= incFromTime / 3;
                    if (lineInc < 0)
                    {
                        lineInc = 0;
                        game = status.play;
                        timeTask -= timeTaskDec;
                        if (timeTask < timeTaskMin) timeTask = timeTaskMin;
                        timeStart = Time.time;
                        offsetX = Screen.width;
                    }
                }
            }
            if (game == status.play)
            {
                ans = "*";
                Vector2 mp = Input.mousePosition;
                mp.y = Screen.height - mp.y;
                cursorRect = new Rect(-100, -100, 0, 0);
                for (int i = 0; i < rButtons.Length; i++)
                {
                    if (rButtons[i].Contains(mp))
                    {
                        cursorRect = rButtons[i];
                        if (Input.GetMouseButton(0))
                        {
                            ans = answer[i];
                            if (ans == test)
                            {
                                game = status.nextLevel;
                                points += 10;
                                offsetXnl = Screen.width * 2f;
                                timeEnd = Time.time;
                            }
                            else
                            {
                                game = status.end;
                                timeError = Time.time;
                                timeEnd = Time.time;
                            }
                        }
                    }
                }
                offsetX = Screen.width * getFP(timeStart, timeTask);
                if (offsetX >= Screen.width)
                {
                    game = status.end;
                    timeError = Time.time;
                    timeEnd = Time.time;
                }
            }
        }
    }
    private void OnGUI()
    {
        if (loadOK)
        {
            // показываем задание 
            if (game == status.showTest)
            {
                Rect l1 = rectLine1;
                Rect l2 = rectLine2;
                l1.y -= lineInc;
                l2.y += lineInc;
                GUI.DrawTexture(l1, line2);
                GUI.DrawTexture(l2, line2);
                drawObutton(rBut, test);
                drawButtonsO(offsetX, 0);
            }
            if (game == status.play)
            {
                Rect nr = rTimerLine;
                nr.x += offsetX;
                GUI.DrawTexture(nr, timer);  //==>  здесь будет отображаться наполнение таймера 
                GUI.DrawTexture(rectLine1, line2);
                GUI.DrawTexture(rectLine2, line2);
                drawObutton(rBut, test); // загаданная кнопка
                drawButtonsO(0, 0); // показываем все кнопки
                GUI.Box(cursorRect, "");// показываем куросор
                GUI.TextArea(rectLine2, "points:" + points.ToString(), gs);
            }
            if (game == status.end)
            {
                if (getFP(timeEnd, 3) == 1) game = status.begin; // перезапуск после неправильного ответа
                if (getFP(timeError, 0.4f) == 1)
                {
                    drawError = !drawError;
                    timeError = Time.time;
                }
                if (drawError)
                {
                    GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), backgroundError2);
                }
                else GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), backgroundError1);
 
                GUI.Button(rectLine1, "points:" + points.ToString(), gs);
            }
            if (game == status.nextLevel)
            {
                GUI.DrawTexture(rectLine1, line2);
                GUI.DrawTexture(rectLine2, line2);
                drawObutton(rBut, test);
                float e = getFP(timeEnd, 1.5f);
                drawButtonsO(offsetXnl * e, 0);
                if (e == 1)
                {
                    game = status.showTest;
                    drawTest = showTest.begin;
                }
            }
        }
    }
    IEnumerator textureLoad()
    {
        UnityWebRequest request = UnityWebRequestTexture.GetTexture("https://camo.githubusercontent.com/05f8bb8378c7a698ea871990735f9324b092eb50/68747470733a2f2f706978656c6e6573742e696f2f7475746f7269616c732f32642d67616d652d756e6974792f7061727469636c65732f2d696d672f636c6f75642e706e67");
        yield return request.SendWebRequest();
        if (request.isHttpError || request.isNetworkError)
            print("егор, наверно нет текстуры");
        else
            ob = DownloadHandlerTexture.GetContent(request);
        request = UnityWebRequestTexture.GetTexture("https://st2.depositphotos.com/3737621/6390/v/950/depositphotos_63909371-stock-illustration-hand-written-russian-cyrillic-alphabet.jpg");
        yield return request.SendWebRequest();
        if (request.isHttpError || request.isNetworkError)
            print("егор, наверно нет текстуры");
        else
            tAbc = DownloadHandlerTexture.GetContent(request);
 
        loadOK = true;
    }
 
    void drawButtonsO(float shiftX, float shiftY)
    {
        Rect nRec;
        for (int i = 0; i < 6; i++)
        {
            nRec = rButtons[i];
            nRec.y -= shiftY;
            nRec.x -= shiftX;
            drawObutton(nRec, answer[i]);
        }
    }
 
    void drawObutton(Rect pos, string s)//функция рисуем букву облако
    {
        Vector2 ts = new Vector2(pos.height * 0.3f, pos.height * 0.3f);
        Rect rt = new Rect(pos.x + pos.width / 2 - ts.x * 0.5f, pos.y + pos.height / 2 - ts.y * 0.5f, ts.x, ts.y);
        GUI.DrawTextureWithTexCoords(pos, ob, new Rect(0, 0, 1, 1));
        drawLetter(rt, s);
    }
    void drawLetter(Rect position, string s) //функция рисуем букву
    {
        Vector2 tSize = new Vector2(tAbc.width, tAbc.height);
        for (int iy = 0; iy < descriptAbc.Length; iy++)
            for (int ix = 0; ix < descriptAbc[iy].Length; ix++)
            {
                if (s == descriptAbc[iy].Substring(ix, 1))
                {
                    float u = (gOff + (ix * (aSize + gInt))) / tSize.x;
                    float v = tSize.y - (vOff + ((iy + 1) * (aSize + vInt))) / tSize.y;
                    GUI.DrawTextureWithTexCoords(position, tAbc, new Rect(u, v, 0.125f, 0.125f));
                }
            }
    }
 
    float getFP(float CurrentTimeStar, float fullTime)
    {
        if (Time.time - CurrentTimeStar < fullTime)
        {
            return (Time.time - CurrentTimeStar) / fullTime;
        }
        else return 1;
    }
}
Миниатюры
Как реализовать генерацию букв в игре  
2
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
01.04.2020, 10:33
Цитата Сообщение от zalec Посмотреть сообщение
У меня тоже делать не чего.
Здорово получилось! Интересен тот факт, что сделали полную и независимую игру в одном скрипте, ещё и с анимацией! Это больше похоже на программирование на скорость, как олимпиада какая нибудь.
В коде конечно быстро не разобраться, но я думаю на это особо и не рассчитывалось. Думаю вы просто словили фан! Классно!
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 80
01.04.2020, 11:43  [ТС]
zalec, Пока я еще слабо разбираюсь в C# и этот код для меня что-то из разряда "Вау" и тут довольно много чего, что мне понадобиться в скором времени, благодарю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2020, 11:43
Помогаю со студенческими работами здесь

Как реализовать автоматическую генерацию номеров документов
Есть таблица Number с полем Num, в которое будут записываться автоматически генерируемые номера документов. Как это реализовать? Я решил...

Как реализовать генерацию рандомных чисел в заданном диапазоне?
Я Хочу Сделать Генерацию Рандомный Чисел В Заданном Диапазоне ну например от 100 до 120.Ошибок Компилятор не выдаёт.Но Программа Работает...

Как можно программно реализовать генерацию случайных графов
1) Какие бывают еще случайные графы, кроме графа Эрдеша-Реньи? 2) Как можно программно реализовать генерацию случайных графов?

Как реализовать генерацию псевдослучайных чисел по равномерному и гауссовому распределениям?
Собственно, вопрос в названии. Как реализовать генерацию псевдослучайных чисел по равномерному и гауссовому распределениям? (Диапазон...

Реализовать генерацию звука двухтональной сирены
Здравствуйте, уважаемые участники форума. По глупости, поспорил, что решу самую простую учебную задачку на языке ассемблера, и теперь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru