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

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

12.10.2021, 14:08. Показов 19367. Ответов 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
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.10.2021, 12:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
чтобы создать консольное приложения
знакомо.
сам относился к консольке, как к чему то убогому.

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

В конце концов, нарисовать пиксель(воксель, полигон) на экране будет без разницы от того,
в каком окне вы его нарисуете, если это - всего лишь вызов функции любой по вашей хотелке либы(фреймворка, движка).

Цитата Сообщение от Royal_X Посмотреть сообщение
Задача не стояла в том, чтобы создать консольное приложения
отчего же так.
ВСЕГДА СТАВЬТЕ ТАКИЕ ЗАДАЧИ! и ваша жизнь станет счастливой.
переделайте на андроид и положите в плеймаркет и при соответствующем оформлении ваш бонус может составить >100у.е..

а я вот думаю, что смог бы снять фильмец про Красную Шапочку с классическим сюжетом и с кассовым сбором > $1кк.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
15.10.2021, 13:24
Цитата Сообщение от Royal_X Посмотреть сообщение
Смысл, что излишне страхуетесь?
Это моторный навык уже. Про это не задумываются, пока не появится обоснование написать иначе.

Цитата Сообщение от Royal_X Посмотреть сообщение
Напишите ему код на десяток строк, который учитывает все - неправильный ввод, проблемы с кодировкой на разных системах и т.д.
За профессиональный код нужно платить.
Заплатят за такое - напишут.

Цитата Сообщение от Royal_X Посмотреть сообщение
Задача не стояла в том, чтобы создать консольное приложения для его продажи за 10 у.е.
Продажа тут не при чем. В целом прекрасно, когда новички перенимают полезные навыки. Меньше потом будет удивлений на собеседованиях.
Так что ничего плохого в том, чтобы учить новичков не писать БЕЗДУМНО using namespace нет.
Если же человек понимает что к чему, то к нему эти рекомендации не относятся, как и слово "чайник".
1
15.10.2021, 14:04

Не по теме:

по моим наблюдениям, самый ужасный код пишут вовсе не школьники, а матёрые учёные - математики и физики, впервые севшие писать программу :D Там такой поток сознания бывает!

0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.10.2021, 14:34
Цитата Сообщение от Алексей1153 Посмотреть сообщение
по моим наблюдениям
это не ваши наблюдения, а уже давно установленный факт.

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

код балбеса обученного кодостайлу будет в разы понятнее остальным балбесам и в будущем затраты на его(кода) поддержку будут гораздо меньше.
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
15.10.2021, 15:07  [ТС]
Здорово. Зарегался решаю первую задачу, она же простая и уже сел на ней. Но всё таки полазив в интернете нашёл решение. У меня вопрос, а решение сюда скинуть или необязательно ?
1
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
15.10.2021, 15:19
Forest155, скидывайте, мы Вас отругаем и Вы так больше делать не будете ))))
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.10.2021, 15:30
Forest155, ъ
спасибо, что не сдались сразу в плен врагу

это можно не читать
тут, буду сильно сокращать, чтобы не получилось болото(всё равно получится).

вторым шагом, что называется, мы берем быка за рога.

Задачи я брал на обум, но сначала смотрел коэффициент сложности, там он равен 100 - проценту_тех_кто_решил.

Петрушка такая:
1. объяснять самые простые вещи на самом деле очень сложно,
потому что объясняя простое, нужно будет использовать более сложные построения.

2. люди которые собираются учить С++, думают что выучив его они смогут решать задачи.
на самом деле, дела обстоят так, что вы пробуете решать задачу на ЛЮБОМ языке, доступном вам,
а уже потом транслируйте решение на ваш ЯП.
и вот тут то подвох - оказывается, что решить задачу мы не можем ваще ни на каком языке, даже школьном,
поэтому, извиняюсь, второй шаг это тест ваших мыслительных способностей.

3. далее, если вам удастся решить эти три задачи, то можно говорить уже о том что осталось выучить только нюансы С++,
конкретно по данной игре и дело в шляпе. И это, на самом деле, есть мелкая проблема.

Forest155, короче, второй шаг, увы, это испытание того что есть внутри вас.
если же я вам разжую решение, то для вас не будет никакой пользы.
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
15.10.2021, 16:48  [ТС]
Вот первая задача, но мне пишут что неправильно. Если честно так и не понял в чём проблема.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    setlocale(LC_ALL, "rus");
    int x,m;
    std::cout << "Введите пожалуйста число от 10 до 99: ";
    std::cin >> x;
    if (x < 10 && x > 99)
    {
        std::cout << "Эээ от 10 до 99 же" << std::endl;
        return 0;
    }
    m = x % 10;
    x = x / 10;
    std::cout <<x<< ' '<<m;
    
    std::cout << std::endl;
 
 
    return 0;
}
1
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
15.10.2021, 17:07
Forest155, вопервых обрамляйте код тэгами языка (вверху редактора есть кнопка С++) во вторых Вы, как говорится, сам себе злобный Буратино: условие задачи гарнтирует что на вход е будет двузначное число, Вы делаете проверку (ну и хорошо), но условие записаили не правильно.
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
15.10.2021, 17:24
Цитата Сообщение от Forest155 Посмотреть сообщение
мне пишут что неправильно. Если честно так и не понял в чём проблема.
Цитата Сообщение от Forest155 Посмотреть сообщение
std::cout << "Введите пожалуйста число от 10 до 99: ";
Слишком вежливо
Во всех этих тестилках очень строго с вводом/выводом;
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.10.2021, 17:41
Цитата Сообщение от Forest155 Посмотреть сообщение
Вот первая задача
ага.

ваш код там проверяет не человек, а автовалидатор:
возможно никто из людей его никогда не увидит.

это значит, что Проверяющему не нужны никакие человеческие комментарии, ибо он МАШИНА,
поэтому выкидываем все поясняющие буквы, оставляя только то, что относится к задаче:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
 
int x,m;
 
std::cin >> x;
 
m = x % 10;
x = x / 10;
std::cout << x << " " << m;
 
 
return 0;
}
+ не забудьте там выбрать из выпадающего меню язык С++17

Добавлено через 2 минуты
или если совсем лаконично:
C++
1
2
3
4
5
6
#include <iostream>
 
int main()
{   int n; std::cin >> n;
    std::cout << n/10 << " " << n%10;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
15.10.2021, 18:09
Цитата Сообщение от Forest155 Посмотреть сообщение
Если честно так и не понял в чём проблема.
C++
1
if (x < 10 && x > 99)
Назовите мне хоть одно значение x для которого выполняется это условие.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
16.10.2021, 13:39
Цитата Сообщение от Royal_X Посмотреть сообщение
не будет никаких конфликтов с пространством имен, ибо вероятность, что сторонние библиотеки будут иметь такие же названия, что и идентификаторы cout и cin, равна 1,0*10^-42
почему я должен разруливать такую вероятность тут, а не вы?
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 15:16
Мне, кстати, вообще непонятна эта война в защиту этого using na~; аргументы за НЕиспользование этой штуки вполне ясны и объективны, в то время как внятных и весомых аргументов за использование как-то не приводят.
В чём смысл-то? Не писать кое-где std:: и только? Типа это неудобно? Ну чушь же. Как уже сказал DrOffset - это быстро становится моторикой настолько естественной, что иначе даже трудно.
Да и код читается легче с явным указанием пр-ва.
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
16.10.2021, 19:02  [ТС]
Господин Annemesski я не совсем понимаю о чём вы. Что за теги языка и где их искать ? И почему именно условие было неправильным ?
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 19:08
Цитата Сообщение от Forest155 Посмотреть сообщение
Что за теги языка и где их искать ?
Цитата Сообщение от Forest155 Посмотреть сообщение
И почему именно условие было неправильным ?
Написать игру, в которой главный герой ходит по лабиринту и ищет клад
Изображения
 
1
16.10.2021, 19:09

Не по теме:

Цитата Сообщение от Forest155 Посмотреть сообщение
Что за теги языка и где их искать ?
https://www.cyberforum.ru/blog... g4022.html

0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
16.10.2021, 19:24  [ТС]
C++
1
2
3
4
5
6
#include <iostream>
int main()
{
std::cout<<"Понял, спасибо";
return 0;
}
В данный момент стараюсь выполнять второе задание. Лично для меня она сразу показалась невозможной, но пока пытаюсь разобраться.
Я не могу бросить просто не могу.
3
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
16.10.2021, 19:32
Цитата Сообщение от Forest155 Посмотреть сообщение
Я не могу бросить просто не могу.
Конечно не бросишь.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
16.10.2021, 20:17
Цитата Сообщение от Forest155 Посмотреть сообщение
Я не могу бросить просто не могу.
есть риск надорваться - не забывайте ходить на дискотеки...

второе задание я решил только на 37%

и мой код ужасен:
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
#include <list>
#include <vector>
#include <iostream>
#include <algorithm>
 
#define  l(v)  std::cout << #v << " = " << (v) << "\n";
 
struct  P
{
    int a, b;
    void debug() const
    {   std::cout << a << "\t " << b << '\n';
    }
};
 
typedef std::list<P> cargo_t;
 
unsigned calc_wait_time(const cargo_t& m)
{   auto     t =   m.begin()->a;
    auto     b =   m.begin()->b;
    for(auto i = ++m.begin(); i != m.end(); ++i)
    {   if(auto r = i->a - b; r > 0)
        {   t += i->a - b;
        }
 
        b = i->b;
    }
    return t;
}
 
unsigned calc_moroz_time(const cargo_t& m)
{   unsigned t = 0;
    for(const auto& e : m) t += e.b;
    return t;
}
 
/// 5
/// 4 4 30 6 2 - время упаковки
/// 5 1 4 30 3 - время доставки
 
struct Task
{   cargo_t result;
 
    void get_Big_time_moroz(cargo_t& m)
    {   auto     j = m.begin();
        for(auto i = m.begin(); i != m.end(); ++i)
        {   if(  i->b > j->b)
            {    j = i;
            }
        }
        result.push_front(*j);
        m.erase(j);
    }
 
    void get_Big_time_snegur(cargo_t& m)
    {   auto     j = m.begin();
        for(auto i = m.begin(); i != m.end(); ++i)
        {   if(  i->a > j->a)
            {    j = i;
            }
        }
        result.push_back(*j);
        m.erase(j);
    }
};
 
int main()
{
    cargo_t m;
    {   unsigned n; std::cin >> n; m.resize(n);
 
        for(auto& e : m) std::cin >> e.a;
        for(auto& e : m) std::cin >> e.b;
    }
 
    Task task;
 
    for(bool b = true; !m.empty(); b = !b)
    {
        if(b) task.get_Big_time_moroz (m);
        else   task.get_Big_time_snegur(m);
    }
 
    cargo_t& r = task.result;
 
    //for(const auto& e : r) e.debug();
 
    //l(calc_moroz_time(r))
    //l(calc_wait_time (r))
    //l(calc_wait_time (r) + calc_moroz_time(r))
 
    std::cout << calc_wait_time (r) + calc_moroz_time(r);
}
алгоритм, хоть и не перебор, тут он явно не катит, но всё равно "тупо в лоб".

Folian, вся надежда на вас

https://www.e-olymp.com/ru/problems/26

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

СВОЙ ВАЛИДАТОР ОФФЛАЙН
Ручной тест офлайн без ручного ввода:
1. Скомпилируйте свой ексешник my.exe
2. Положите радом текстовый файл run.bat
Code
1
2
my.exe <"my.txt"
pause
3. Положите радом текстовый файл test.txt
Code
1
2
3
5
4 4 30 6 2
5 1 4 30 3
Клацаем на run.bat и смотрим результат...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2021, 20:17

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
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