Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 24.10.2011, 23:59   #1
Racot
AnyKey`щик
 
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос Листинг и сравнение, нужна помощь

Всем привет.
На днях решил сделать простенькую игрушку (так по началу я подумал) в стиле открывай одинаковые цифры, но тут столкнулся с некоторыми проблемами.
Как запомнить две последние цифры, которые выбрал, и потом сравнить их по имени.
Например: если имя в обоих одинаковое - платформы с этими цифрами не закрываются.
Помогите пожалуйста.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 00:08   #2
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Мне кажется ты неправильно подходишь к задаче. Переменные надо сравнивать не по именам, а по значениям.
Есть коллекция платформ, каждая платформа имеет свою переменную, которая уникальна. А вот уже их значения (этих переменных) и есть цифры платформ, которые надо сравнивать. А тут все просто: if(a=b)then (псевдокод =)).
Для того, чтобы сохранить нажатые платформы заведи еще одну уникальную игровую переменную и туда записывай, например номер платформы. Или ее значение. Это уже от кода зависит.

Или я чего-то недопонял?
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 01:37   #3
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Как то так навскидку.

public class Example
{
  List<
stringbuttonObject = new List<string>();
  
Ray ray;
  
RaycastHit hit;
  
string objectName=null;

  
void Update()
  {
   if(
Input.GetMouseButton(0))
   {
     
ray=Camera.main.ScreenPointToRay(Input.MousePosition)
     if (
Physics.Raycast(rayout hit100))
      { 
         if (
hit.collider.tag == "Button")   
         
ButtonToList(hit.transform.gameObject.name)
      }
     if(
buttonObject.Count>=2)
     {
       for(
int i=0;ibuttonObject.Count;i++)
        {
         if(
objectName==nullobjectName=buttonObject[i]
         else
           {
             if(
buttonObject[i]==objectName
              {
                
Debug.Log("Profit");
                
ValueToZero()
              }
              else
              {
                 
Debug.Log("Fatal Error");
                 
ValueToZero();
              }
           }
        }
     }
    }
  }
  
void ButtonToList(string _objectName)
    {
     
buttonObject.Add(_objectName);
    }
  
void ValueToZero()
   {
     
objectName=null;
     
buttonObject.Clear;
   }

__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 02:15   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Вот
using System.Collections.Generic;
using UnityEngine;

public class 
Numbers MonoBehaviour
{

    public class 
Button
    
{
        public 
bool opend;
        public 
string contents;
    }

    private List<
Button_buttons = new List<Button>();

    
void Start()
    {
        for (
int i 08i++)
        {
            
_buttons.Add(new Button contents i.ToString() });
        }

        for (
int i 08i++)
        {
            
_buttons.Add(new Button contents = (7-i).ToString() });
        }
    }

    private 
Button _last null;

    private 
bool _win;

    
void OnGUI()
    {
        if (
_win)
        {
            
GUI.Label(new Rect(10,10,100,30), "You Win!" );
            return;
        }

        for (
int i 04i++)
        {
            for (
int j 04j++)
            {
                
int index i*j;

                var 
rect = new Rect(10 i*6010 j*605050);

                if (
GUI.Button(rect_buttons[index].opend _buttons[index].contents "?"))
                {
                    if (
_buttons[index].opend) continue;
                    if(
_last== null)
                    {
                        
_buttons[index].opend true;
                        
_last _buttons[index];
                    }
                    else if (
_last.contents == _buttons[index].contents)
                    {
                        
_last null;
                        
_buttons[index].opend true;

                        
_win true;
                        foreach (var 
button in _buttons)
                        {
                            if(!
button.opend)
                            {
                                
_win false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        foreach (var 
button in _buttons)
                        {
                            
button.opend false;
                        }
                        
_last null;
                    }
                }

            }
        }

    }



UPD: Вариант с закрытием только последних кнопок
using System.Collections.Generic;
using UnityEngine;

public class 
Numbers MonoBehaviour
{

    public class 
Button
    
{
        public 
bool opend;
        public 
string contents;
    }

    private List<
Button_buttons = new List<Button>();

    
void Start()
    {
        for (
int i 08i++)
        {
            
_buttons.Add(new Button contents i.ToString() });
        }

        for (
int i 08i++)
        {
            
_buttons.Add(new Button contents = (7-i).ToString() });
        }
    }

    private 
Button _last null;

    private 
bool _win;

    
void OnGUI()
    {
        if (
_win)
        {
            
GUI.Label(new Rect(10,10,100,30), "You Win!" );
            return;
        }

        for (
int i 04i++)
        {
            for (
int j 04j++)
            {
                
int index i*j;

                var 
rect = new Rect(10 i*6010 j*605050);

                if (
GUI.Button(rect_buttons[index].opend _buttons[index].contents "?"))
                {
                    if (
_buttons[index].opend) continue;
                    if(
_last== null)
                    {
                        
_buttons[index].opend true;
                        
_last _buttons[index];
                    }
                    else if (
_last.contents == _buttons[index].contents)
                    {
                        
_last null;
                        
_buttons[index].opend true;

                        
_win true;
                        foreach (var 
button in _buttons)
                        {
                            if(!
button.opend)
                            {
                                
_win false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        
_last.opend false;
                        
_last null;
                    }
                }

            }
        }

    }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
FireOwl (25.10.2011), L-ee-X (25.10.2011), Lestar (25.10.2011), Reks888 (25.10.2011)
Старый 25.10.2011, 20:52   #5
Racot
AnyKey`щик
 
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Может кто-то добавить описание....??
Мне важно понять, а не копипастить.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 21:06   #6
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D
Сообщение от Racot Посмотреть сообщение
Может кто-то добавить описание....??
Мне важно понять, а не копипастить.
Скопируй код, вставь, представь что ты интерпретатор и пройдись по строкам кода. Неизвестные команды подсмотреть в мануале.
Потом все переписать с нуля. Готово
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FireOwl (26.10.2011)
Старый 25.10.2011, 21:12   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Прокомментировал первый вариант

using System.Collections.Generic;
using UnityEngine;

public class 
Numbers MonoBehaviour
{
    
// класс кнопки, содержит информацию о том, 
    // открыта ли кнопка и что в ней спрятано 
    
public class Button
    
{
        public 
bool opend;
        public 
string contents;
    }
    
    
// Список кнопок
    
private List<Button_buttons = new List<Button>();

    
// Инициализация
    
void Start()
    {
        
// генерируем кнопки (16 штук, 8 пар с числами 0-7)
        
for (int i 08i++)
        {
            
_buttons.Add(new Button contents i.ToString() });
        }

        for (
int i 08i++)
        {
            
_buttons.Add(new Button contents = (7-i).ToString() });
        }
    }

    
// последняя нажатая кнопка
    
private Button _last null;

    
// выиграл ли игрок
    
private bool _win;

    
// функция отрисовки кнопок и логика
    
void OnGUI()
    {
        
// если выиграли, то рисуем текст "You Win!"
        
if (_win)
        {
            
GUI.Label(new Rect(10,10,100,30), "You Win!" );
            return;
        }

        
// рисуем кнопки 4 х 4
        
for (int i 04i++)
        {
            for (
int j 04j++)
            {
                
// индекс кнопки в списке
                
int index i*j;

                
// положение кнопки
                
var rect = new Rect(10 i*6010 j*605050);

                
// отрисовка кнопки и обработка нажатия
                // если кнопка закрыта - рисуем знак вопроса
                
if (GUI.Button(rect_buttons[index].opend _buttons[index].contents "?"))
                {
                    
// если нажата открытая кнопка - игнорируем
                    
if (_buttons[index].opend) continue;

                    
// если до этого не была открыта первая кнопка в паре
                    
if(_last== null)
                    {
                        
// открываем кнопку
                        
_buttons[index].opend true;
                        
// запоминаем первую кнопку пары
                        
_last _buttons[index];
                    }
                    
// если нажата вторая кнопка в паре и контент кнопок совпадает
                    
else if (_last.contents == _buttons[index].contents)
                    {
                        
// сбрасываем запомненную кнопку для открытия следующей пары
                        
_last null;
                        
// открываем нажатую кнопку
                        
_buttons[index].opend true;

                        
// проверка на победу
                        
_win true;
                        foreach (var 
button in _buttons)
                        {
                            
// если хотя бы одна кнопка закрыта - не победили еще
                            
if(!button.opend)
                            {
                                
_win false;
                                break;
                            }
                        }
                    }
                    
// контент кнопки не совпадает с открытой кнопкой
                    
else
                    {
                        
// закрываем все кнопки
                        
foreach (var button in _buttons)
                        {
                            
button.opend false;
                        }
                        
// сбрасываем первую кнопку пары
                        
_last null;
                    }
                }

            }
        }

    }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 26.10.2011, 00:29   #8
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Сообщение от Reks888 Посмотреть сообщение
Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D
Тут главное так сформулировать вопрос, чтобы осталось только добавить титры к ответу.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 26.10.2011, 19:08   #9
Racot
AnyKey`щик
 
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Листинг и сравнение, нужна помощь

Всем очень признательный. Спасибо за ответы. Особо Pax и Lestar.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:11.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com