Задать вопрос
  • Как работают с git diff-ами 3d-ассетов в GameDev?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Никак, разруливают на этапе планирования - не должны два художника рисовать одну текстуру одновременно.
    Ответ написан
    7 комментариев
  • Какая модель ИИ без использования нейросетей лучше подходит для имитации максимально правдоподобного человеческого поведения (NPC)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Есть текущее состояние (чем занимаюсь), текущая цель (что сейчас буду делать после того, как завершу текущее занятие и что для неё требуется: условия), энергия (сытость, еда, вода, тепло), угрозы (здоровью: голод, звери, люди; энергии: добыча в ближайшей зоне), обозреваемый периметр (визуальная инфа, акустическая инфа, определение состояния окружения: угрозы, энергии), скорость перемещения, опыт (бд/дерево принятия решений на основе всех перечисленных действий), динамическая таблица приоритетов (что делаем сейчас, а что позже, и смена приоритетов при смене внешних факторов), "жесткое дерево" путей возможного развития (где ничего нельзя менять, кроме выбора направления на разветвлении).

    UPD:
    скорость реакции,

    периоды физиологических процессов (время сытости, сброс отходов, потеря влаги, частота дыхания, частота сердцебиения, давление),

    таблица потерь/восстановления энергий при различных действиях (сон, еда, вода),

    Может ещё что...

    -----
    "бд/дерево принятия решений на основе всех перечисленных действий" - коллаборативная фильтрация должна подойти.
    Ответ написан
    21 комментарий
  • Почему невозможно обратиться к private?

    myjcom
    @myjcom Куратор тега C++
    Потому что нельзя использовать то что не объявлено
    class vect;
    class work
    {
    public:
      void work_vect(vect& ob);
    };
    
    // ... vect definition
    friend void work::work_vect(vect& ob); 
    // ...


    кроме того

    work B();
    это объявление функции,
    скобки здесь лишние.
    Ответ написан
    Комментировать
  • Как отключить автоматическую отметку решениями?

    Никак.
    Тостер - коллективный ресурс, поэтому участие в отметке решением могут принимать все.
    Миссия Тостера - создание базы знаний, в первую очередь и только потом решение конкретных проблем конкретных людей. Поэтому отметки сообществом имеют приоритет* над отметками задающих вопрос.

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

    * концептуально, не помню как технически это всё организовано.
    Ответ написан
    1 комментарий
  • Почему возникает undefined reference?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Реализация методов шаблонных классов должна быть в заголовочном файле.
    Ответ написан
    1 комментарий
  • Как сгруппировать несколько переменных внутри скобок?

    myjcom
    @myjcom Куратор тега C++
    #include <sstream>
    // ...
    
    ostringstream cmd;
    cmd << "copy /Y " << sourcePath << "*.mp3" << " " << endPath << "*.mp3";
    system(cmd.str().c_str());
    Ответ написан
    Комментировать
  • Какие есть способы хранить данные локально?

    Есть встраиваемые базы данных. Самая популярная из них SqLite. Хранит данные локально, в указанном файле. Если данные у вас меняются, то лучше использовать ее, а не костылить самому на файлах.
    Ответ написан
    Комментировать
  • Чем пропарсить формат fb2?

    @d-stream
    Готовые решения - не подаю, но...
    Сложно в два шага пользования поисковиком попасть на официальное описание формата?
    Совершу эту магию бесплатно: http://fictionbook.org/index.php/Описание_Fictionbook
    Ответ написан
    Комментировать
  • Можете помочь решить небольшую задачу на С++?

    edward_freedom
    @edward_freedom
    bool DigitOdd(int number) {
    	auto result = true;
    	while (number > 0)
    	{
    		int digit = number % 10;
    		number /= 10;
    		if (digit % 2 == 0) {
    			result = false;
    			break;
    		}
    	}
    	return result;
    }


    Не вырабатывай у себя привычку, переменные одной буквой называть, давай им нормальные имена
    Ответ написан
    2 комментария
  • Какие распространенные Pet-проекты существуют для C++?

    maaGames
    @maaGames
    Погроммирую программы
    На С++ можно написать практически всё, что захочется. Например, интерпретатор скриптов условного Python.
    Ответ написан
    Комментировать
  • Чем отличается С и С++?

    myjcom
    @myjcom Куратор тега C++
    Простыми не получится
    Как минимум https://isocpp.org/wiki/faq/c#c-diffs
    И далее ссылки по тексту.

    Помимо поддержки ООП в С++ реализована поддержка обобщенного программирования, которое "придумал" Алекс Степанов, и воплотил свои идеи в виде STL, которая в свою очередь стала частью стандарта языка.
    С++ это гораздо больше, чем Си с классами.

    Возьми книгу "Дизайн и эволюция С++" и почитай, раз тебе интересно.
    Ответ написан
    Комментировать
  • Как начать карьеру в gamedev?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    С детства увлекаюсь играми, имею большой игровой опыт.

    таких очень много

    Опыта работы нету.

    Таких еще больше.

    gamedev это очень большая область. Начните карьеру с того, что вы полноценно научитесь делать что-то полезное.
    Например умеете рисовать, создавать 3д модели, анимировать - ищете ваканции по дизайну для игр.

    Умеете программировать, пишете в 3д, пишете в системное программирование, умеете делать сложные сайты - ищете вакансии разработчиков клиента, сервера или сайта для игр.

    Другими словами, в геймдеве нужны те же люди, что и в финансах, рекламе, транспорте и так далее - программисты, тестировщики, дизайнеры, сисадмины.

    Вы собственно как состоявшийся специалист кто?
    Ответ написан
    6 комментариев
  • Как поправить вывод вектора структуры в файл?

    myjcom
    @myjcom Куратор тега C++
    void writeBinary(ostream& os, structBook const& book)
    {
      ostringstream ss;
      ss << book.bookId
         << book.bookName.size() << book.bookName
         << book.bookAuthorName.size() << book.bookAuthorName
         << book.bookAuthorSurname.size() << book.bookAuthorSurname
         << book.year << book.pages << book.onplace
         << book.genre.size() << book.genre
         << book.section.size() << book.section;
      os.write(reinterpret_cast<char*>(ss.str().size()), sizeof(decltype(ss.str().size())));
      os.write(ss.str().data(), ss.str().size());
    }
    
    // ...
    
    for(auto const& b : vecStructBook)
    {
      writeBinary(bookDatabase, b);
    }

    считывать наоборот.
    Ответ написан
    5 комментариев
  • В чём отличие между char* и char[]?

    @lorc
    В случае выделения на стеке или в глобальных переменных - разница очень большая. char* - это просто указатель. Как тут правильно сказали - у вас будет два указателя на один и тот же строковый литерал.

    char[] - создание массива на стеке. Соответственно, у вас там будут хранится не два указателя, а два массива. Вы сравниваете их и они очевидно не равны.

    Вот пример: https://ideone.com/pIhUvq. Как видите, в одном случае у нас 64-битный указатель, а в другом - массив.

    А вот в параметрах функции - действительно, большой разницы нет.
    Ответ написан
    Комментировать
  • В чём отличие между char* и char[]?

    32bit_me
    @32bit_me
    Программист, встраиваемые системы
    Разница в том, что в первом случае компилятор видит, что строковые литералы одинаковы, и генерирует только одну строку, и присваивает str1 и str2 указатели на неё. Во втором случае он не может так сделать, потому что массивы не константны, и в дальнейшем могут изменяться независимо. Поэтому указатели разные.
    Однако в общем случае поведение такого кода полностью зависит от реализации компилятора и от опций, поэтому лучше так не делать вообще. Clang пишет: array comparsion always evaluates to false.
    Ответ написан
    5 комментариев
  • VC++ 2010 не даёт описать переменную в середине блока - ограничение Express-версии?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Похоже на поведение старой-старой версии языка C. Однозначно могу сказать, что 2010 студия с переменными посреди блока работает нормально.
    Ответ написан
  • VC++ 2010 не даёт описать переменную в середине блока - ограничение Express-версии?

    Adamos
    @Adamos
    Возможность определять переменные в середине блока появилась в С стандарта 99.
    Visual Studio 2010 поддерживает только С 98. Независимо от редакции.
    Ответ написан
    Комментировать
  • Как написать функцию в с++,чтоб та возвращала массив строк в программу?

    myjcom
    @myjcom Куратор тега C++
    знаю,что прога корявая;)

    VS 2017 Windows 10
    Квест пройдешь

    #include<iostream>
    #include<fstream>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<iterator>
    #include<iomanip>
    #include<sstream>
    using namespace std;
    
    struct Book
    {
      string name;
      int year = 0;
      int circulation = 0;
    };
    
    istream& operator>>(istream& is, Book& book)
    {
      string line;
      getline(is, line);
    
      istringstream head(line);
      getline(head, book.name, ':');
      head >> book.year >> book.circulation;
      return is;
    }
    
    vector<Book> getBooksList(istream& source)
    {
      return{ istream_iterator<Book>{source}, {} };
    }
    
    // Пришел в библиотеку - дайте мне немного книг, любых.
    // А тебе говорят - сам возьми, вон там две полки - нижняя и верхняя. 
    // А да, забыли предупридить - ВЫХОД платный!
    enum class input_type : int {Console, File, None};
    input_type get_input()
    {
      if(!cin)
      {
        system(" ");
        cout << "\n\x1b[1;31mА вот и не угадал! Играй по правилам!\x1b[0m\n\n"
                "Правило первое - никаких правил ;)\n\n";
        cin.clear();
      }
      
      cout << "Жми откуда брать: \n [0] -- (консоль)\n [1] -- (файл)\n\n" 
              "[Ctrl + Z] -- (Извините ошибся дверью)\n\n$: ";
      int inp = 0;
      if(cin >> inp && inp == 0)
      {
        system(" "); 
        cout <<  "Вводи \x1b[1;31m [ Название : Год Тираж ]\n\n"
             <<  "Пример:"
             <<  "\t\x1b[0;40;36mЗолотой ключик, или Приключения Буратино : 1936 50000\n\n"
             <<  "\x1b[0mНе забудь \x1b[1;33mCtrl + Z\x1b[0m означает конец ввода.\n\n";
      }
      return static_cast<input_type>(inp);
    }
    
    // Не Аквафор
    vector<Book> filter(vector<Book> const& books, int from, int to)
    {
      vector<Book> filtered;
      copy_if(books.cbegin(), books.cend(), back_inserter(filtered), [=](auto const& b){
        return b.year >= from && b.year <= to;
      });
      
      return filtered;
    }
    
    // Что я прочитал за это лето
    void print_table(vector<Book> const& books)
    {
      auto max_width_elm = max_element(books.cbegin(), books.cend(), [](auto const& a, auto const& b){
        return a.name.size() < b.name.size();
      });
      
      if(max_width_elm == books.cend())
      {
        cout << "Ничего, бывает...\n";
        return;
      }
    
      size_t max_width = max_width_elm->name.size();
    
      // А какая у вас машина? - Зеленая O_o
      system(" ");
      cout << "\x1b[1;32m"
           << setw(8 + max_width) 
           << left     << "Название"
           << setw(12) << "Год"
           << setw(12) << "Тираж" << "\n"
           << "\x1b[0m";
      
      for(auto[name, year, circul] : books)
      {
        cout << setw(8 + max_width) 
             << left     << name
             << setw(12) << year
             << setw(12) << circul << "\n";
      }
    }
    
    enum class sort_field { Name, Year, Circul };
    auto sort_by = [](sort_field field, auto& container){
      sort(container.begin(), container.end(), [=](const auto& a, const auto& b){ 
        bool result = false;
        switch(field)
        {
        case sort_field::Year:
          result = a.year < b.year;
          break;
        case sort_field::Circul:
          result = a.circulation < b.circulation;
          break;
        default:
          result = a.name < b.name;
          break;
        }
        return result;
      });
    };
    
    int main()
    { 
      setlocale(LC_ALL, "");
    
      //типа файл
      const string test_data = "book10 : 2010 10000\n"
                               "book09 : 2009 9000\n" 
                               "book19 : 2019 19000\n"
                               "book03 : 2003 3000\n"
                               "book84 : 1984 84000\n"
                               "book42 : 2042 42000";
      istringstream is(test_data);
    
      vector<Book> books;
    
      input_type input = input_type::None;
    
      while(input == input_type::None)
      {
        input = get_input();
        switch(input)
        {
        case input_type::Console:
          books = getBooksList(cin);
          break;
        case input_type::File:
          books = getBooksList(is);
          break;
        default:
          system(" ");
          cout << "\n\x1b[1;33mВыбери 0 или 1 ЧеГо НеПоНяТнОгО?\x1b[0m \n";
          input = input_type::None;
          break;
        }
      }
      
      sort_by(sort_field::Year, books);
      
      print_table(filter(books, 2000, 2010));
     
      system("pause");
    }


    Помогите пожалуйста написать код функции (fun.....она уже сто раз написана,переписана,закомментирована)

    помогу написать код функции.
    заранее спасибо!!!)

    Я постарался

    #include<iostream> 
    #include<iomanip> 
    #include<fstream>
    #include<string>
    #include<Windows.h>
    using namespace std;
    
    struct book
    {
      string name;
      unsigned year;
      unsigned circulation;
    };
    
    int count_if(book* b, int sz, int from, int to)
    {
      int cn = 0;
      for(int i = 0; i < sz; ++i)
      {
        if(b[i].year >= from && b[i].year <= to)
        {
          ++cn;
        }
      }
      return cn;
    }
    
    book* get_books_list(book* arr, int n, int from, int to, int& out_sz)
    {
      out_sz = count_if(arr, n, from, to);
      if(out_sz == 0)
      {
        return nullptr;
      }
    
      book* array = new book[out_sz];
      int idx = 0;
    
      for(int i = 0; i < n; ++i)
      {
        if(arr[i].year >= from && arr[i].year <= to)
        {
          array[idx].name = arr[i].name;
          array[idx].year = arr[i].year;
          array[idx].circulation = arr[i].circulation;
          ++idx;
        }
      }
      return array;
    }
    
    int main()
    {
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
      
      string kng = "TextFile1.txt";
      int N;
      book *arr;
      int otkr;
      cout << "ВЫБЕРИТЕ СПОСОБ ВВОДА. 0 - С КЛАВИАТУРЫ, 1 - ИЗ ФАЙЛА  \n";
      cin >> otkr;
      if(otkr == 0)
      {
        cout << "введите размер массива \n";
        cin >> N;
        arr = new book[N];
        for(int i = 0; i < N; ++i)
        {
          cout << "Введите название книги\n";
          cin >> arr[i].name;
          cout << "Введите тираж \n";
          cin >> arr[i].circulation;
          cout << "Введите год издания \n";
          cin >> arr[i].year;
        }
    
        for(int i = 0; i < N; ++i)
        {
          cout << arr[i].name << "  " << arr[i].circulation << "  " << arr[i].year << endl;
        }
    
      }
      else
      {
        fstream knigi;
        knigi.open("TextFile1.txt");
        knigi >> N;
        arr = new book[N];
        for(int i = 0; i < N; i++)
        {
          knigi >> arr[i].name >> arr[i].circulation >> arr[i].year;
        }
      }
    
      int sz = 0;
    
      book* books = get_books_list(arr, N, 2000, 2010, sz);
    
      delete[] arr;
    
      if(books)
      {
        cout << "НАЗВАНИЕ И ТИРАЖ КНИГ С ИЗДАННЫХ С 2000-2010 ГГ:\n";
        for(int i = 0; i < sz; ++i)
        {
           cout << books[i].name << "  " << books[i].circulation << "\n";
        }
        delete[] books;
      }
      else
      {
        cout << "ТАКИХ НЕТ.";
      }
      system("pause");
    }

    максимально сохранить твой авторский стиль, чтобы не вызывать подозрений и лишних вопросов. Тебе нужно только придумать (если это конечно нужно) как считывать название книги, если оно составное т.е. из нескольких слов.
    Ответ написан
    6 комментариев
  • Какие вопросы полезно задавать старшим разработчикам?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    "Я всё сделал. Что дальше?" (шутка)

    "Я думаю сделать так (показываете схему того, как Вы поняли задачу), верно?"
    "Я с этим не сталкивался. С чего мне начать?"
    "Я хочу оптимизировать (показатель и место оптимизации). Что скажете?"
    "Пытаюсь разобраться... Читал... Делал... Не получилось. Что я упустил?"

    И самое страшное:
    Которые вы бы хотели, чтобы Вас спрашивали, но высказать напрямую ваше желание вы не можете :)))
    Потеря коммуникации - потеря времени и средств!
    Ответ написан
    Комментировать