Среда, 27 Ноября 2024, 07:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выпадение случайного 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, вполне возможно, но мне было проще сделать так.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг