Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/1: Рейтинг темы: голосов - 1, средняя оценка - 5.00
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3

Совместное создание игры

08.01.2025, 12:45. Показов 45628. Ответов 942
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий администратора 
Обсуждение вынесено из темы Ищу человека для совместного изучения программирования


Цитата Сообщение от Royal_X Посмотреть сообщение
Вот на моем неигровом ноуте последний UE без проблем запускается и не тормозит даже.
ок.
если ТС готов варганить со мной сапера, то я сделаю ещё одну попытку его(пожалуй 4 версию) установить и испытать.

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

и больше ничаво.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2025, 12:45
Ответы с готовыми решениями:

Для чего создан язык С++?
Для чего создан язык С++????

создан массив
создан массив автовладельцев, для каждого известны Ф.И.О., номер, адрес...,Выяснить есть ли автовладельцы у которых имеются больше 1-ой...

Теория игр, массивы
Есть задание (прикрепил его в виде файла к сообщению). Есть решение для 12-ого варианта на BORLANDC, у меня 2-ой. Я изменил в начале...

942
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
20.01.2025, 17:51
Студворк — интернет-сервис помощи студентам
CoderHuligan, sfx архива будет достаточно, не нужен установщик
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
21.01.2025, 19:40  [ТС]
сегодня вот это было самое муторное, и досе оно мне не нравится, но зато работает:
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
        ///------------------------------------|
        /// Клик мыши в индексы массива.       |
        ///------------------------------------:
        sf::Vector2u getMousePos2View()
        {
            ///--------------------------------|
            /// Размер объектива камеры.       |
            ///--------------------------------:
            const sf::Vector2f&  v = ConfigRender::p->getView_ms().getSize();
 
            ///--------------------------------|
            /// Смещение от глобального центра.|
            ///--------------------------------:
            const sf::Vector2f&  p = ConfigRender::p->getView_ms().getCenter();
 
            ///--------------------------------|
            /// Координаты окна.               |
            ///--------------------------------:
            sf::Vector2i mouse_pos = sf::Mouse::getPosition(window);
 
            ///--------------------------------|
            /// Поправка на четность.          |
            ///--------------------------------:
            const sf::Vector2f popr(textrSizeY * (cfg.W%2) / 2,
                                    textrSizeY * (cfg.H%2) / 2);
 
            ///--------------------------------|
            /// По правилу подобия.            |
            ///--------------------------------:
            const int Ax  = mouse_pos.x * v.x / window.getSize().x + p.x;
            const int Ay  = mouse_pos.y * v.y / window.getSize().y + p.y;
 
            ///--------------------------------|
            /// Центрируем.                    |
            ///--------------------------------:
            const int A2x = Ax + popr.x - v.x / 2;
            const int A2y = Ay + popr.y - v.y / 2;
 
            ///--------------------------------|
            /// Получаем индексы.              |
            ///--------------------------------:
            mouse_pos.x   = A2x / textrSizeY;
            mouse_pos.y   = A2y / textrSizeY;
 
            ///--------------------------------|
            /// Возвращаем уничтоженный индекс.|
            ///--------------------------------:
            mouse_pos.x += A2x > 0 ? 1 : 0;
            mouse_pos.y += A2y > 0 ? 1 : 0;
 
            ///--------------------------------|
            /// Приводим к индексам массива.   |
            ///--------------------------------:
            return { (unsigned)(mouse_pos.x + (cfg.W)  / 2 - 1),
                     (unsigned)(mouse_pos.y + (cfg.H)  / 2 - 1) };
        }
теперь минное поле может летать по окну с зумом не теряя прицел на индексы этого поля...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
21.01.2025, 19:44
XLAT, ты решил на SFML сделать? Или одновременно делаешь?
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
21.01.2025, 19:55  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
wxProject.zip
вчера я помедитировал над этим шаблоном.

тебе зачет - всё отлично - вопросов нет.

флажки уже есть.

надо сверстать - добавить окошки для выкриков судьи + [выход+новая_игра] + ...

морганий на ресайзинге и тп нет.(добавлял через формбилдер - формбилдер рулит)

