Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
2 / 2 / 1
Регистрация: 26.09.2014
Сообщений: 79

Генератор лабиринтов

12.04.2017, 08:30. Показов 9519. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю лабиринт с помощью кнопок. На них выбираю точку начала и точку конца. Относительно этих точек я хочу построить лабиринт. Чтобы сделать все просто и в лоб, я создаю двумерный массив, где 0-это просто путь, а 1-это стена. Стена должна полностью окружать лабиринт и иметь всего два выхода(взятых в начале). Помогите реализовать генератор лабиринтов(точнее этих 0 и 1), чтобы они всегда были разными, имели выход и не было замкнутых тунелей(небольших коридоров, где нет входа и выхода)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2017, 08:30
Ответы с готовыми решениями:

Алгоритм генератора лабиринтов
Помогите пожалуйста. Нужен генератор лабиринта в двухмерном массиве(у меня это 15x15) с толстыми стенами и стенами по кругу. В конечном...

Генерация лабиринтов в двухмерном массиве
Нужно реализовать рандомный генератор лабиринтов в своей игре. Есть двухмерный (как стати правильно - двумерный или двухмерный?) массив,...

генератор лабиринтов
помогите пожалуйста сделать выход в генераторе лабиринтов,дабы логически его закончить...

8
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2017, 09:12
Цитата Сообщение от Tatarinov35 Посмотреть сообщение
Помогите реализовать генератор лабиринтов(точнее этих 0 и 1), чтобы они всегда были разными, имели выход и не было замкнутых тунелей(небольших коридоров, где нет входа и выхода)
Выбирайте любой: http://www.jamisbuck.org/mazes/
Их там мнооого
3
2 / 2 / 1
Регистрация: 26.09.2014
Сообщений: 79
12.04.2017, 13:58  [ТС]
Storm23, спасибо за сайт, но там нет даже элементарного примера кода
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.04.2017, 14:14
Цитата Сообщение от Tatarinov35 Посмотреть сообщение
там нет даже элементарного примера кода
Название каждого алгоритма — ссылка.
1
2 / 2 / 1
Регистрация: 26.09.2014
Сообщений: 79
12.04.2017, 14:51  [ТС]
kolorotur, они все написаны на Ruby..
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.04.2017, 15:47
Tatarinov35, там в деталях описаны алгоритмы, реализовать их на шарпе — тривиальная задача.
0
2 / 2 / 1
Регистрация: 26.09.2014
Сообщений: 79
12.04.2017, 16:14  [ТС]
Не могу понять , почему не запускается..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Maze.Logic
{
    [Flags]
    public enum Directions
    {
        N = 1,
        S = 2,
        E = 4,
        W = 8
    }
 
    public class Grid
    {
        private const int _rowDimension = 0;
        private const int _columnDimension = 1;
 
        public int MinSize { get; private set; }
        public int MaxSize { get; private set; }
        public int[,] Cells { get; private set; }
 
        public Grid() : this(3, 3)
        {
 
        }
 
        public Grid(int rows, int columns)
        {
            MinSize = 3;
            MaxSize = 10;
            Cells = Initialise(rows, columns);
        }
 
        public int[,] Initialise(int rows, int columns)
        {
            if (rows < MinSize)
                rows = MinSize;
 
            if (columns < MinSize)
                columns = MinSize;
 
            if (rows > MaxSize)
                rows = MaxSize;
 
            if (columns > MaxSize)
                columns = MaxSize;
 
            var cells = new int[rows, columns];
 
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    cells[i, j] = 0;
                }               
            }
 
            return cells;
        }
 
        private Dictionary<Directions, int> DirectionX = new Dictionary<Directions, int>
        {
            { Directions.N, 0 },
            { Directions.S, 0 },
            { Directions.E, 1 },
            { Directions.W, -1 }
        };
 
        private Dictionary<Directions, int> DirectionY = new Dictionary<Directions, int>
        {
            { Directions.N, -1 },
            { Directions.S, 1 },
            { Directions.E, 0 },
            { Directions.W, 0 }
        };
 
        private Dictionary<Directions, Directions> Opposite = new Dictionary<Directions, Directions>
        {
            { Directions.N, Directions.S },
            { Directions.S, Directions.N },
            { Directions.E, Directions.W },
            { Directions.W, Directions.E }
        };
 
        public int[,] Generate()
        {
            var cells = Cells;
            CarvePassagesFrom(0, 0, ref cells);
            return cells;
        }
 
        public void CarvePassagesFrom(int currentX, int currentY, ref int[,] grid)
        {
            var directions = new List<Directions>
            {
                Directions.N,
                Directions.S,
                Directions.E,
                Directions.W
            }
            .OrderBy(x => Guid.NewGuid());
 
            foreach (var direction in directions)
            {
                var nextX = currentX + DirectionX[direction];
                var nextY = currentY + DirectionY[direction];
 
                if (IsOutOfBounds(nextX, nextY, grid))
                    continue;
 
                if (grid[nextY, nextX] != 0) // has been visited
                    continue;
 
                grid[currentY, currentX] |= (int)direction;
                grid[nextY, nextX] |= (int)Opposite[direction];
 
                CarvePassagesFrom(nextX, nextY, ref grid);
            }
        }
 
        private bool IsOutOfBounds(int x, int y, int[,] grid)
        {
            if (x < 0 || x > grid.GetLength(_rowDimension) - 1)
                return true;
 
            if (y < 0 || y > grid.GetLength(_columnDimension) - 1)
                return true;
 
            return false;
        }
 
        public void Print(int[,] grid)
        {
            var rows = grid.GetLength(_rowDimension);
            var columns = grid.GetLength(_columnDimension);
            
            // Top line
            Console.Write(" ");
            for (int i = 0; i < columns; i++)
                Console.Write(" _");
            Console.WriteLine();
 
            for (int y = 0; y < rows; y++)
            {
                Console.Write(" |");
 
                for (int x = 0; x < columns; x++)
                {
                    var directions = (Directions)grid[y, x];
 
                    var s = directions.HasFlag(Directions.S) ? " " : "_";
 
                    Console.Write(s);
 
                    s = directions.HasFlag(Directions.E) ? " " : "|";
 
                    Console.Write(s);                   
                }
 
                Console.WriteLine();
            }
        }
    }
}
0
12.04.2017, 18:43

Не по теме:

Tatarinov35, у меня всё запускается...

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 |_  |_ _     _ _|   |  _ _    | |  _ _  |
 | |_ _  | |_  |  _|_ _ _|  _| | |_   _| |
 |_    | |_  | | |   |  _ _|_ _ _|  _|  _|
 |  _| | |_ _|_   _|_|  _ _ _   _ _| |_  |
 | |_ _|_ _ _  | |   |_  |   |_ _ _ _|   |
 |  _ _  |  _ _|_| | |  _| |_  |  _ _ _| |
 | |  _ _|_ _  |  _| |_|  _| | | |_ _  | |
 | |_  |  _ _ _|   |_ _ _|   | |_ _  | | |
 |_  |_ _|_   _ _|_  | |  _|_ _ _  | | | |
 |  _|  _  |_ _  | | |_ _|  _ _  |_ _|  _|
 |_  | | |_ _  | | |_ _ _ _ _ _| |_ _  | |
 | |_ _| |  _ _|  _|  _  |  _  |_ _  |_  |
 |  _ _  | |_ _ _|  _| |_ _| |_ _  | |_ _|
 | |_  | |_ _ _ _ _| |    _ _  | | |_ _  |
 |_  | |   |  _ _   _| |_ _  | | |_  |   |
 |  _ _| | |_  |  _|  _|  _ _|  _ _| | |_|
 | |    _|_ _ _|_|  _| |_ _  |_|  _ _|_  |
 | | | |   |  _ _ _|   |   |_  | | |    _|
 | | |_| | |_ _  |  _|_ _| |  _| |_ _|_  |
 |_|_ _ _|_ _ _ _ _|_ _ _ _|_ _ _ _ _ _ _|

0
2 / 2 / 1
Регистрация: 26.09.2014
Сообщений: 79
13.04.2017, 00:21  [ТС]
EveKS, вы через консоль C# запускали? У меня на main ругается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2017, 00:21
Помогаю со студенческими работами здесь

Создание лабиринтов
Мне нужно написать программу, которая создает алгоритм размером N*N которые я выбираю сам (предположительно около 40). В лабиринте не...

Генерация лабиринтов по ключу
Добрый день! Появилась такая задача - есть квадратное поле с фиксированной размерностью NxN. Как создать лабиринт я примерно понимаю, но...

Qt - creator. Строитель лабиринтов c++
Привет всем. Помогите пожалуйста с заданием, нужно написать код на языке c++. Идея заключается в следующем: Игра строитель лабиринтов. ...

Как написать программу по созданию лабиринтов
Здраствуйте уважаемые форумчани! Помогите пожалайсту с такой бедой: нужно написать програму в Microsoft Visual Studio 2010 на языке C#...

Работа в прологе с лабиринтов, выводит ошибку
Напишите программу решения задачи о поиске кратчайшего пути вы- хода из лабиринта помогите исправить ошибку, вроде все лекциям делала,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru