Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2024, 17:55   #1
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 987
По умолчанию Лабиринт и МЫ

Лабиринт и МЫ

Игра в лабиринт QB64 автоматизирована мной и сама играет
несколько вариантов: ходы по списку MazeCode
или ходы случайные MazeStep или ходы оптимальные MazeLab
и вдобавок MazeRnd синтезирует случайные лабиринты


MAZErnd.bas = случайные
MAZElab.bas = правильно
MAZEkino.bas = смена
MAZEcode.bas = коды
MAZEstep.bas = ходы

Новейшая программа MazeLab решает лабиринты
задавая следующий ход зависящий от хода предыдущего
и от вида препятствия пещеры: стена или угол

Если препятствие без угла тогда выбор направления случайный
перпендикулярно и начальное направление случайное
и из тупика выходит обратно плюс есть время и контроль





Кодировка направления дальновидная 0 > / 1 < / 2 V / 3 ^
для выбора случайного направления вида 2 + Int(Rnd * 2)
показывает вероятность выигрыша 2 в степени свободных ходов
и вероятность 1/64 реально трудная

Причём случайные ходы могли создать ходов шифр не подряд

Создан внутренний массив и каждое перемещение до стены
проверяют 4 * 4 = 16 условий и встроена мини карта массива
плюс возможно настроить ходы назад если стена

Программировал буквально 1 день введя контрольные точки

Начальный лабиринт 7-й уменьшается до 1-го и далее 10-й

Ранние версии программы добавлю в тему позже
где давно у меня шар оставляет следы на поле

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

Весело смотреть как программа заходит не в ту дверь
сразу или на крайних очевидных ходах
и лабиринты из книг ещё не проверял

На другие языки проще перевести мой алгоритм массива с мини картой

В принципе реально проверять массив
если проходили угол 3-жды значит тупик стартовать заново

Версия MazeRnd синтезирует случайный лабиринт каждый раз
и в принципе легко настроить повторение лабиринта несколько раз
если вместо обнуления массивов добавлять в конец и не учитывать

Версия для Эксцель Excel программируется легко наверняка

Принципы похожи на XONIX



Все анимации малые и ещё на форуме есть другие темы про лабиринты
задав поиск включая темы: лабиринт

Важные фрагменты кода расшифрую позже в теме
Вложения
Тип файла: zip MAZErndBAS.zip (29.8 Кб, 6 просмотров)
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 24.09.2024 в 17:59.
сфинкс вне форума Ответить с цитированием
Старый 25.09.2024, 12:56   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,339
По умолчанию

Нормально.
Но есть волновой алгоритм и ...
Предлагаю посмотреть тут:
https://yandex.ru/video/preview/5728115302771088443
и далее:
https://yandex.ru/video/preview/6426241303817973253
Там есть и продолжение.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 30.09.2024, 10:52   #3
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 987
По умолчанию

Автоматизация лабиринта MazeRND

Реально шарик летает безцельно
и звезда пересекается случайно

Автор программы зашифровал лабиринт в строку
Код:
'x is wall & b is ball & y is star
If puzzle=11 Then
    puz$="": grid=8
    puz$=puz$+"xxxxxxxx"
    puz$=puz$+"x   xb x"
    puz$=puz$+"x   yx x"
    puz$=puz$+"x  xx  x"
    puz$=puz$+"x      x"
    puz$=puz$+"x      x"
    puz$=puz$+"x      x"
    puz$=puz$+"xxxxxxxx"
End If
Стартуем переменные и строим стенки пустого лабирита
где delta - направление движения 0 > / 1 < / 2 V / 3 ^
Код:
Dim d(22, 22), m(22, 22): m$="": all=0: Randomize Timer
delta=Int(Rnd*4): puz$="": grid=Int(Rnd*7)+8: f=grid 

For a=1 To f: m(1, a)=1: m(f, a)=1: Next
For a=2 To f-1: m(a, 1)=1: m(a, f)=1:
    For b=2 To f-1: m(a,b)=0
Next: Next
Заполняем 20% стен и ставится звезда и шарик
и суммируется строка puz$
Код:
For i=1 To .2*f^2 : m(Rnd*f, Rnd*f)=1: Next

m(Rnd*(f-3)+2, Rnd*(f-3)+2)=2 ' y
m(Rnd*(f-3)+2, Rnd*(f-3)+2)=3 ' b

For a=1 To f: For b=1 To f ': Print m(a,b);
    If m(a,b)=1 Then m$=m$+"x"
        If m(a,b)=0 Then m$=m$+" "
        If m(a,b)=2 Then m$=m$+"y"
        If m(a,b)=3 Then m$=m$+"b"
Next: Next: puz$=m$
Продолжение следует с целью переделать на другие языки
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 10.10.2024, 19:25   #4
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 987
По умолчанию

Чтобы дальше разобрать puz$ в малый лабиринт слева
Код:
Locate 5, 1: For ii=1 To grid-0: For jj=1 To grid  
    If Mid$(puz$, (ii-1)*grid+jj, 1)="b" Then yy=ii+1: xx=jj: jj=jj+1: ky=yy: kx=xx
        If Mid$(puz$, (ii-1)*grid+jj, 1)="x" Then d(ii,jj)=1 Else d(ii,jj)=0
Next: Print: Next: 'ky=cY: kx=cX 

Locate 4, 1: For qqq=1 To grid-0: For www=1 To grid
    l$=Mid$(Str$(d(qqq, www)), 2, 1)
    If l$="1" Then Print l$; Else Print " "; 
    Next: Print
Next: Locate 3+cY, cX: Print "@"
Новый путь выбирают 16 условий и здесь 1 пример
Код:
For x=cX+1 To grid+1
'if come to wall... -> | izm x+  cst y
    If pdata$(cY, x)="x" Then
    ballx=ballx+x2                
    ay=cY-1: by=cY+1: kx=x-1 
    If d(ay, kx)=0 Then If d(by, kx)=0 Then delta=2+Int(Rnd*2)
    If d(ay, kx)=1 Then If d(by, kx)=0 Then delta=2 ' V
    If d(ay, kx)=0 Then If d(by, kx)=1 Then delta=3 ' ^
    If d(ay, kx)=1 Then If d(by, kx)=1 Then delta=1 ' <
    _Display: GoTo moved 
    End If
End If
То бишь автоматизация включается когда шарик у стены

На другие языки реально перенести мой малый лабиринт
без оформления графики

Практически игра Змейка в лабиринте

Далее версия про коды ходов и вспомнилась автоматизированная
мной игра 1980-х где персонаж собирает призы избегая врагов
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабиринт ЧАК Помощь студентам 3 28.02.2012 14:08
Лабиринт keng Помощь студентам 9 14.09.2011 06:34
Лабиринт. ValinRam Помощь студентам 1 01.05.2011 08:47
Лабиринт GBTA Общие вопросы C/C++ 2 08.07.2010 12:03