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

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

12.10.2021, 14:08. Показов 20167. Ответов 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
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
22.10.2021, 14:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Forest155 Посмотреть сообщение
А ещё я понял что означает __FUNCTION__
это макрос внутри библиотеки компилятора, который подставляет имя функции.
их там много таких - запоминать не надо - надо просто знать, что там такое барахло есть.

Добавлено через 5 минут
Forest155,
в нашей декомпозированной композиции не хватает кое-что.

сразу я не увидел, но не хватает самого важного объекта.

Напишите мне - какого?

для этого С++ не нужен, но возможно понадобится представить сам процесс игры.
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
23.10.2021, 12:03  [ТС]
В целом как мне кажется что игра есть, но игрок как таковой отсутствует.
Ну это первая моя мысль, сейчас надо углубиться. Получается в графическом движке будет вся визуализация проекта,
лабиринт и прочее. В интерфейсе появится выбор размера лабиринта и после ввода данных соответственного его генерация.
В то же время, по идее должны генерироваться комнаты с предметами и дверьми.
Но лабиринт должен генерироваться так чтобы его можно было 100 % пройти и ещё нет условия победы в объектах, тоже довольно важно, или же можно в объект Game добавить.
Соответственно появляется игрок, и получается всё таки объект игрока нужен, игрок делает выбор и у него должен быть инвентарь. Делая выбор игрок решает забрать предмет или же пойти в другую комнату, а ещё применить предмет, до тех пор пока не будет выполнено условие победы. Если игрок побеждает то выведется надпись, УРАА ТЫ ПОБЕДИЛ.
Сложно сказать что именно самое важное когда по сути всё важно, без лабиринта не будет игры да и без интерфейса тоже навряд ли , как я понял. Пока пишу это сообщение я понимаю что ни в чём не уверен, но очень надеюсь что хотя бы мысли идут в правильном направление.
1
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
24.10.2021, 10:58
Цитата Сообщение от Forest155 Посмотреть сообщение
но игрок как таковой отсутствует.
+10

я тут подумал, что перед тем как продолжать писать наш прожект,
нужно вспомнить два способа борьбы со сложностью по Макконеллу.

напомните?
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
24.10.2021, 11:05  [ТС]
Писать понятный код, без усложнений , тоесть писать не очень большой код и разделять его на части, для доступности.
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
24.10.2021, 11:25
Цитата Сообщение от Forest155 Посмотреть сообщение
Писать понятный ко
это не по Макконеллу.

Макконелл там озвучивает существование в проектировании двух разных разновидностей свойств(или полей класса) объектов.
- существенные
- несущественные

напишите мне разницу между ними.


почему я об этом спрашиваю
Forest155, я не пытаюсь вас троллить и не буду пытаться.

Важно, что когда вы тянете тяжёлую(или даже лёгкую) телегу прожекта,
то ваши ноги должны упираться в нечто твёрдое, незыблемое, постоянное.

это наша та "Точка старта".

я хочу, чтобы ваши ноги на чём то стояли, для того чтобы вы не висели в воздухе, а могли тянуть телегу...

0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
24.10.2021, 13:47  [ТС]
Если честно то у меня даже мысли не было, что меня троллят.
Я почитал две главы книги и они мне показались очень полезными , захотел всю книгу прочесть.
Да и вообще я в шоке что вы мне помогаете. Мне казалось что по идеи никто никогда не должен помогать впринципе.
Поэтому я вам искренне благодарен.
Точно там было про существенные и несущественные свойства.
Существенные относятся к частям объекта без которых данный объект не объект. В голове появилась мысль об карандаше, то что без стержня карандаш не карандаш вовсе, да и один стержень по сути тоже не является каранашом. Хотя в книге пример про машины , но мне кажется что машина без дверей тоже вроде как машина, только дверей нет.
Несущественный свойства всё остальное, пример снова про карандаш. Вот есть карандашик а к нему ещё ластик приделали, без ластика карандаш так и останется карандашом, ничего не поменяться. Признаюсь чтобы точно ответить на этот вопрос, пришлось перечитать 74 страницу.

Добавлено через 6 минут
До прочтения страницы я думал существенный важны, а несущественные наоборот , тоесть неважные. Впринципе вроде тоже самое, но очень упрощённо.
1
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
24.10.2021, 14:33
Цитата Сообщение от Forest155 Посмотреть сообщение
я думал существенный важны, а несущественные наоборот , тоесть неважные
ну, согласно поговорке "В большом деле мелочей не бывает", конешъ, всё важно.

НО,
давайте щас сделаем такую общую установку:
НАПОЛНЯЕМ НАШ СКЕЛЕТ ПРОЖЕКТА СВОЙСТВАМИ ТАК,
ЧТОБЫ ПОЛУЧИТЬ МИНИМАЛЬНО РАБОЧИЙ ПРОЕКТ.

ключевые слова: "МИНИМАЛЬНО " и "РАБОЧИЙ ".

Для этого(да и в любом случае) нам понадобятся функции ОБЩЕГО назначения.
Их надо будет куда то складировать.

предлагаю завести для них свой namespace mylib.

На вскидку первая такая функция:
функция получения случайного числа:

тут тест отдельно от проекта:
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
///----------------------------------------------------------------------------|
/// Тест рандома.
///----------------------------------------------------------------------------:
#include <iostream>
#include <ctime>
#include <cstdlib>
 
namespace mylib
{
struct Rand
{   Rand(            ){   srand((unsigned)time(0));}
    Rand(unsigned sid){   srand(sid);}
    int operator()(int range_min, int range_max) const
    {   return rand() % (range_max - range_min) + range_min;
    }
};
}
 
inline mylib::Rand rrand;
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
void testclass_Rand_01()
{   while(true)
    {   ///-----------------------------|
        /// Возможные значения: 0,1,2   |
        ///-----------------------------:
        std::cout << rrand(0, 3) << '\n';
        std::cout << "PRESS ENTER FOR NEXT NUMBER...\n";
        std::cin.get();
    }
}
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   testclass_Rand_01();
}
Forest155, к вам пару вопросов:

1. что такое тут sid и зачем он может быть нужен и пригодится ли он нам?
2. создайте массив рандомного размера и заполните его рандомными целыми числами из рандомного диапазона.

(продолжение следует ...)
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
24.10.2021, 20:13  [ТС]
Надеюсь что всё правильно.
1. sid это параметр перегрузки. unsigned sid означает что класс принимает целые числа, не отрицательные.
2. Я пока не понял как сделать, продолжу позже.
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
24.10.2021, 20:37
Цитата Сообщение от Forest155 Посмотреть сообщение
1. sid это параметр перегрузки. unsigned sid означает что класс принимает целые числа, не отрицательные.
как это влияет на рандом?
просто вам ту нужно погуглить,
ибо любое кодирование на любом языке это на 50% поиск справочной инфы.

Цитата Сообщение от Forest155 Посмотреть сообщение
продолжу позже.
ок
0
 Аватар для Annemesski
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
25.10.2021, 11:42
Цитата Сообщение от XLAT Посмотреть сообщение
1. что такое тут sid и зачем он может быть нужен и пригодится ли он нам?
Forest155, чтобы правильнее гуглилось имейте в виду что это называется seed
2
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
25.10.2021, 12:39
Цитата Сообщение от Annemesski Посмотреть сообщение
имейте в виду что это называется seed
верно.

я проверил как оно ищется:


третья ссылка снизу - там всё расписано ИДЕАЛЬНО.

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

и цель вопроса, как раз, получение личного опыта.
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
27.10.2021, 13:41  [ТС]
Извините что так долго отсутствовал.
Почему-то мне не удаётся запустить код, компилятор ругается на 19 строчку.
Пишет что всторенный спецификатор можно использовать только в объявлении функции,
но в функции он тоже почему-то не хочет работать.
Я прочитал про генерацию случайный чисел, но так и не понят что значит seed. В других источниках пишется что seed используется рандомной генерации рандомных чисел.
0
 Аватар для Annemesski
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
27.10.2021, 14:26
Цитата Сообщение от Forest155 Посмотреть сообщение
Почему-то мне не удаётся запустить код
Какой именно код? Заведите привычку либо приводить код о котором идет речь под тегами кода в сообщении, либо давать ссылку на пост в котором этот код приведен.
Цитата Сообщение от Forest155 Посмотреть сообщение
компилятор ругается на 19 строчку
если речь идет о коде в посте №107, то там все нормально (кроме оператора взятия рандомного числа из заданного диапазона) проверьте верно ли скопирован код.

ЗЫ: хот-фикс генератора в строку №14:
C++
14
return rand() % (range_max - range_min + 1) + range_min;
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
27.10.2021, 17:17
Цитата Сообщение от Annemesski Посмотреть сообщение
ЗЫ: хот-фикс генератора в строку №14:
C++Выделить код
14
return rand() % (range_max - range_min + 1) + range_min;
там я по русски специально написал, что должно быть на выходе:
C++
26
27
28
    {   ///-----------------------------|
        /// Возможные значения: 0,1,2   |
        ///-----------------------------:
Annemesski, этот генератор я использовал тут на форуме 100500 раз.
в том числе и в виде вашего фикса, например, тут (строка 21):
https://www.cyberforum.ru/post15453880.html

Почему я "выкинул" ваш фикс?
Это я сделал исключительно в целях "мелкой оптимизации":
1. удобно рандомно обращаться к массиву по рандомному индексу.
2. меньше кода(не надо в функции прибавлять единицу + в вызове не надо отнимать единицу).
3. а зам код быстрее.

вообщем, спасибо, но ваш фикс не нужен, потому что, просто, он вреден.

Цитата Сообщение от Forest155 Посмотреть сообщение
Почему-то мне не удаётся запустить код, компилятор ругается на 19 строчку.
это разве из C++20?
я не буду щас уточнять.

Проверьте какой у вас щас настроен стандарт С++ Нужен С++17

напишите так:
C++
19
mylib::Rand rrand;
мне эта строчка самому не нравилась...

Добавлено через 5 минут
Forest155, напишите какой у вас редактор кода???
0
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
27.10.2021, 17:57  [ТС]
Annemesski, да спасибо, оказывается у меня был стандарт С ++ 14, а не 17 вот и ошибка появлялась.
Чтож в следующий раз постараюсь не забыть указать какой именно код.
А ещё я только щас понял что значит хот-фикс.
Пробовал сделал полностью рандомный массив, вообще не получается.
Я понимаю но не понимаю что я делаю. Вот мой код и мне кажется он плох, не радномный вообще.
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>
#include <ctime>
#include <cstdlib>
 
void massiv()
{
    int x[5];
    int a;
    srand(time(0));
    for (a = 0; a < 5; a++)
        x[a] = 1 + rand() % 5;
    for (a = 0; a < 5; a++)
        std::cout << x[a] << std::endl;
}
 
int main()
{
    massiv();
 
 
    return 0;
}
Добавлено через 9 минут
Чот код не очень, не рекомендую смотреть.
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
27.10.2021, 19:26
Цитата Сообщение от Forest155 Посмотреть сообщение
int x[5];
вроде мы договорились, что все массивы у нас будут на std::vector? вы помните?

Лабиринт мы пишем на С++!
Си-шкокод оставим ембеддид-кодерам!

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
///----------------------------------------------------------------------------|
/// Тест рандома.
///----------------------------------------------------------------------------:
#include <iostream>
#include <ctime>
#include <cstdlib>
 
namespace mylib
{
struct Rand
{   Rand(            ){   srand((unsigned)time(0));}
    Rand(unsigned sid){   srand(sid);}
    int operator()(int range_min, int range_max) const
    {   return rand() % (range_max - range_min + 1) + range_min;
    }
};
}
 
mylib::Rand rrand;
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
void testclass_Rand_01()
{   while(true)
    {   ///-----------------------------|
        /// Возможные значения: 0,1,2   |
        ///-----------------------------:
        std::cout << rrand(-1, 2) << '\n';
        std::cout << "PRESS ENTER FOR NEXT NUMBER...\n";
        std::cin.get();
    }
}
 
///----------------------------------------------------------------------------|
/// info array.
///----------------------------------------------------------------------------:
template<typename T>
void info(const T& m)
{   for(const auto& e : m) std::cout << e << ' ';
    std::cout << '\n';
}
 
///----------------------------------------------------------------------------|
/// vector.
///----------------------------------------------------------------------------:
#include <vector>
void testclass_vector()
{
    /// Объявление:
    ///-----------------------------------------|
    /// Пустой вектор из неотрицательрных чисел.|
    ///-----------------------------------------:
    std::vector<unsigned> m1;
 
    /// Объявление:
    ///-----------------------------------------|
    /// Вектор из 10 неотрицательрных           |
    /// и НЕИНИЦИАЛИЗИРОВАННЫХ чисел.           |
    ///-----------------------------------------:
    std::vector<unsigned> m2(10);
 
    /// Объявление:
    ///-----------------------------------------|
    /// Вектор из 10 неотрицательрных           |
    /// и чисел ИНИЦИАЛИЗИРОВАННЫХ числом 5.    |
    ///-----------------------------------------:
    std::vector<unsigned> m3(10, 5);
 
    ///-----------------------------------------|
    /// Реллокация вектора m1 ресайзингом.      |
    /// 3 ячейки со значением 4                 |
    ///-----------------------------------------:
    m1.resize(3, 4);
 
    ///-----------------------------------------|
    /// Добавим ещё один элемент                |
    /// в конец вектора m1                      |
    ///-----------------------------------------:
    m1.push_back(2021);
 
    ///-----------------------------------------|
    /// Покажем юзеру.                          |
    ///-----------------------------------------:
    info(m1);
 
    ///-----------------------------------------|
    /// Инициализируем числом порядка.          |
    ///-----------------------------------------:
    unsigned cnt = 1;
    for(auto& e : m1) e = cnt++;
 
    ///-----------------------------------------|
    /// Покажем юзеру.                          |
    ///-----------------------------------------:
    info(m1);
    
    ///-----------------------------------------|
    /// А теперь инициализируйте тут рандомом.  |
    ///-----------------------------------------:
    /// TODO
    /// ...
}
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{ //testclass_Rand_01();
    testclass_vector ();
}
добавьте сюда код решающий вторую нашу тестовую задачу ...

Добавлено через 3 минуты
Цитата Сообщение от Forest155 Посмотреть сообщение
А ещё я только щас понял что значит хот-фикс.
выкиньте это из головы - щас это не нужно.
Щас нужно: понять, что такое сид в рандоме.

Общая теория:
1. Программирование это манипуляция с данными.
2. Данные это константы и переменные ИНИЦИАЛИЗИРОВАННЫЕ заданным значениями.
3. Для инициализации данных используются конструкторы.
4. Перед использованием рандома этот рандом должен быть инициализирован!
5. Рандом инициализируется неким заданным числом, которое называется сид.

Вопросы:
1. Где взять такое число.
2. Что будет с поведением рандома, если такое число константа?
3. А как получить рандомный сид, если сам рандом у нас ещё не готов к работе?


Добавлено через 2 минуты
Цитата Сообщение от Forest155 Посмотреть сообщение
А ещё я только щас понял что значит хот-фикс.
я думаю, в первую очередь всем нам нужно учиться
ПРАВИЛЬНО РАССТАВЛЯТЬ ПРИОРИТЕТЫ.

ПРИОРИТЕТЫ это, например, при пожаре вы не спасаете домашние тапочки,
а в первую очередь выносите из пожара людей без сознания?
Если людей нет, а пожар у вас, то наверно документы и комп с жесткими дисками?
Верно?


Нарушение приоритетов называется ПРОКРАСТИНАЦИЕЙ.
часто люди это делают сознательно,
поэтому это есть серьезная психологическая проблема,
выражающаяся в ОТСУТСТВИИ полезного конечного результата.
0
 Аватар для Annemesski
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
27.10.2021, 22:28
XLAT, не нужен так не нужен (не продаю же ) просто в генераторах привычнее работать с range[ ], хотя согласен что range[ ) удобнее для рандомизации индексов.

Forest155,
Вот мой код и мне кажется он плох, не радномный вообще.
на такой малой выборке (5 элементов) пытаться оценивать какую-то "рандомность" совершенно невозможно, да и Вам это сейчас действительно не нужно, не отвлекайтесь от заданий XLAT - я тут сбоку-припеку - просто слежу за темой и иногда не сдерживаюсь чтобы вбросить 5 копеек.
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
29.10.2021, 14:56  [ТС]
Ответ первый.

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

2. Константная переменная не меняется, то есть как я понимаю рандома не произойдёт.
Скорее всего ошибка выскочит.

3. Вроде нельзя.

Думал какой код добавить, но скорее всего его надо разбирать. Сегодня перед сном посмотрю.
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
30.10.2021, 10:36
Цитата Сообщение от Forest155 Посмотреть сообщение
Константная переменная не меняется, то есть как я понимаю рандома не произойдёт.
Скорее всего ошибка выскочит.
это же ОЧЕНЬ легко выяснить:
делаем его величество ЭКСПЕРИМЕНТ:
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
///----------------------------------------------------------------------------|
/// Тест рандома:
///     Генерируем последовательность из 5 рандомных чисел.
///     Всего испытаний 5 для константного сида
///       и 5 испытаний для сида из времени.
///----------------------------------------------------------------------------:
#include <iostream>
#include <ctime>
#include <cstdlib>
 
#define BANNER(a,b,c) std::wcout << a << '\n' << L##b << '\n' << c << '\n';
 
namespace mylib
{
    struct  Rand
    {       Rand(            ){   srand((unsigned)time(0));}
            Rand(unsigned sid){   srand(sid);}
        int operator   ()(int range_min, int range_max) const
        {   return rand() % ( range_max -    range_min) + range_min;
        }
    };
}
 
void testclass_Rand_02()
{   mylib::Rand rrand_01;
 
    ///-------------------------------|
    /// Всего 5 чисел.                |
    ///-------------------------------:
    for(int i = 5; i--;)
    {
        ///-------------------------------|
        /// Возможные значения: 1,2,3,4,5 |
        ///-------------------------------:
        std::cout << rrand_01(1, 6) << ' ';
    }
}
 
void testclass_Rand_03()
{
    mylib::Rand rrand_03(123);
 
    ///-------------------------------|
    /// Всего 5 чисел.                |
    ///-------------------------------:
    for(int i = 5; i--;)
    {   ///-------------------------------|
        /// Возможные значения: 1,2,3,4,5 |
        ///-------------------------------:
        std::cout << rrand_03(1, 6) << ' ';
    }
}
 
///----------------------------------------------------------------------------|
/// info array.
///----------------------------------------------------------------------------:
template<typename T>
void info(const T& m)
{   for(const auto& e : m) std::cout << e << ' ';
    std::cout << '\n';
}
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   setlocale(0,"");
 
                                    BANNER(
    "///--------------------------------|",
    "/// Сид из времени.                |",
    "///--------------------------------:")
    for(int i = 0; i < 5; ++i)
    {   testclass_Rand_02();
        std::cout << "\nPRESS ENTER FOR NEXT NUMBER...\n";
        std::cin.get();
    }
 
                                    BANNER(
    "///--------------------------------|",
    "/// Сид константный.               |",
    "///--------------------------------:")
    for(int i = 0; i < 5; ++i)
    {   testclass_Rand_03();
        std::cout << "\nPRESS ENTER FOR NEXT NUMBER...\n";
        std::cin.get();
    }
}
https://onlinegdb.com/iHK4xZ7moE

и теперь что вы видите?

Forest155,
пока вы не начнете делать эксперименты
через написание вами тестов
дальше мы не двинемся....
1
13 / 13 / 0
Регистрация: 22.09.2021
Сообщений: 41
21.11.2021, 16:22  [ТС]
Меня не было месяц, нет слов. Никакие извинения не вернут потраченное в пустую время.
Я пытался сделать экспиримент но ничего не получалось, возможно я либо не умею либо боюсь просто напросто.
Но сейчас начал заниматся по книжке и понемного меняю код, смотрю что будет.
Спасибо ещё раз, то с чем вы поделились просто невероятно полезно, который раз в этом убеждаюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2021, 16:22

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №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
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru