Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием