forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Листинг и сравнение, нужна помощь (http://forum.boolean.name/showthread.php?t=15706)

Racot 24.10.2011 23:59

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

FireOwl 25.10.2011 00:08

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

Или я чего-то недопонял?

Lestar 25.10.2011 01:37

Ответ: Листинг и сравнение, нужна помощь
 
Как то так навскидку.

PHP код:

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;
   }



pax 25.10.2011 02:15

Ответ: Листинг и сравнение, нужна помощь
 
Вот
PHP код:

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: Вариант с закрытием только последних кнопок
PHP код:

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;
                    }
                }

            }
        }

    }



Racot 25.10.2011 20:52

Ответ: Листинг и сравнение, нужна помощь
 
Может кто-то добавить описание....??
Мне важно понять, а не копипастить.

Reks888 25.10.2011 21:06

Ответ: Листинг и сравнение, нужна помощь
 
Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D
Цитата:

Сообщение от Racot (Сообщение 206947)
Может кто-то добавить описание....??
Мне важно понять, а не копипастить.

Скопируй код, вставь, представь что ты интерпретатор и пройдись по строкам кода. Неизвестные команды подсмотреть в мануале.
Потом все переписать с нуля. Готово

pax 25.10.2011 21:12

Ответ: Листинг и сравнение, нужна помощь
 
Прокомментировал первый вариант

PHP код:

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;
                    }
                }

            }
        }

    }



FireOwl 26.10.2011 00:29

Ответ: Листинг и сравнение, нужна помощь
 
Цитата:

Сообщение от Reks888 (Сообщение 206948)
Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D

Тут главное так сформулировать вопрос, чтобы осталось только добавить титры к ответу. :-)

Racot 26.10.2011 19:08

Ответ: Листинг и сравнение, нужна помощь
 
Всем очень признательный. Спасибо за ответы. Особо Pax и Lestar.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot