Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/84: Рейтинг темы: голосов - 84, средняя оценка - 4.62
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41

Написать игру, в которой главный герой ходит по лабиринту и ищет клад

12.10.2021, 14:08. Показов 19363. Ответов 130

Студворк — интернет-сервис помощи студентам
Нужна помощь по решению задачи.
Задача крайне непосильна для меня. Я был бы признателен если вы мне поможете, но если честно то крайне стыдно просить помощи.
Вот текст задачи: "Написать игру, в которой главный герой ходит по лабиринту и ищет клад. Игровой мир представляет
собой прямоугольную матрицу связанных между собой комнат. У каждой комнаты есть от одной
до четырёх дверей (соответствующих сторонам света). В каждой комнате может быть несколько
игровых объектов, с которыми игрок может взаимодействовать по некоторым игровым правилам.
Цель – найти ключ и сундук, открыть сундук ключом и получить священный Грааль. Игра выполнена
в виде консольного приложения, игрок управляет персонажем, вводя текстовые команды."

Детальное описание хода игры.

Сначала игрок вводит количество комнат, и программа генерирует лабиринт. Игрок оказывается
в одной из комнат лабиринта. При попадании в каждую комнату выводится текст:
You are in the room [x,y]. There are [N] doors: [directions]. Items
in the room: [items list].
Вместо текста в квадратных скобках выводятся, соответственно, координаты комнаты, количество
дверей, направления дверей и список предметов в комнате. После этого игроку предлагается ввести
команды:
— N, S, W и E перемещают игрока в соответствующем направлении;
— get [item] поднимает предмет в комнате и кладет его в инвентарь (кроме сундука);
— drop [item] бросает предмет в комнате, убирая его из инвентаря.
К объекту chest можно применить команду open, которая сработает только в том случае, если
в инвентаре игрока есть объект key. Удачное выполнение этой команды приведет к выигрышу.
Проигрыш происходит в случае, когда у игрока кончается лимит шагов, и он умирает от голода
в мрачных застенках драконьей пещеры. В дополнительных заданиях понятия «жизненная сила»,
«здоровье» и «лимит шагов» по сути означают одно и то же.
Важно: лабиринт не должен быть непроходимым. Не должно быть ситуаций, когда ключ или сундук
находятся в изолированной от игрока части лабиринта, или путь из начальной позиции до ключа
и сундука больше лимита шагов.
Надеюсь на вашу понимание. Есть ещё дополнительные , но можно и без них обойтись.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2021, 14:08
Ответы с готовыми решениями:

Мы создаем игру, в которой главный герой маг. Он может убивать монстров заклинаниями, но для каждого монстра треб
Мы создаем игру, в которой главный герой маг. Он может убивать монстров заклинаниями, но для каждого монстра требуется заклинание разной...

Андрей играет в новую игру, в которой герой сражается с монстрами
Андрей играет в новую игру, в которой герой сражается с монстрами. Герой наносит монстру удары. Один удар отнимает у монстра одну единицу...

Вы пишете игру, в которой герой перемещается по экрану только влево и вправо
Вы пишете игру, в которой герой перемещается по экрану только влево и вправо, а его положение записывают как положение на числовой прямой. ...

130
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 20:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
Folian, вся надежда на вас
Эт про дедмороза?
Там разве не отталкивается от сортировкой min-max, max-min?
XLAT, ты чо, вкинул задачу, а сам не решил?

Добавлено через 6 минут
Цитата Сообщение от XLAT Посмотреть сообщение
Folian, вся надежда на вас
А! Ещё! Коль сегодня уж начал разбираться с местоимениями - для тебя я "ты"
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
16.10.2021, 20:47
Цитата Сообщение от Folian Посмотреть сообщение
ты чо, вкинул задачу, а сам не решил?
всё как в жизни - в общей жизни - симуляция реальности это наше усё.

Цитата Сообщение от Folian Посмотреть сообщение
min-max, max-min?
у меня плохо с математикой - мои теоремы не поддаются доказательству,
я тут вижу скрытые параметры, почти как в неравенстве Белла,
сортировать тут можно не только мороза и снегурку, но и разности между ними со смещение или без.

Цитата Сообщение от Folian Посмотреть сообщение
для тебя я "ты"
я выкаю, чтобы не провоцировать оффтоп на личности,
ибо я не человек - я сетевой бот ...
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 20:51
Цитата Сообщение от XLAT Посмотреть сообщение
я выкаю, чтобы не провоцировать оффтоп на личности.
А я строю предложения чтоб местоимений не было
Цитата Сообщение от XLAT Посмотреть сообщение
мои теоремы не поддаются доказательству,
У меня тож. Давай тупо в лоб попробуем.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
16.10.2021, 20:55
Цитата Сообщение от Folian Посмотреть сообщение
ты чо, вкинул задачу
процесс решения важнее, чем само решение - сей процесс должен наслаждать...
иначе будут страдания, а это очень уже трудно ...

