Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3

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

08.01.2025, 12:45. Показов 48034. Ответов 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
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
24.02.2025, 23:47
Студворк — интернет-сервис помощи студентам
gunslinger, сможешь нарисовать фрактал? Кто-нибудь знает, как рендерят такие красивые фракталы? (множество Мандельброта)
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
25.02.2025, 00:18
Я сам вряд ли (скорей всего; хотя особо и не пытался никогда, только что-то попроще). Но есть чужой код (фрактал Жулиа):
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    PaintBox1->Canvas->FillRect(PaintBox1->Canvas->ClipRect);
 
        struct Complex // Обьявляем структрура для хранения комплексных чисел
    {
        long double real; // Действительная часть
        long double image; // Мнимая часть
    };
 
    const int iteration = 500; // Обьявляем и инициализируем константу, которая хранит количество итераций
    const int max = 32; // Обьявляем и инициализируем константу, которая хранит максимальное значение,
    // Которое не должно превосходить сумма квадратов действительной и мнимой части комплексного числа
 
    Complex zComplex; // Обьявляем обьекты структуры Complex
    Complex tempComplex; // Которые будут хранить
    Complex cComplex; // Комплексные числа
 
    int valueX; // Координаты по Ох
    int valueY; // Координаты по Оу
    int counter; // Счетчик
 
    int lengthX; // Длина поля по Ох
    int lengthY; // Длина поля по Оу
 
    TColor color; // Цвета для закрашивания пикселей
    TColor secondColor; // Для RGB формата
    TColor thirdColor;
 
    lengthX = PaintBox1->Width / 2; // Считываем половину длины поля по Ох
    lengthY = PaintBox1->Height / 2; // Считываем половину длины поля по Оу
 
    for (valueY = -lengthY; valueY < lengthY; valueY++)
    {
        for (valueX = -lengthX; valueX < lengthX; valueX++)
        {
 
            counter = 0; // Обнуляем счетчик
            zComplex.real = valueX * 0.005; // Инициализируем действительную
            zComplex.image = valueY * 0.005; // И мнимую часть комплексного числа
            cComplex.real = -0.70176; // Инициализируем действительную и
            cComplex.image = -0.3842; // Мнимую часть комплексного числа
 
            // Считаем фрактал Жулиа пока сумма квадратов действительной и мнимой части
            // Комплексного числа меньше констанкты max и пока значение счетчика
            // counter меньше чем число итераций
            while (std::pow(zComplex.real, 2) + std::pow(zComplex.image, 2) < max && counter < iteration)
            {
                tempComplex = zComplex; // Копируем комплексное число во временную структуру
                // Считаем новые значения действительной части комплексного числа
                zComplex.real = std::pow(tempComplex.real, 2) - std::pow(tempComplex.image, 2) + cComplex.real;
                // Считаем новые значения мнимой части комплексного числа
                zComplex.image = 2 * tempComplex.real * tempComplex.image + cComplex.image;
                counter++; // Инкрементируем значение счетчика
            }
 
            // Если значение счетчика меньше, чем число итераций
            if (counter < iteration)
            {
                color = TColor(counter * 6 % 255); // Определяем первый цвет
                secondColor = TColor(counter * 9 % 255); // Определяем второй цвет
                thirdColor = TColor(counter * 11 % 255); // Определяем третий цвет
                // Заполняем пиксель сформируемым цветом
                PaintBox1->Canvas->Pixels[lengthX + valueX*(1+0*cos(M_PI/2))][lengthY + valueY*(1+0*sin(M_PI/2))] = TColor(RGB(color, secondColor, thirdColor));
                         }
        }
    }
}
//---------------------------------------------------------------------------


Делал только такое (либо чем-то "похожее" по принципу рисования вроде "спиральных квадратов" Компьютерная графика):
Фрактальные рисунки
Простой морфинг

Примеры кода (множество Мандельброта): https://ru.wikibooks.org/wiki/... ндельброта
Программа (Julia fractal generator): https://web.archive.org/web/20... -generator
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.02.2025, 09:17
Цитата Сообщение от Royal_X Посмотреть сообщение
но вот ни я, ни, наверное, Хулиган, не станем что-то писать на sfml, особенно старой версии.
Я на sfml смотрел только по диагонали. Знаю, что это просто объектная и расширенная надстройка над sdl (вроде бы как). Писать на win api, как я сейчас делаю, это всегда напряг, хотя и возможностей получаешь больше. По идее надо какую-то либу графическую юзать, чтобы в кайф было кодить, да и быстрее. Или движок какой..

Добавлено через 14 секунд
Вчера болел, ни чем не мог заниматься.
Цитата Сообщение от Royal_X Посмотреть сообщение
Короче, вся суть была в том, что если использовать ООП по максимуму, то потом, если захочется что-то менять или оптимизировать код, то весь код придется менять, потому что ООП работает по принципу домино.
Я тоже много статей читал по данной теме. Тема очень серьезная и обширная. По моему, в ООП есть своя сила и своя слабость. И не для всех случаев оно подходит. Тотальное ООП настолько же вредит, как и тотальная функциональщина.
Это - крайности. Нечто среднее нужно..
Сила ООП в том, что оно разгружает global пространство от львиной доли сущностей. Вместо сотен имен функций там всего лишь десятки имен объектов. И это хорошо. А дальше мы получаем вместо чистых функций грязные методы.. Грязная функция - функция, которая зависит от контекста. Сам же Страус об этом писал, критикуя обычный необъектный подход. Такая функция видит нечто вне себя и может это менять . И чтобы использовать её где-то еще, приходиться тащить и её окружение.. Это - плохо, - очень плохо.
А если у нас все функции распиханы по объектам, то они уже зависят от контекста своего объекта. Они видят нечто внутри объекта. Более того неявно получают указатель this на конкретный объект.. Тут приходится тащить с собой весь объект. Придумали дружественные классы и функции чтобы смягчить проблему, но это костыльное решение..
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
25.02.2025, 10:16
Немного не по теме, но скажу. Пришлось в геогебре код писать.
Синтаксис там весьма своеобразный. Параметры функций надо указывать явно (что логично, но не очевидно), но иногда они сами подставляются, иногда нет. Проверка синтаксиса может глючить - один и тот же код иногда ошибки выдает, иногда нет.
Бывает, что все подвисает. Короче, не пишите в геогебре (если есть выбор). В билдере все в разы проще (хотя так наверно и должно быть).

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
  // основной цикл
  for (n = 1; n <= n_max * coef; n++)
  {
    // значения радиуса и угла
    double tmp_r = r(c, n), tmp_t = t(n) + eps;
 
    // координаты точки
    x = x0 + tmp_r * cos(tmp_t);
    y = y0 - tmp_r * sin(tmp_t);
 
    // рисуем линии (magic numbers!!!)
    Canvas->Pen->Color = clGreen;
//  int val = r(c, n_max) / 2;
    const int k = 3;
    int u[k] = {n + 55, n + 89, n + 144};
    for (int i = 0; i < k; i++)
      if ((i < k - 1 && n >= 100 || i == k - 1) && u[i] <= n_max * coef)  // && abs(x - x0) <= val && abs(y - y0) <= val)
      {
        Canvas->MoveTo(x0 + r(c, u[i]) * cos(t(u[i]) + eps), y0 - r(c, u[i]) * sin(t(u[i]) + eps));
        Canvas->LineTo(x, y);
      }
 
    int d1 = SE_d1->Text.ToIntDef(D1), d2 = SE_d2->Text.ToIntDef(D2);
    double mult, tmp;  // множитель и радиус кружочков
    Canvas->Pen->Color = clBlack;
    if (n <= n_max)  // && abs(x - x0) <= val / coef && abs(y - y0) <= val / coef)
    {
      mult = tmp_r / r(c, n_max);
      mult *= (mult <= 2. / 3 ? 2. / 3 : 1);
      tmp = d1 - d2 * mult;
      Canvas->Ellipse(x - tmp, y - tmp, x + tmp, y + tmp);  // рисуем кружочки
      //Canvas->TextOutW(x, y, n);
    }
  }
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.02.2025, 10:35
Вот пример.
Что лучше:
1.
C++
1
2
3
int add1(int a, int b){
  return a + b;
}
или:
2.
C++
1
2
3
4
struct st{int a, b;};
int add2(struct st){
  return st.a + st.b;
}
Функция add2() привязана к своему типу st, и не может работать с другими. Первая функция может обслуживать любой тип с однотипными полями:
C++
1
с=fn1(st.a, st.b);//вместо st может быть другой тип
Добавлено через 12 минут
Один из законов Мерфи гласит:
"Создайте систему, которой сможет пользоваться даже дурак, и только дурак будет ей пользоваться".
Это к слову о том в каком направлении развивается мозг.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 11:00
gunslinger, в браузере всё глючит. Я пользуюсь десктопной версией для винды: GeoGebra Classic 6. Нормально работает. Но у меня так же есть Maple, Wolfram Mathematica, Maxima.

