Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм для Игры королевский квадрат


Автор: Abbath1349 11.6.2011, 16:58
Пишу игру королевский квадрат.Имеется двумерный массив лейблов 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";
        }


Автор: Peter 13.6.2011, 15:10
Да, задание невнятное. Массив как будто 3 на 3, а в программе - 5 на 5. Да и сколько ячеек проверяется? Одна или все?
Если квадрат 3 на 3 и проверяем всего лишь одну ячейку с координатами (x, y), то:
Код
for (int i = 0; i < 3; i++)
  for (int j = 0; j < 3; j++)
    IsEmpty[i][j] = String.IsNullOrEmpty(Royals[i][j].Text);
if(!IsEmpty[x][y])
  textBox5.Text = "Incorrect";
else
{
  bool bCanBeWritten = false;
  if(x > 0 && IsEmpty[x-1][y])
    bCanBeWritten = true;
  if(y > 0 && IsEmpty[x][y-1])
    bCanBeWritten = true;
  if(x < 3 && IsEmpty[x+1][y])
    bCanBeWritten = true;
  if(y < 3 && IsEmpty[x][y+1])
    bCanBeWritten = true;
  // and so on...
}

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