 |
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
24.10.2011, 23:59
|
#1
|
AnyKey`щик
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Листинг и сравнение, нужна помощь
Всем привет.
На днях решил сделать простенькую игрушку (так по началу я подумал) в стиле открывай одинаковые цифры, но тут столкнулся с некоторыми проблемами.
Как запомнить две последние цифры, которые выбрал, и потом сравнить их по имени.
Например: если имя в обоих одинаковое - платформы с этими цифрами не закрываются.
Помогите пожалуйста.
|
(Offline)
|
|
25.10.2011, 00:08
|
#2
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Мне кажется ты неправильно подходишь к задаче. Переменные надо сравнивать не по именам, а по значениям.
Есть коллекция платформ, каждая платформа имеет свою переменную, которая уникальна. А вот уже их значения (этих переменных) и есть цифры платформ, которые надо сравнивать. А тут все просто: if(a=b)then (псевдокод =)).
Для того, чтобы сохранить нажатые платформы заведи еще одну уникальную игровую переменную и туда записывай, например номер платформы. Или ее значение. Это уже от кода зависит.
Или я чего-то недопонял?
|
(Offline)
|
|
25.10.2011, 01:37
|
#3
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Как то так навскидку.
public class Example
{
List<string> buttonObject = 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(ray, out hit, 100))
{
if (hit.collider.tag == "Button")
ButtonToList(hit.transform.gameObject.name)
}
if(buttonObject.Count>=2)
{
for(int i=0;i< buttonObject.Count;i++)
{
if(objectName==null) objectName=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
|
Unity/C# кодер
Регистрация: 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 = 0; i < 8; i++) { _buttons.Add(new Button { contents = i.ToString() }); }
for (int i = 0; i < 8; i++) { _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 = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { int index = i*4 + j;
var rect = new Rect(10 + i*60, 10 + j*60, 50, 50);
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 = 0; i < 8; i++) { _buttons.Add(new Button { contents = i.ToString() }); }
for (int i = 0; i < 8; i++) { _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 = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { int index = i*4 + j;
var rect = new Rect(10 + i*60, 10 + j*60, 50, 50);
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; } }
} }
} }
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
25.10.2011, 20:52
|
#5
|
AnyKey`щик
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Может кто-то добавить описание....??
Мне важно понять, а не копипастить.
|
(Offline)
|
|
25.10.2011, 21:06
|
#6
|
Дэвелопер
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений (для 1,985 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D
Сообщение от Racot
Может кто-то добавить описание....??
Мне важно понять, а не копипастить.
|
Скопируй код, вставь, представь что ты интерпретатор и пройдись по строкам кода. Неизвестные команды подсмотреть в мануале.
Потом все переписать с нуля. Готово
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.10.2011, 21:12
|
#7
|
Unity/C# кодер
Регистрация: 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 = 0; i < 8; i++)
{
_buttons.Add(new Button { contents = i.ToString() });
}
for (int i = 0; i < 8; i++)
{
_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 = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
// индекс кнопки в списке
int index = i*4 + j;
// положение кнопки
var rect = new Rect(10 + i*60, 10 + j*60, 50, 50);
// отрисовка кнопки и обработка нажатия
// если кнопка закрыта - рисуем знак вопроса
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;
}
}
}
}
}
}
|
(Offline)
|
|
26.10.2011, 00:29
|
#8
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Сообщение от Reks888
Ололо
В разделе Blitz3d послали бы в гугл как минимум на две страницы.
Буду теперь всем новичкам рекомендовать Unity :D
|
Тут главное так сформулировать вопрос, чтобы осталось только добавить титры к ответу. 
|
(Offline)
|
|
26.10.2011, 19:08
|
#9
|
AnyKey`щик
Регистрация: 28.07.2011
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Листинг и сравнение, нужна помощь
Всем очень признательный. Спасибо за ответы. Особо Pax и Lestar.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:41.
|