первый прожект мне C::B по дефолту сгенерил...

Цитата Сообщение от Royal_X Посмотреть сообщение
ты решил на SFML сделать?
да взял свой местный шаблон и хотел, как ты любишь за полчаса,
но потом глянул на код и понял что если я такой его покажу,
то Король от страха помрёт сразу,
+ оказались подзадачи вроде выше не такие уж и простые,
но тоже его(sfml прожект) пора верстать.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
21.01.2025, 20:01
А я хочу реализовать систему сообщений между объектами. Допустим объект одного типа вызывает объект такого же типа, а тот в свою очередь вызывает объект того же самого типа... То есть получается рекурсия, что может привести к краху. В этом случае юзают коорутины. Но мне надо пока что-то попроще.. Вот для этого нужна полноценная система обмена сообщениями.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
22.01.2025, 01:56
Цитата Сообщение от XLAT Посмотреть сообщение
формбилдер рулит
Согласен. wxFormBuilder генерирует чистый код и он не мусорит твой код. Он создает классы с виртуальными функциями, от которых можно наследовать. А вот встроенный в C::B плагин wxSmith, мало того, что он корявый, особенно на мониторах высокого разрешения и давно не обновлялся, так он генерирует код прямо в твой код, всё захламляя.

Добавлено через 5 часов 35 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
Поигрался немного с SFML.
Удалил SFML. Уж очень простенький.
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,026
22.01.2025, 02:32
Цитата Сообщение от Royal_X Посмотреть сообщение
ну рассчитал, а как потом определить, ориентироваться на ширину или высоту? Имею в виду, я так и делаю ручками. Получаю текущий размер - т.е. размер после события изменения окна. И вот прописываю новую высоту, с учетом текущей ширины и пропорции. Устанавливаю новый размер. И вот так работает, если юзер меняет размер, таща окно с боку или с угла. Но вот когда юзер тянет с низу, т.е. когда меняется высота, то данный код есесена не работает. Могу сделать и наоборот. Будет работать, когда тянем с низу или с угла, но не с боку.
Проблема в том, что мне одно событие не устраивает. Нужно точно знать, каким образом юзер тянет окно.
Допустим, у нас должны быть пропорции 4 х 3 (ширина х высота). При изменении размеров окна считаешь, в каком отношении у нас эти размеры в данный момент получаются. Исходя из этого рисуешь черные края там, где нужно.
Или я не понял вопроса?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
22.01.2025, 03:02
Цитата Сообщение от gunslinger Посмотреть сообщение
Или я не понял вопроса?
ты не понял

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

Речь шла о сохранении пропорции главного окна. Т.е. когда юзер тянет окно с одной стороны, то окно меняет размер, сохраняя пропорции. Чтобы реализовать это, недостаточно одного события изменения размера. Вот, на винапи можно узнать, с какой стороны юзер тянет окно (WMSZ_BOTTOM, WMSZ_BOTTOMLEFT, WMSZ_BOTTOMRIGHT, WMSZ_LEFT, WMSZ_RIGHT, WMSZ_TOP, WMSZ_TOPLEFT, WMSZ_TOPRIGHT), что решает данную проблему.
Но у wxWidgets этого нет. И у других фреймворках тоже не будет. Поэтому никакой фреймворк в подметки не годится нативному апи.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
22.01.2025, 05:24  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Или я не понял вопроса?
когда я ему дал правильный ответ, то Royal_X сказал, что не хватает флажков))
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,026
22.01.2025, 05:27
Следующий код (в билдере) работает, но подглючивает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const int mult = 1e5;
const double asp = 0.75;
bool w = 0, h = 0;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight,
          bool &Resize)
{
  Tag = Width * mult + Height;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
  w = (Width != Tag / mult);
  h = (Height != Tag % mult);
 
  if (w)
    Height = Width * asp;
  else if (h)
    Width = Height / asp;
}
Видимо нужно нормально отслеживать изменения размеров, но не могу пока придумать адекватную реализацию.

ехе-файл в архиве прилагается.
Вложения
Тип файла: zip asp.zip (1.35 Мб, 3 просмотров)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
22.01.2025, 11:35
Цитата Сообщение от gunslinger Посмотреть сообщение
но подглючивает
ну вот и у меня на wxwidgets не получилось это сделать. Я тоже пытался понять, с какой стороны юзер тянет окно, на основании изменения размера. Но получалось с глюками.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,211
22.01.2025, 14:42

Ни когда не играл ни в какой сапёр,
и знать не знаю как и для чего это делают.
Книжка - мусор 2011года.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
22.01.2025, 18:27
Цитата Сообщение от Наталья8 Посмотреть сообщение
Ни когда не играл ни в какой сапёр,
и знать не знаю как и для чего это делают.
Я уже всё, закрыл страницу с сапёром. Это хлат и хулиган сапёрничают. А вот у меня сейчас появились новые интересные идеи. Скоро вы о них узнаете. Единственное, пока не определился, делать на wxWidgets или Qt...
Но т.к. в реальной жизни я занимаюсь программирование втайне от всех и только в свободное время, то разработка идет медленно. Должен заниматься основными делами.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
22.01.2025, 18:29
Цитата Сообщение от Royal_X Посмотреть сообщение
Это хлат и хулиган сапёрничают
А мы никуда не спешим))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
23.01.2025, 00:27
Цитата Сообщение от Royal_X Посмотреть сообщение
у меня сейчас появились новые интересные идеи
Хочу сделать хороший ascii генератор. Положил сегодня начало. Сейчас работает только на 10 символах .,:;ox%#@. Но в планах добавить еще.
3
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,211
23.01.2025, 01:57
final_file.mp4
Динамично... Так...
Было бы жалко, да ладно. Я всё сам на половину спёр.
Немножко вспомню SFML...
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
23.01.2025, 07:45
Цитата Сообщение от Наталья8 Посмотреть сообщение
Динамично... Так...
Я бы сказал, даже эпично)).
0
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
23.01.2025, 09:51
Royal_X, зачет
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
23.01.2025, 10:35  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Хочу сделать хороший ascii генератор
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/// [sources:utf-8]
///----------------------------------------------------------------------------|
/// MSYS GCC 9.2
/// MSVC 2010 [Use Unicode Character Set]
#define  MSVC
///----------------------------------------------------------------------------:
 
 
///--------------------------------|
/// Конфиг.                        |
///--------------------------------:
const wchar_t* filename = L"1p.jpg";
///--------------------------------.
 
 
#include <windows.h>
#include <gdiplus.h>
 
namespace gdi = Gdiplus;
 
#ifdef   MSVC
    #pragma comment(lib, "Gdiplus.lib")
#else
    #define UNICODE
#endif //MSVC
 
 
///----------------------------------------------------------------------------|
/// Gdiplus инициализатор.
///----------------------------------------------------------------------------:
struct  GDIPLUS
{       GDIPLUS(){   gdi::GdiplusStartup (&gdiToken, &gdiInput, NULL); }
       ~GDIPLUS(){   gdi::GdiplusShutdown( gdiToken)                 ; }
 
    ULONG_PTR                gdiToken;
    gdi::GdiplusStartupInput gdiInput;
};
 
 
///----------------------------------------------------------------------------|
/// Получение и хранение основных дескрипторов.
///----------------------------------------------------------------------------:
struct  ConWindow
{       ConWindow()
        {   hdc = GetDC     (GetConsoleWindow());
            set_font_console(                  );
            SetConsoleTitleW(L"Bitmap To Text" );
            system          ( "mode 80, 127"   );
        }
 
    HDC hdc;
 
    ///-------------------|
    /// Font магия...     |
    ///-------------------:
    void set_font_console()
    {   CONSOLE_FONT_INFOEX cfi;
                            cfi.cbSize       = sizeof(cfi);
                            cfi.nFont        =           0;
                            cfi.dwFontSize.X =           5;
                            cfi.dwFontSize.Y =           5;
                            cfi.FontFamily   = FF_DONTCARE;
                            cfi.FontWeight   = FW_NORMAL  ;
 
        wcscpy_s(cfi.FaceName, L"Lucida Console");
        SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    }
 
}WIN;
 
 
///----------------------------------------------------------------------------|
/// Show bitmap.
///----------------------------------------------------------------------------:
struct  ShowImg
{       ShowImg(){ work(); }
 
private:
    void work()
    {   gdi::Graphics g(WIN.hdc );
        gdi::Bitmap   b(filename);
        g.DrawImage( &b, 170, 0, b.GetWidth(), b.GetHeight() );
    }
};
 
 
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
std::ostream& operator<<(std::ostream& o, const std::vector<std::string>& m)
{   for(auto i = m.cbegin (), E = m.cend(); i != E; ++i)
             o << i->c_str() << '\n';
             o               << '\n';
    return   o;
}
 
 
///----------------------------------------------------------------------------|
/// Convert bitmap to text.
///----------------------------------------------------------------------------:
struct  Convert
{       Convert(){ work(); }
 
private:
    void work()
    {
        ///---------------------|
        /// Подготовка.         |
        ///---------------------:
        gdi::Bitmap         bitmap  (filename);
        const unsigned& W = bitmap.GetWidth ();
        const unsigned& H = bitmap.GetHeight();
 
        std::vector<std::string> char_pixels(H, std::string(W, ' '));
 
        const std::string PEN(" .,:;ox%#@");
        const unsigned    PEN_INTERVALCHAR = 255 / (PEN.size() - 1);
 
        ///---------------------|
        /// Конверт.            |
        ///---------------------:
        for    (unsigned y = 0; y < H; y++)
        {   for(unsigned x = 0; x < W; x++)
            {
                const unsigned GRAY = greyScaleColor(bitmap, x, y);
                char_pixels[y][x]   = PEN[GRAY / PEN_INTERVALCHAR];
            }
        }
 
        ///---------------------|
        /// Вывод реза.         |
        ///---------------------:
        std::cout << char_pixels;
 
        auto file = std::ofstream(L"out.txt");
             file << char_pixels;
    }
 
    gdi::Status stat;
 
    unsigned greyScaleColor(gdi::Bitmap& b, const unsigned x,
                                            const unsigned y)
    {   gdi::Color        color ;
        b.GetPixel(x, y, &color);
        return  (unsigned(color.GetR())
                       +  color.GetG()
                       +  color.GetB()) / 3;
    }
};
 
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{   GDIPLUS      _ready;
 
    ///----------------|
    /// Convert.       |
    ///----------------:
    {   Convert convert;
    }
 
    ///----------------|
    /// Show bitmap.   |
    ///----------------:
    {   ShowImg    show;
    }
 
    std::cin.get();
}
https://www.cyberforum.ru/post16492396.html

Цитата Сообщение от Royal_X Посмотреть сообщение
Сейчас работает только на 10 символах
любое(<257) кол-во символов вбивается в
C++
118
const std::string PEN(" .,:;ox%#@");
которые будут интерпретировать градации серого от темного к светлому.
2
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,393
23.01.2025, 11:06
XLAT, у меня будет с хорошим гуем
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2025, 11:06

Решение матричных игр. Есть у кого такая программа написанная уже...
Требуется программа по решению матричных игр... С выбором размера матрицы и выдачей решения... Может кто смогёт такую сбатцать?

Запуск приложений(старых игр) в оконном режиме
День добрый, подскажите, хотелось бы реализовать свое желание запуска старых игр windo`вых(типа StarCraft) в оконном режиме, с чего начать,...

Алгоритм календаря игр (например в футболе)
необходимо составить календарь футбольных матчей, допустим есть 6 команд char *teams = {&quot;TEAM A&quot;,&quot;TEAM B&quot;,&quot;TEAM...

Движок для игр
Всем привет!!!, хотел узнать возможно ли создать движок на C++ чтобы экспортировать модели из 3ds max а после в самом движке можно было...

Выбор IDE для создания 2D игр
Здравствуйте. Задача сделать пака 2ух – мерные драчки загружая в проект анимацию-как удар(ы) и реакция на удар...(лучше всего секвенцию...


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

Или воспользуйтесь поиском по форуму:
420
Закрытая тема Создать тему
Новые блоги и статьи
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru