Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651

Игра лабиринт

27.03.2013, 21:49. Показов 5817. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            //ввод 
            int[,] maze = new int[,]
            {
                {1,1,1,1,0,1,1,1,1,1},
                {1,0,1,1,0,1,0,0,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,1,1,0,1,0,1,0,1},
                {0,0,0,0,0,1,0,1,0,1},
                {1,1,0,1,1,1,0,1,0,1},
                {1,1,0,0,0,0,0,1,0,1},
                {1,1,1,1,1,1,1,1,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,0,1,1,1}
            };
            //координаты игрока
            int x = 1, y = 1;
            while (true)
            {
                //рисуем лабиринт
                Console.Clear();
                for (int i = 0; i < maze.GetLength(0); i++)
                {
                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        if (maze [i, j] == 0) Console.Write(".");
                        if (maze[i, j] == 1) Console.Write("#");
 
                    }
                    Console.WriteLine();
                 }
                Console.CursorLeft = x;
                Console.CursorTop = y;
                Console.ForegroundColor=ConsoleColor.DarkYellow;
                Console.Write("@");
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
                
                // обработка ввода
                ConsoleKeyInfo ki = Console.ReadKey(True);
                if (ki.Key == ConsoleKey.Escape) break;
                if (ki.Key == ConsoleKey.LeftArrow && maze[y, x - 1] == 0) x--;
                if (ki.Key == ConsoleKey.RightArrow && maze[y, x + 1] == 0) x++;
                if (ki.Key == ConsoleKey.UpArrow && maze[y-1, x] == 0) y--;
                if (ki.Key == ConsoleKey.DownArrow && maze[y+1, x] == 0) y++;
            }
            
        }
    }
}
Помогите, нужно сделать так, чтобы после выхода из лабиринта осуществлялся переход на новый уровень, и лабиринт изменялся.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2013, 21:49
Ответы с готовыми решениями:

Игра Лабиринт
Посоветуйте пожалуйста литературу/статьи/уроки для создания игры Лабиринт на языке C#. Желательно на русском языке. Нашёл книгу Максима...

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

Игра "Лабиринт". Отделить логику от интерфейса
Привет всем, извините за возможно глупый вопрос, но что значит отделить логику от интерфейса. Пишу игру лабиринт, компьютер должен найти...

9
20 / 17 / 0
Регистрация: 15.08.2012
Сообщений: 122
27.03.2013, 21:55
Egor.S, С помощью System.IO создайте несколько текстовых документов, где будут хранится значения текущего лабиринта, после этого загружайте данные, те, что в текстовом редакторе в целочисленный двумерный массив и делайте занова перерисовку игрового поля и всё. Ничего трудного, просто фантазия.
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
27.03.2013, 21:58  [ТС]
Мои познания в C# еще не вышли на такой уровень, есть еще какие-нибудь варианты решения этой задачи?
0
20 / 17 / 0
Регистрация: 15.08.2012
Сообщений: 122
27.03.2013, 22:02
Egor.S, создайте переменную int currentLevel = 0; - где будет хранится текущий уровень игры, и в цикле While сразу делайте проверку, если уровень 0 , то загружать вот такой-та двумерный массив, если уровень 1 , то другой и т.п.
При прохождении вашего лабиринта, просто прибавляется текущий уровень на +1 , тоесть currentLevel++;
0
Заблокирован
27.03.2013, 22:59
https://www.cyberforum.ru/post4292997.html
https://www.cyberforum.ru/post4293029.html
C#
1
2
int ChisloHodov = 5; //Число одновременных ходов
            int shansTupika = 5; //Шанс тупика
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
27.03.2013, 23:44  [ТС]
В если существуют шаблоны лабиринтов, и нужно между ними переходить. Написал в конце что-то вроде:
C#
1
2
 maze = maze2;
             goto построение лабиринта;
