1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

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

    Hombre Гость

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

    SoftSoft Гость

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

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

    Dico Гость

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


    Код:
    #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
     
Статус темы:
Закрыта.

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