Добавлено через 3 минуты
CoderHuligan, там ещё можно шаблон написать, лучше чем структура
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
25.02.2025, 11:09
Royal_X, сейчас вроде в браузере геогебра не зависает. Новые десктопные версии геогебры под вин 7 не работают.
Maple у меня был, но давно не пользовался.

Поменял параметры в коде из поста №842:
C++
54
55
56
57
58
59
60
61
62
63
64
            zComplex.real = valueX * 0.00005; // Инициализируем действительную
            zComplex.image = valueY * 0.00005; // И мнимую часть комплексного числа
// 1
            cComplex.real = -0.56267837374; // Инициализируем действительную и
            cComplex.image = 0.65679461735; // Мнимую часть комплексного числа
// 2
//          cComplex.real = -0.743643900055; // Инициализируем действительную и
//          cComplex.image = 0.131825890901; // Мнимую часть комплексного числа
// 3
//          cComplex.real = -0.70176; // Инициализируем действительную и
//          cComplex.image = -0.3842; // Мнимую часть комплексного числа
Результаты (1, 2, 3):


1
25.02.2025, 11:09

Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
как древние люди сделали первый молоток, если для этого нужен молоток
У них мозг был больше. Так ученые утверждают.
Так что не удивительно. Это не в айфон одним пальцем тыкать.

0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
25.02.2025, 11:29
Короче, можно экспериментировать до бесконечности (такое мне понравилось):
C++
54
55
56
57
            zComplex.real = valueX * 0.00001; // Инициализируем действительную
            zComplex.image = valueY * 0.00001; // И мнимую часть комплексного числа
            cComplex.real = -0.56267837374; // Инициализируем действительную и
            cComplex.image = 0.65679461735; // Мнимую часть комплексного числа
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.02.2025, 11:44
Цитата Сообщение от Royal_X Посмотреть сообщение
там ещё можно шаблон написать
Можно. Но это как бы тупой дубляж в итоговом коде. Не красиво. Не будем раздражать XLAT, и продолжать тему.) Хотя в некоторых случаях шаблоны оправданны.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 13:56
Цитата Сообщение от CoderHuligan Посмотреть сообщение
C++
1
2
3
4
struct st{int a, b;};
int add2(struct st){
  return st.a + st.b;
}
я только что заметил, что это даже нерабочий код. Нужно так писать:
C++
1
2
3
4
struct st { int a, b; };
int add2(st x) {
    return x.a + x.b;
}
А вообще, нужно передавать структуру по ссылке.
C++
1
2
3
4
struct st { int a, b; };
int add2(st& x) {
    return x.a + x.b;
}
Также, я бы сделал функцию членом структуры и переименовал название функции на более осмысленное.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
struct st 
{ 
    int a{}, b{};
    int getSum() { return a + b; }
};
 
int main()
{
    st s{ 3, 4 };
    std::cout << s.getSum() << std::endl;
}
1
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
25.02.2025, 15:18  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
C++
26
27
28
29
30
31
32
    ///--------------------------------------|
    /// Берём пиксели с пазла и укладываем.  |
    ///--------------------------------------:
    void init_4Sides()
    {
        /// TODO ...
    }
закрываем ТОДО:
["images.h"]
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
///-----------------------------------------------------------------------------
/// Прототип класса для задачи.
///------------------------------------------------------------------ TaskImage:
struct  TaskImage : myImage
{
 
...
 
private:
    ///--------------------------------------|
    /// 4 дампа с пикселями.                 |
    ///--------------------------------------:
    std::array<Mat2dPixel, 4>         _4Sides;
 
    inline static unsigned width{2};
 
    ///--------------------------------------|
    /// Берём пиксели с пазла и укладываем.  |
    ///--------------------------------------:
    static void init_4Sides(std::array<Mat2dPixel, 4>& _4S,
                            const sf::Image&           img)
    {
        const sf::Vector2u SZ = img.getSize();
 
        ///---------------|
        /// eSIDES::UP    |
        ///---------------:
        {
            Mat2dPixel& mat = _4S[eSIDES::UP];
 
            for    (unsigned y = 0; y < width; ++y)
            {
                mat.emplace_back(std::vector<sf::Color>());
                mat.back().reserve(SZ.x);
 
                for(unsigned x = 0; x < SZ.x ; ++x)
                {   mat.back().emplace_back(img.getPixel(x, y));
                }
            }
        }
 
        ///---------------|
        /// eSIDES::RIGHT |
        ///---------------:
        {
            Mat2dPixel& mat = _4S[eSIDES::RIGHT];
 
            for(unsigned x = SZ.x - 1, i = 0; i < width; --x, ++i)
            {
                mat.emplace_back(std::vector<sf::Color>());
                mat.back().reserve(SZ.y);
 
                for(unsigned y = 0; y < SZ.y ; ++y)
                {   mat.back().emplace_back(img.getPixel(x, y));
                }
            }
        }
 
        ///---------------|
        /// eSIDES::DOWN  |
        ///---------------:
        {
            Mat2dPixel& mat = _4S[eSIDES::DOWN];
 
            for(unsigned y = SZ.y - 1, i = 0; i < width; --y, ++i)
            {
                mat.emplace_back(std::vector<sf::Color>());
                mat.back().reserve(SZ.x);
 
                for(unsigned x = 0; x < SZ.x ; ++x)
                {   mat.back().emplace_back(img.getPixel(x, y));
                }
            }
        }
 
        ///---------------|
        /// eSIDES::LEFT  |
        ///---------------:
        {
            Mat2dPixel& mat = _4S[eSIDES::LEFT];
 
            for(unsigned x = 0; x < width; ++x)
            {
                mat.emplace_back(std::vector<sf::Color>());
                mat.back().reserve(SZ.y);
 
                for(unsigned y = 0; y < SZ.y ; ++y)
                {   mat.back().emplace_back(img.getPixel(x, y));
                }
            }
        }
    }
...
тестируем:
["images.h"]
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
...
 
    static void test_4Sides()
    {   std::cout << "Start::test_4Sides():\n";
 
        sf::Image img;
                  img.create(5, 8);
 
        ln(img.getSize())
 
        ///--------------------------------------|
        /// Заполняем красный в img змейкой.     |
        ///--------------------------------------:
        {
            unsigned char red = 0;
            for(unsigned  x = 0; x < img.getSize().x; ++x)
            {   img.setPixel(x, 0, {red++, 0, 0});
            }
 
            for(unsigned  y = 1; y < img.getSize().y; ++y)
            {   img.setPixel(img.getSize().x - 1, y, {red++, 0, 0});
            }
 
            for(unsigned  x = img.getSize().x - 2; x < img.getSize().x; --x)
            {   img.setPixel(x, img.getSize().y - 1, {red++, 0, 0});
            }
 
            for(unsigned  y = img.getSize().y - 2; y != 0; --y)
            {   img.setPixel( 0, y, {red++, 0, 0});
            }
        }
 
        ///--------------------------------------|
        /// Буфер для пикселей:                  |
        /// 4 матрицы толщиной width.            |
        ///--------------------------------------:
        std::array<Mat2dPixel, 4> _4STest;
 
        ///--------------------------------------|
        /// Кролик тестирования.                 |
        ///--------------------------------------:
        init_4Sides             ( _4STest, img );
 
        unsigned E{eSIDES::UP };
 
        ///--------------------------------------|
        /// Ручная, т.е. глазная верификация.    |
        ///--------------------------------------:
        /// Содержимое img.                      |
        ///--------------------------------------:
        for    (unsigned y = 0; y < img.getSize().y; ++y)
        {       std::cout << "  ";
            for(unsigned x = 0; x < img.getSize().x; ++x)
            {   std::cout << std::setw(3) << (int)img.getPixel(x, y).r;
            }   std::cout << '\n';
        }       std::cout << '\n';
 
        l(width)
 
        ///--------------------------------------|
        /// Содержимое буферов по сторонам img.  |
        ///--------------------------------------:
        for        (const auto& mat   : _4STest)
        {   std::cout << whatSIDE(eSIDES(E++)) << ":\n";
            for    (const auto& line  : mat    )
            {       std::cout << "  ";
                for(const auto& pixel : line   )
                {   std::cout << std::setw(3) << (int)pixel.r;
                }   std::cout << '\n';
            }       std::cout << '\n';
        }           std::cout << '\n';
 
        std::cout << "Finished::test_4Sides():\n";
    }
запускаем:
["main.cpp"]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
 
void tests()
{
/// myl::testfoo_getVSizeWH();
/// CastomFilesCargo ::test();
/// HeroTest         ::test();
/// TaskImage        ::test();
    TaskImage ::test_4Sides();
/// LoaderImages     ::test();
/// DrawImage        ::test();
 
/// std::unique_ptr<Run> run(new Run);
}
рез:
Code
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
LOGOVERSION: Test-demo::0.0.2
START ...
 
Start::test_4Sides():
img.getSize():
    WH: [5, 8]
 
    0  1  2  3  4
   21  0  0  0  5
   20  0  0  0  6
   19  0  0  0  7
   18  0  0  0  8
   17  0  0  0  9
   16  0  0  0 10
   15 14 13 12 11
 
width: 2
UP:
    0  1  2  3  4
   21  0  0  0  5
 
DOWN:
   15 14 13 12 11
   16  0  0  0 10
 
RIGHT:
    4  5  6  7  8  9 10 11
    3  0  0  0  0  0  0 12
 
LEFT:
    0 21 20 19 18 17 16 15
    1  0  0  0  0  0  0 14
 
 
Finished::test_4Sides():
 
FINISHED PROGRAMM!
надеюсь, из теста ясно что там происходит...

теперь у нас есть унифицированные буферы 4 сторон фрагмента пазла...
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 15:28
Цитата Сообщение от XLAT Посмотреть сообщение
надеюсь, из теста ясно что там происходит...
как понимаю, ты собираешься сравнивать не одну линию граничных пикселей, а несколько линий, поэтому ты создал функции для взятия граничных пикселей с произвольной шириной
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2025, 17:26
Цитата Сообщение от Royal_X Посмотреть сообщение
CoderHuligan, там ещё можно шаблон написать, лучше чем структура
А ещё можно написать на void* - лучше чем любые шаблоны.

Добавлено через 7 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вот пример.
Говнокодить можно в любой парадигме и ЯП.
РоялХ это хорошо доказал на примере goto, а ты с другой стороны.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 17:47
Цитата Сообщение от SmallEvil Посмотреть сообщение
доказал на примере goto
можешь и continue не использовать, ты же эксперт, не то, что я
а через год можешь и break не использовать
и так, по мере развития, отказывайся постепенно от фич языка

И, кстати, я показал выше один из немногих примеров, где использование goto оправдано, а использование других методов является говнокодом. Но если не понял, ну что ж поделать, бывает. Пиши, как хочешь.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.02.2025, 18:21
Цитата Сообщение от SmallEvil Посмотреть сообщение
Говнокодить можно в любой парадигме и ЯП.
Естественно можно.
Цитата Сообщение от SmallEvil Посмотреть сообщение
на примере goto, а ты с другой стороны.
Можно и goto использовать не по назначению. А можно и ООП сделать хуже чем неумеренное применение goto.
Почему корпорации потихоньку переходят на свои языки? Сложно поддерживать существующую кодовую базу. Чем больше фич в языке, тем сложнее за ними всеми уследить. В голове надо удерживать всю иерархию наследования и пр. и т.п. Это современный goto, современная лапша.
Я вот сейчас код отлаживал и по невнимательности пропустил после объявления функции точку с запятой. Плюсовый компилятор мне вывалил простыню ошибок, причем в стандартной библиотеке. Я целый час убил, чтобы понять что произошло,пока сам не увидел этот пропуск. Сишный компиль бы сразу бы указал, что пропущена точка с запятой, и дело в шляпе. А я трахался целый час))

[siz
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 19:10
Цитата Сообщение от CoderHuligan Посмотреть сообщение
вот сейчас код отлаживал и по невнимательности пропустил после объявления функции точку с запятой. Плюсовый компилятор мне вывалил простыню ошибок, причем в стандартной библиотеке. Я целый час убил, чтобы понять что произошло,пока сам не увидел этот пропуск. Сишный компиль бы сразу бы указал, что пропущена точка с запятой, и дело в шляпе. А я трахался целый час))
Вообще-то, нормальная ide, а если быть точнее, её статический анализ - линтер - должен еще до компиляции сообщить о таких тупых вещах.

Например, как видно на скриншоте, линтер предупреждает, что нужно поставить точку с запятой. Более того, предлагает фикс - нужно нажать всего лишь на лампочку и он сам поставит эту точку с запятой.

0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.02.2025, 19:42
Цитата Сообщение от Royal_X Посмотреть сообщение
нормальная ide
Я в code blocks сейчас работаю. Может VS и подсказала бы, не знаю. Объявление было в самом конце h файла, и компиль ничего внятного кроме простыни невнятных ошибок не сообщил.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
25.02.2025, 20:45
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Я в code blocks сейчас работаю
в C::B дефолтно нет статического анализа кода. Даже подсказки при вводе кода работают ненормально.
Например, если написать
C++
1
std::string s = "hello";
и вот если будешь писать s = s. и как поставишь точку, появятся подсказки. Однако, если изначально написать
C++
1
std::string s{"hello"};
то при написании s = s. никакие подсказки не появятся.

Можно улучшить редактор если отключить старинный CodeCompletion плагин и вместо него использовать плагин clangd-client. Но для этого нужно установить еще mingw-w64-ucrt-x86_64-clang-tools-extra, например, если используешь mingw-w64-ucrt-x86_64-gcc, потому что в настройках плагина нужно выбрать путь к usr\bin\cland.exe
1
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
25.02.2025, 20:50
Цитата Сообщение от Royal_X Посмотреть сообщение
А вообще, нужно передавать структуру по ссылке.
В данном случае не нужно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2025, 20:50

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
860
Закрытая тема Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru