Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Алгоритмы
Перезагрузить страницу Волновой алгоритм в игре Лабиринт!
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Flaminger Flaminger вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.05.2013
Exclamation Волновой алгоритм в игре Лабиринт! - 05.05.2013, 03:19

Здравствуйте! Делаю лабиринт со стенка которые закодированы как 0,1,2,3
Числа 0,1,2,3 нужно рассматривать как битовые маски, т.е. рассматривать их двоичное представление. Это числа 00, 01, 10 и 11. Каждый бит здесь указывает на наличие или отсутствие перегородки вправо или вниз. Допустим 01 – есть перегородка вниз, а 10 –есть перегородка вправо. Тогда 11 – есть перегородка и вниз и вправо.
Возникла проблема с волновым алгоритмом, а именно с условиями. Те, что я надумал обозначены в методах, но они не работают.
Помогите, пожалуйста, с реализацей волнового алгоритма в этом случае!
Заранее спасибо!

Вот прога:

bool NeedToGoUp(int i,int j)
{
if ((i != 0) && (laber[i - 1, j] == 1) && (po[i - 1, j] == -1) || (i != 0) && (laber[i, j] == 3) && (po[i - 1, j] == -1))
{
return true;
}
return false;
}
bool NeedToGoLeft(int i, int j)
{
if ((j != 0) && (laber[i, j - 1] == 2) && (po[i, j - 1] == -1) || (laber[i, j] == 3)&&(j != 0)&& (po[i, j - 1] == -1))
{
return true;
}
return false;
}
bool NeedToGoRight(int i, int j)
{
if (((laber[i, j] == 2) || (laber[i, j] == 0)) && (po[i, j + 1] == -1) && (j != 19))
{
return true;
}
return false;
}
bool NeedToGoDown(int i, int j)
{
if ((laber[i, j] == 1) && (po[i + 1, j] == -1) && (i != n - 1))
{
return true;
}
return false;
}
private void button1_Click(object sender, EventArgs e)
{
laber = new int[n, n];
int i, j;
po = new int[n, n];
Random r = new Random();
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
laber[i, j] = r.Next(0, 4);
po[i, j] = -1;
}
for (i = 0; i < n-1; i++)
laber[i, n - 1] = 1;
for (j = 0; j < n; j++)
laber[n - 1, j] = 2;

List<Point> curfront = new List<Point>();
curfront.Add(new Point { X = 0, Y = 0 });
List<Point> newFront = new List<Point>();
while (curfront.Count >0)
{

int nStep = 0;
po[0, 0] = nStep;
i = 0; j = 0;
foreach (Point p in curfront)
{
i = p.X;
j = p.Y;
if (po[n - 1, n - 1] != -1)
break;
else if(NeedToGoRight(i,j)==true)
{

po[i, j + 1] = nStep + 1;
newFront.Add(new Point { X = i, Y = j+1 });
}
else if (NeedToGoDown(i,j)==true)
{
po[i + 1, j] = nStep + 1;
newFront.Add(new Point { X = i+1, Y = j });
}
else if (NeedToGoUp(i,j)==true)
{
po[i - 1, j] = nStep + 1;
newFront.Add(new Point { X = i-1, Y = j });
}
else if (NeedToGoLeft(i, j) == true)
{
po[i, j - 1] = nStep + 1;
newFront.Add(new Point { X = i, Y = j-1 });
}
else { break; }
nStep++;

}

curfront = newFront;
newFront = new List<Point>();
}
if(po[n-1, n-1] != -1)
pictureBox1.Invalidate();
}
Ответить с цитированием
Ads
Ответ

Метки
волновой алгоритм

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, реализующая лабиринт raendor Prolog 6 05.05.2012 14:35
Лабиринт и бегающия в нём змейка Gantzer Visual Basic 0 21.06.2011 16:09
Лабиринт с сокровищами. Ler Ko Prolog 0 03.02.2011 18:08
3-х мерный лабиринт master173s Prolog 6 20.12.2009 18:50
Лабиринт Smt Prolog 0 25.05.2008 23:56
лабиринт на прологе solusrex Prolog 3 10.01.2007 23:49
Лабиринт в VB 6.0... I'm desperate... KoZa Visual Basic 7 22.05.2006 02:50
Волновой алгоритм в карте местности в виде массива m*n Tangerine Вопросы начинающих программистов 5 14.05.2006 16:19
Лабиринт и змейка SpartakCh Prolog 1 19.12.2005 00:18
Волновой алгоритм, реализация на delphi djonkiller Delphi 11 12.10.2005 17:01
Как найти лабиринт на Prolog ckl Prolog 3 28.11.2004 00:53
Написать программу Лабиринт на С++ Anonymous Вопросы начинающих программистов 2 09.11.2004 23:21



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов