|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
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, время: 22:39.
|