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

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

12.10.2021, 14:08. Показов 20224. Ответов 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
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 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
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 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
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
18.10.2021, 11:00
Forest155,
ок.
пора начинать писать лабиринт.

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

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

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

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

за образец можно взять пример с футбольной бандой из пдф'ки выше по ссылке.
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 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
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
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
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
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
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
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
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru