Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Игра Кролевский квадрат


Автор: Abbath1349 11.6.2011, 19:00
Пишу игру королевский квадрат.Имеется двумерный массив лейблов 3*3. Подскажите с алгоритмом как лучше сделать. Нужен алгоритм,чтоб при клике на ячейке квадрата(Label) он определял можно ли записать в неё букву(Если рядом есть квадрат с буквой то можно если нету то нельзя). 
Пробовал через циклы,но тут он до ума не доведен да и мне кажется не лучший это способ. 
Код

 private void Label_click(object sender, EventArgs e)
        {
            int imin,imax,jmin,jmax;
            
            Label lclick = (Label)sender;
            Point n =(Point)lclick.Tag;
            int x = n.X;
            int y = n.Y;
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 5; j++)
                    if (Royals[i, j].Text != String.Empty)
                        IsEmpty[i, j] = false;
                    if (!IsEmpty[x, y])
                        textBox5.Text = "Uncorrect";
                    else
                    {
                        if (x > 0) imin = x - 1;
                        else imin = x;
                        if (y > 0) jmin = y - 1;
                        else jmin = y;
                        if (x < 4) imax = x + 1;
                        else imax = x;
                        if (y < 4) jmax = y + 1;
                        else jmax = y;
                        for (int i = imin; i <= imax; i++)
                            for (int j = jmin; j <=jmax; j++)
                                if (!IsEmpty[i, j])
                                {
                                    textBox5.Text = "Correct";
                                 
                                    Royals[i, j].Text = "X";
                                    goto Finish;
                                }
                                else
                                    textBox5.Text = "XX";
                        
                    }
                Finish:
                    textBox5.Text = "XXX";
        }

Автор: -Mikle- 11.6.2011, 19:54
Могу дать совет, что не стоит делать логику игры перемешиваю с ЮИ. В конечном счете может возникнуть не мало проблем. Сделай логику игры в отдельных классах так, чтобы эти классы не знали о существовании интерфейса. Это правильный подход.

По поводу сабжа. Если у тебя известна координата ячейки (например, 1 столбец, 3 строка), то просто проверяй соседние ячейки.

Код

private bool AllowInput(int x, int y)
{
    return
        (x+1 < sizeX && array[x+1, y] не пустой) ||
        (x-1 >= 0 && array[x-1, y] не пустой) ||
        (y+1 < sizeY && array[x, y+1] не пустой) ||
        (y-1 >= 0 && array[x, y-1] не пустой);
}

Автор: Abbath1349 11.6.2011, 20:01
Цитата(-Mikle- @ 11.6.2011,  19:54)
логику игры перемешиваю с ЮИ. В конечном счете может возникнуть не мало проблем. 

а что такое ЮИ?

Автор: Gluttton 11.6.2011, 20:24
Цитата(Abbath1349 @  11.6.2011,  20:01 Найти цитируемый пост)
а что такое ЮИ? 

UI же!

Автор: -Mikle- 11.6.2011, 22:27
User Interface, UI, ЮИ, Пользовательский интерфейс, Скрины и т.д...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)