Обходчик лабиринита

Тема в разделе ".NET", создана пользователем Hombre, 28 мар 2005.

Статус темы:
Закрыта.
  1. Hombre

    Hombre Гость

    Если кто занимался такой штукой,то подскажите плз алгоритм обходчика лабиринита. Если можно, то с каким-нить примером(С#);
    Препятствия можно делать самому.
     
  2. SoftSoft

    SoftSoft Гость

    Стандартный алгоритм обхода лабиринта выглядит так:
    - Итди всё время, направо.
    этот алгоритм действует, только, если ты начинаешь путь от любой внешней стенки.
    Если путь начинать из центра, то надо разбить игровое поле на клетки, и метить те, в которых
    мы уже побывали.

    Пример лениво приводить, сам подумай как это можно сделать :D
     
  3. Dico

    Dico Гость

    Вот на С++ полный алгоритм генерации лабиринта и его обхода!!!!!!


    Код (Text):
    #include <stdio.h>

    #include <conio.h>

    #include <stdlib.h>

    const int size = 20;

    const int fullfill = 100; // in %

    const int wallshort= 50; // in %

    char m[size+1][size+1];

    // Random generator

    int r[2][size/2*size/2];

    int h; // How many number in array;

    void initrandom ()

    {

    int j=0;

    for (int y=2; y<size; y+=2)

    for (int x=2; x< size; x+=2)

      {

      r[0][j] = x; r[1][j] = y; j++;

      }

    h=j-1;

    }

    int getrandom(int &x, int &y)

    {

    int i = random (h);

    x = r[0][i]; y = r[1][i];

    r[0][i] = r[0][h]; r[1][i] = r[1][h];

    return h--;

    }

    // View labirint on screen

    void view()

    {

    for (int y=0; y<=size; y++)

    for (int x=0; x<=size; x++)

     {

     gotoxy (x*2+1,y+1);

     if (m[y][x]==0) cprintf ("..");

     if (m[y][x]==1) cprintf ("__");

    }

    }
    int main(void)

    {

    printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\");
    printf ("Labirint generator");

    // Clear labirint

    for (int c = 0; c < size*size; c++) ((char *)m)[c] = 0;

    // Make border

    for (int i = 0; i <= size; i++)

      {

       m[0][i] = 1; m[size][i] = 1;

       m[i][0] = 1; m[i][size] = 1;

      }

    view ();

    initrandom();

    int startx, starty;

    while (getrandom (startx, starty))

    {

     if (m[starty][startx]==1) continue;

     if (random (100) > fullfill) continue;

     int sx=0,sy=0;

     do

     {

      sx=random (3)-1;

      sy=random (3)-1;

     } while (sx==0 && sy==0 || sx!=0 && sy!=0); //sx==0 and sy==0

     while (m[starty][startx]==0)

     {

     if (random (100) > wallshort)

       {m[starty][startx] = 1; break;}

     m[starty][startx] = 1;

     startx +=sx; starty+=sy;

     m[starty][startx] = 1;

     startx +=sx; starty+=sy;

     }

    }

    view();

    return 0;

    }

    -- ????:
    Dico - есть замечательный тег CODE
     
Статус темы:
Закрыта.

Поделиться этой страницей