А каким образом перейти к 3 лабиринту и т.д?
0
Заблокирован
27.03.2013, 23:58
Шаблонов нет, все генерируется. Перейти на новый, запустить снова построение.
0
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
28.03.2013, 00:08  [ТС]
А я хочу сотворить что-то вроде этого:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            //ввод 
            int[,] maze = new int[,]
            {
                {1,1,1,1,1,1,1,1,1,1},
                {1,0,1,1,0,1,0,0,0,1},
                {1,0,0,0,0,0,0,1,0,1},
                {1,1,1,1,0,1,0,1,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,0,1,1,1,0,1,0,1},
                {1,1,0,0,0,0,0,1,0,1},
                {1,1,1,1,1,1,1,1,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,0,1,1,1}
            };
            int[,] maze2 = new int[,]
            {
                {1,1,1,1,1,1,1,1,1,2},
                {1,0,1,1,0,0,0,0,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,1,1,0,1,0,1,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,0,1,1,1,0,1,0,1},
                {1,1,0,0,0,0,0,1,0,1},
                {1,1,1,1,1,1,1,1,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,0,1,1,1}
            };
            int[,] maze3 = new int[,]
            {
                {1,1,1,1,1,1,1,0,0,3},
                {1,0,1,1,0,1,0,0,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,1,1,0,1,0,1,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,0,1,1,1,0,1,0,1},
                {1,1,0,0,0,0,0,1,0,1},
                {1,1,1,1,1,1,1,1,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,0,1,1,1}
            }; 
            //координаты игрока
            Start:
            int x = 1, y = 1;
            while (true)
            {
                //рисуем лабиринт
            
                Console.Clear();
                for (int i = 0; i < maze.GetLength(0); i++)
                {
                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        if (maze[i, j] == 0) Console.Write(".");
                        if (maze[i, j] == 1) Console.Write("#");
 
                    }
                    Console.WriteLine();
                }
                Console.CursorLeft = x;
                Console.CursorTop = y;
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.Write("@");
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
 
                // обработка ввода
                ConsoleKeyInfo ki = Console.ReadKey(true);
                if (ki.Key == ConsoleKey.Escape) break;
                if (ki.Key == ConsoleKey.LeftArrow && maze[y, x - 1] == 0) x--;
                if (ki.Key == ConsoleKey.RightArrow && maze[y, x + 1] == 0) x++;
                if (ki.Key == ConsoleKey.UpArrow && maze[y - 1, x] == 0) y--;
                if (ki.Key == ConsoleKey.DownArrow && maze[y + 1, x] == 0) y++;
                if (ki.Key == ConsoleKey.DownArrow && y == maze.GetLength(0) - 1) {
                    maze = maze2;
                    goto Start;
                    
                    }
                } 
            }
 
        }
    }
Тут не надо перестраивать и все берется из шаблонов, только не знаю как переходить к шаблону maze3 и т.д.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
28.03.2013, 05:56
Цитата Сообщение от Egor.S Посмотреть сообщение
goto
ЗАБУДЬ О НЁМ, КАК О СТРАШНОМ СНЕ И НЕ ВСПОМИНАЙ!

По теме: раз не шаришь, как записывать/считывать в файл, храни массив массивов.
C#
1
2
3
4
int[][] game = new int[5][];
game[0] = new int[100];
...
game[4] = new int[100];
P.S. С таким подходом ничего хорошего не выйдет.
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
28.03.2013, 18:36  [ТС]
Wolfdp, Спасибо конечно, но ничего толкового у меня пока не получается, пойду работу файлами осваивать)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2013, 18:36
Помогаю со студенческими работами здесь

Игра "Лабиринт"
Хочу написать игру &quot;Лабиринт&quot;. Сюжет: Поле NxN клеток, старт слева, финиш справа. Тело N перемещается путем однократного нажатия одной...

Лабиринт на C#
Вообщем надо написать игру лабиринт на C# . Игры до этого не писал . Знаю что для начала нужно инициализорвать его на форме . Как это...

Лабиринт
Можно ли как-то через Windows Forms реализовать игру Лабиринт со случайной генерацией лабиринта? Если да, то как?

Paintbox или же лабиринт
Добрый день, сообственно я на данный момент пытаюсь написать программу, которая находит путь из лабиринта по принципу левый руки. Вот...

Волновой алгоритм и лабиринт! C#
Здравствуйте, у меня два вопроса. первый: как сгенирировать лабиринт? рандомно, каждый раз новый. У меня есть мысль - заполнить...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru