Выпадение случайного N-ого к-ва объектов
|
|
Sparrow_Dreamer | Дата: Воскресенье, 08 Марта 2015, 18:53 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Здравствуйте! Я в Юнити работаю недавно. Значит, фишка такая. Нужно создать карточную игру. Пока только пытаюсь азы. Возник вопрос: как сделать генерацию определенного числа объектов (в нашем случае карт). Каждая карта обладает своими характеристиками. Думаю, может можно создать энное число переменных, в которых прописать все данные карты? Тогда как сделать рандомное выпадение нужного количества карт? При чем карты раскладываются в определенном месте. Помогите пожалуйста, с меня плюсик в репутацию))
|
|
| |
aFriend | Дата: Воскресенье, 08 Марта 2015, 19:13 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Для характеристик карт можно создать класс-массив, содержащий характеристики карт Добавлено (08 марта 2015, 19:13) --------------------------------------------- А про рандомное выпадение нужного кол-ва карт я не понял
Сообщение отредактировал aFriend - Воскресенье, 08 Марта 2015, 19:12 |
|
| |
Sparrow_Dreamer | Дата: Воскресенье, 08 Марта 2015, 19:25 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Цитата aFriend ( ) А про рандомное выпадение нужного кол-ва карт я не понял Вот смотрите. Есть, допустим колода 36 карт. Это вся колода. А нам нужно, чтобы при нажатии определенной кнопки на экране появилось, скажем, 8 карт, которые случайным образом выберутся из тех 36 карт, что мы имеем. Нажал кнопку-на экране появилось восемь случайных карт. Вот как можно реализовать, чтобы из всех карт выпадало нужное нам количество, при чем случайным образом?
|
|
| |
Xoid | Дата: Воскресенье, 08 Марта 2015, 19:49 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Цитата Sparrow_Dreamer ( ) Нажал кнопку-на экране появилось восемь случайных карт ну так 8 раз берем рандомную карту из массива, что в этом непонятного))
skype:xoid_main | С#/Unity
|
|
| |
aFriend | Дата: Воскресенье, 08 Марта 2015, 19:57 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Создаем обьект, в нем скрипт какой-то, который будет тоже содержать все характеристики карт, после создания этой карты выбираем рандомный элемент массива-класса, берем из него хар-ки и присваиваем карте и так 8 раз, если хочешь, чтоб эти карты не повторялись, то при создании карты с определенным индексом (из класса) обнуляй класс с этим индексом и при новом рандоме проверяй, обнулен ли класс, если обнулен, то ищи новый рандомный класс, пока не появится тот, что нужен Добавлено (08 марта 2015, 19:57) --------------------------------------------- Как-то так
Сообщение отредактировал aFriend - Воскресенье, 08 Марта 2015, 19:57 |
|
| |
Sparrow_Dreamer | Дата: Воскресенье, 08 Марта 2015, 20:05 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| aFriend, И можно, чтобы это было не на С#, а на ЯваСкрипт? Юнити поймет меня?)
|
|
| |
aFriend | Дата: Воскресенье, 08 Марта 2015, 20:08 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Sparrow_Dreamer, можно
|
|
| |
Sparrow_Dreamer | Дата: Воскресенье, 08 Марта 2015, 20:09 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| aFriend, Спасибо))
|
|
| |
harmoxyne | Дата: Воскресенье, 08 Марта 2015, 20:49 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Код using UnityEngine; using System; using System.Collections;
public class cards : MonoBehaviour {
public Card[] Cards = new Card[8]; System.Random TestRandom = new System.Random();
void OnGUI() { for (int i = 0; i < 8; i++) { if(Cards[i] != null) GUI.Box(new Rect(i*25, 10, 25, 25), Cards[i].ID.ToString()); }
if(GUI.Button(new Rect(50, 50, 100, 100), "Generate")) { MakeNull(); for (int i = 0; i < 8; i++) { int temp; do { temp = TestRandom.Next(36); } while (Card.IS_ID[temp] != false); Cards[i] = new Card(temp); Card.IS_ID[temp] = true; } }
}
public void MakeNull() { /* * * Сбрасывает массив для проверки существования ID * */ for (int i = 0; i < 36; i++) { Card.IS_ID[i] = false; } }
public class Card { public static bool[] IS_ID = new bool[36]; // Будем проверять, занято или нет
private int _ID; // Внутренний ID - основной параметр, по нему будем выводить
public int ID { get { return _ID; } // Инкапсуляция }
public Card(int id) { _ID = id; // Конструктор } } }
Не уверен, что самый практичный способ, но, в принципе...
|
|
| |
Sparrow_Dreamer | Дата: Воскресенье, 08 Марта 2015, 20:50 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| QNicolya, Хм... Спасибо за идею, буду разбираться)
|
|
| |
harmoxyne | Дата: Воскресенье, 08 Марта 2015, 21:05 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Sparrow_Dreamer, разбираться там, в принципе, не в чем, пиши если что. И если кто-то предложит вариант получше - буду рад, ибо я ничего лучше не придумал.
Сообщение отредактировал QNicolya - Воскресенье, 08 Марта 2015, 21:06 |
|
| |
aFriend | Дата: Воскресенье, 08 Марта 2015, 21:06 | Сообщение # 12 |
участник
Сейчас нет на сайте
| QNicolya, 1) Думаю, ему ближе JSЦитата Sparrow_Dreamer ( ) Можно, чтобы это было не на С#, а на ЯваСкрипт? 2) Выводить карты при помощи OnGUI(){} - не самый лучший способ, я б посоветовал обьектами, а именно - новую UI систему
Сообщение отредактировал aFriend - Воскресенье, 08 Марта 2015, 21:15 |
|
| |
harmoxyne | Дата: Воскресенье, 08 Марта 2015, 21:11 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| aFriend, вполне возможно, но мне было проще сделать так.
|
|
| |