Добавлено через 1 минуту
Цитата Сообщение от Folian Посмотреть сообщение
Давай тупо в лоб попробуем.
моё вверху выше #40
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 21:07
Цитата Сообщение от XLAT Посмотреть сообщение
процесс решения важнее, чем само решение - сей процесс должен наслаждать
Ага! Согласен! Давай решать! (на самом деле мне сейчас лень(томучто я бух сейчас) и я б на завтра отложил)
А так по задаче - я её вчера/позавчера глянул = массивы отсортированные по возрастамости и по убываемости. Два массива.
Возможно(!) в первом стоит хранить не время упаковки, а сумму времён упаковки.
2
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
17.10.2021, 16:09  [ТС]
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
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <list>
 
using namespace std;
 
bool f(const pair<int, int>& a, const pair<int, int>& b)
{
    return min(a.first, a.second) < min(b.first, b.second);
}
 
int main()
{
    int n;
    cin >> n;
 
    vector <pair<int, int> > v(n);
 
    for (int i = 0; i < n; i++)
        cin >> v[i].first;
    
    for (int i = 0; i < n; i++)
        cin >> v[i].second;
    
    sort(v.begin(), v.end(), f);
 
    list < pair<int, int> > first, second;
 
    for (int i = 0; i < n; i++)
        if (v[i].first < v[i].second)
            first.push_back(v[i]);
        else
            second.push_front(v[i]);
 
    first.splice(first.end(), second);
    
    int a = 0, b = 0;
    
    for (list < pair<int, int> >::iterator p = first.begin(); p != first.end(); ++p)
    {
        a += p->first;
        b = max(b, a) + p->second;
    }
 
    cout << b;
    return 0;
}
Это не моё решение если что. Пока вообще ничерта непонятно что тут написано, но как видно работает и правильно решает задачу. У вас тоже пример правильный, но что написанно в самом коде, это конечно сильно для меня. Думаю пока поразбираю код, авось и пойму что к чему.
И да, вы просили скидывать свои наработки. Однако я даже примерно не понял как это сделать, понятно только что там надо использовать массивы, а может что-то ещё.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.10.2021, 11:00
Forest155,
ок.
пора начинать писать лабиринт.

но раз
Цитата Сообщение от Forest155 Посмотреть сообщение
Пока вообще ничерта непонятно
найдите в интете книгу Макконелл'а "Совершенный код.", изд.Питер
откройте на странице 74

и прочитайте полностью параграфы:
"Главный Технический Императив Разработки" стр.74,
"Уровни Проектирования" стр.79

далее ознакомьтесь с вот с этой запиской:C++.Точка старта.rar

и далее сделайте следующее:
перечислите все объекты игры, для которых вам придётся описать Типы(они же классы или структуры).
Желательно сделать это в код, который бы можно скомпилировать.

за образец можно взять пример с футбольной бандой из пдф'ки выше по ссылке.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.10.2021, 11:02
Forest155,
зы:
да, на всякий случай напоминаю,
что игру писать будете вы,
я буду тока наблюдать .
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
18.10.2021, 19:19  [ТС]
Понял принял, приступаю.
Так я и хочу сам написать игру, боже раньше я думал что это вообще невозможно. Вы и так просто дофига мне помогаете, капец.
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
18.10.2021, 19:54
Короч поковырялся и наивное в лоб делает 91%
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    size_t n {};
    std::cin >> n;
 
    std::vector<int> sneg(n);
    std::vector<int> ded(n);
 
    for(auto & i : sneg)
        std::cin >> i;
    for(auto & i : ded)
        std::cin >> i;
 
    std::sort(sneg.begin(), sneg.end());
    std::sort(ded.rbegin(), ded.rend());
 
    std::for_each(sneg.begin() + 1, sneg.end(), [&](int &a){ static int x = 0; a += x; x = a; });
    std::for_each(ded.begin() + 1, ded.end(), [&](int &a){ static int x = ded.front(); a += x; x = a; });
 
    int result { sneg.front() + ded.back() };
    if(ded.size() > 1)
    {
        int temp = sneg.back() - *(ded.end() - 2);
        if(temp > 0) result += temp;
    }
 
    std::cout << result;
 
    return 0;
}


Но! Вот это,
Цитата Сообщение от Forest155 Посмотреть сообщение
но как видно работает и правильно решает задачу.
, которое 100% проходит, на самом деле гонит серьёзно.

Вот и поди знай теперь кто тут верблюд.
Изображения
 
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
19.10.2021, 12:22
Посмотрел на
Цитата Сообщение от Folian Посмотреть сообщение
наивное в лоб
со стороны - оно сводится к довольно простому:
суммы
синее + ( красное > зелёное ? красное - зелёное : 0 );

Кликните здесь для просмотра всего текста
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
int main()
{
    size_t n {};
    std::cin >> n;
 
    std::vector<int64_t> sneg(n);
    std::vector<int64_t> ded(n);
 
    for(auto & i : sneg)
        std::cin >> i;
    for(auto & i : ded)
        std::cin >> i;
 
    int64_t s_min { *std::min_element(sneg.begin(), sneg.end()) };
    int64_t d_min { *std::min_element(ded.begin(), ded.end()) };
    int64_t sneg_s { std::accumulate(sneg.begin(), sneg.end(), 0LL) - s_min };
    int64_t ded_s  { std::accumulate(ded.begin(), ded.end(), 0LL) - d_min };
 
    int64_t result { s_min + d_min + ded_s };
    if(int64_t diff { sneg_s - ded_s }; diff > 0) result += diff;
 
    std::cout << result;
 
    return 0;
}


Это ведь в принципе минимально-возможное (в том смысле что меньше просто не может быть);
и, при таких сортировках (вперёд - вназад), никаких ожиданий из воздуха не получается и всё сводится к этому минимально-возможному.

Если я ошибаюсь и найдётся набор входных где это не работает - будет интересно посмотреть.
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
19.10.2021, 12:23
Не загрузилось:
Изображения
 
1
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
19.10.2021, 12:59
Цитата Сообщение от Folian Посмотреть сообщение
Если я ошибаюсь и найдётся набор входных где это не работает - будет интересно посмотреть.
порой меня это удивляет, но чаще всего самые простые параметры для теста подходят для компрометирования алгоритма:
Code
1
2
3
4
5
6
TEST:
> 3
> 1 2 3
> 1 2 3
 
< 7
вручную считается 9.
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
19.10.2021, 13:23
Цитата Сообщение от Annemesski Посмотреть сообщение
для компрометирования алгоритма:
Цитата Сообщение от Annemesski Посмотреть сообщение
вручную считается 9.
Сортировка:

1 2 3
3 2 1

1 + 3 + 2 + 1 = 7

там наименьшее найти нужно
1
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
19.10.2021, 13:32
Цитата Сообщение от Folian Посмотреть сообщение
там наименьшее найти нужно
нет, там нужно найти минимальное время доставки всех подарков, самый жадный сценарий:
шаг 0: Снегурка пакует за 3 Дед доставляет за 3 - 3 + 3 = 6
шаг 1: пока Дед доставлял за 3 Снегурка пакует оба и тот что за 1 и тот что за 2, Дед доставляет тот что за 2 - 6 + 2 = 8
шаг 2: Дед достаdляет тот что за 1 - 8 + 1 = 9.
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
19.10.2021, 13:47
Цитата Сообщение от Annemesski Посмотреть сообщение
самый жадный сценарий:
0) снегурка пакует за 1, дед доставляет за 3 // 0 - 4
1) пока дед мотался за 3 снегурка спаковала за 2 и начала паковать за 3; дед едет за 2 // 4 - 6
2) за время отсутствия деда снегурка допаковала за 3, дед едет за 1 // 6 - 7
1
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
19.10.2021, 14:08
Цитата Сообщение от Folian Посмотреть сообщение
снегурка пакует за 1, дед доставляет за 3
Кликните здесь для просмотра всего текста



Думается что
Зная время t1 упаковки каждого подарка Снегурочкой и время его доставки Дедом Морозом t2
так нельзя: время упаковки и доставки сопоставлено, в таком раскладе:
3
3 2 1
3 2 1

тот что пакуется за 1 доставляется за 1, а тот что за 3 - и доставляется за 3... или я ошибаюсь и допустимо любое отображение набора t1 на набор t2?
2
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
19.10.2021, 14:23
Цитата Сообщение от Annemesski Посмотреть сообщение
тот что пакуется за 1 доставляется за 1, а тот что за 3 - и доставляется за 3
А может я и лажанул тут, да. Вечером попробую тогда.
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
19.10.2021, 19:40  [ТС]
Прочитал эти главы. Теперь то что я понял. Пиши понятный код, не мудри, разделяй код чтобы он был обособленный. И да когда я это читал я представил одну игру называется Cosmoteer. Там мой знакомый построил корабль в котором все части независимы друг от друга. На самом деле этот корабль не смог победить ни один корабль. Ах да игра про космические корабли которые друг в друга стреляют.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
19.10.2021, 19:45
Цитата Сообщение от Forest155 Посмотреть сообщение
Прочитал эти главы
ближе к делу:

Цитата Сообщение от XLAT Посмотреть сообщение
и далее сделайте следующее:
перечислите все объекты игры, для которых вам придётся описать Типы(они же классы или структуры).
Желательно сделать это в код, который бы можно скомпилировать.
за образец можно взять пример с футбольной бандой из пдф'ки выше по ссылке.
речь про игру из вашего первопоста этого треда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2021, 19:45

Вы пишете игру, в которой герой перемещается по экрану только влево и вправо, а его положение записывают как положение н
Вы пишете игру, в которой герой перемещается по экрану только влево и вправо, а его положение записывают как положение на числовой прямой. ...

Главный герой застревает в препятствиях
День добрый, столкнулся с такой проблемой что Гг застревает в препятствиях. BoxCollayder2д есть, все ок. У Гг есть способность с помощью...

Сделать так, чтобы главный герой не проходил сквозь некоторые спрайты C++
Всем привет. Я 4-5 недель назад начал изучать OpenGL и разработку игр на С++. Начал изучать SFML и читать статьи на kychka-pc. В общем...

Написать игру в которой имитируется бросание кубиков
Этап первый Написать игру в которой имитируется бросание кубиков игроком. Игра должна представлять собой консольное приложение. В игре 2...

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru