• Как правильно сортировать файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не совсем ясно , чего хотел преподаватель.

    Но для сортировки больших массивов ( которые много крат превышают оперативку ) используется сортировка слиянием - merge sort.
    Ответ написан
    Комментировать
  • Как правильно сортировать файл?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Все правильно. Работа с файлом - на несколько порядков медленнее работы с памятью. Особенно медленен случайный доступ на hdd. Поэтому читать и писать по одному числу по разным адресам, как в сортировке, совсем медленно.

    На практике, когда стоит задача сортировать файл, файл большой и в память целиком не помещается. Поэтому его читают кусками и как-то хитрят. Но чтение всегда делают большими кусками.
    Ответ написан
    2 комментария
  • На сколько корректна такая реализация?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут зубчатый массив не нужен. Можно и одномерным прекрасно обойтись.
    for (int i = 0; i < heightGameField; i++)
          gameField[i] = new int[widthGameField];


    Тут всё поле можно не перерисовывать. Змейка это вообще - эконом-игра. В ней можно обновлять
    только голову змеи и хвост. И те места на карте где выпадает еда.

    for (int i = 0; i < heightGameField; i++)
        {
          for (int j = 0; j < widthGameField; j++)
          {
            switch (gameField[i][j])

    Я не кодил на SFML/Graphics.hpp. Моя С++ библиотека когда-то называлась Borland C++ BGI. Но там мне хватало
    вот такого частичного обновления экрана.

    Зачем этот метод? Он безсмысленный.
    int** getGameField(void)
      {
        return gameField;
      }

    Он взламывает инкапсуляцию класса. После него всё ООП должно пойди по звезде. Вобщем можешь его даже не делать.

    Вообще в данной игровой логике ООП не очень нужно. Ну тоесть я не вижу ниакой мотивации к ООП. Между змеей и локацией нет никакой секретности. Короче пиши набор функций и не парься. Если SFML жостко не требует ООП
    то и не беспокойся об этом. Шаблонизация тут как я понимаю важнее чем ООП. А об этом еще великий Степанов
    говорил.
    Ответ написан
    1 комментарий
  • На сколько корректна такая реализация?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Во-первых, стоит эти два класса разнести по разным файлам (декларация в .h файле, реализация в .cpp).

    А дальше надо поменять иерархию ваших классов.
    С такими циклическими зависимостями, конечно, можно что-то даже скомпилировать (в каждом cpp включать другой хедер, в интерфейсе второй класс передавать только как указатель. Или у вас в одном файле сначала сделать оба прототипа, forward declaration второго класса перед ними, потом реализации). Но это будет запутанно и сложно.

    Подумайте, а так ли вам надо в snakeUpdate передавать GameField? Можно, например, из Snake возвращать ее координаты или что там влияет на Update и потом их передавать какому-то методу в GameField. Сейчас ваш snakeUpdate вообще ничего из Snake не задействует - его можно наружу вывести, но это, наверно, еще в разработке. Не надо без крайней необходимости создавать усложненную структуру зависимостей классов. Решите, какой класс будет более важным, и пусть не ему передается второй класс, а второй класс наоборот дергает какие-то его методы.
    Ответ написан
    1 комментарий