Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Итоговый PR: mouseartiom #6

Open
wants to merge 92 commits into
base: master
Choose a base branch
from
Open

Итоговый PR: mouseartiom #6

wants to merge 92 commits into from

Conversation

eadium
Copy link
Contributor

@eadium eadium commented Apr 21, 2018

С момента последнего ревью была проделана следующая работа:

  • убран нерабочий и закомментированный код
  • сырые указатели по возможности заменены умными
  • работа с матрицами стандартизирована при помощи класса Matrix
  • оптимизировано потребление памяти при нанесении событий на карту
  • константы вынесены в конфигурационный файл
  • инициализация героя происходит в GameData
  • для работы с файловой системой используется filesystem. Пути инициализируются непосредственно в системных данных.
  • класс Mapscanner теперь принимает в конструктор путь к файлу, из FillMatrix вынесена функция getColor.

stanf0rd and others added 30 commits April 7, 2018 10:36
…лен using ns std. В GetArtifact() возвращается указатель на артефакт. Добавлены Get/Set.
…бавлен в конструктор Item для генерации из вне.
Copy link
Collaborator

@leshiy1295 leshiy1295 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почти нет паттернов

// using unique_ptr for two-dim array isn't a good idea though
// std::unique_ptr<Event[][]> eventMatrix (nullptr);

eventMatrix = new std::vector<Event>** [gameData.mapHeight];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему используется двойной указатель на вектор?
это же очень не очень

else return NULL;
}

void EventsData::PulverizeEvents(std::unordered_map<str, Event>& list) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


bool ArtifactsData::Init() {
ArtifactFactory aFactory;
str path = systemData.resourcesDirectory + systemData.nextLocationName + "/artifacts";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

этот путь должен передаваться в конструкторе
/ - это системный разделитель - используйте системную функцию/std::filesystem


SystemData::SystemData(str _nextLocationName)
:
resourcesDirectory("resources/"),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это должно задаваться ещё выше

str writer;

// hero initialization
std::string name = "Moleque";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это не должно инициализироваться тут

MapScanner scanner;
scanner.FillMatrix(
systemData.resourcesDirectory +
systemData.nextLocationName + "/" +
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

системный разделитель

return surfaceMatrix;
}

// DO NOT use this! It's full of bugs
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

!!!

int mapWidth;
int mapHeight;
Matrix<char> surfaceMatrix;
// std::unordered_map<str, Surface> currentSurfaceList; // currently useless
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

public:
AccessMap(Coord, Coord);
~AccessMap();
char** getMatrix() {return matrix;};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

используйте умные указатели
например, тут можно использовать array>, так как размер жёстко задан

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так и не поправлено

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

int width;
};

/* template<class T>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

@eadium eadium changed the title Добавлены классы карты поверхностей и событий, класс хранения артефактов и существ. Убран нерабочий код, пути инициализируются при помощи experimental/filesystem, добавлены умные указатели, работа с матрицами изолирована в классе Matrix. Jun 16, 2018
@eadium eadium changed the title Убран нерабочий код, пути инициализируются при помощи experimental/filesystem, добавлены умные указатели, работа с матрицами изолирована в классе Matrix. Итоговый PR: mouseartiom Jun 20, 2018
Copy link
Collaborator

@leshiy1295 leshiy1295 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не идеально, конечно
Но более-менее ок

: nextLocationName(_nextLocationName) {
cout << "systemData initialized" << endl;
resourcesPath = resourcesDirectory;
artifactsPath = resourcesPath / nextLocationName / "artifacts";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут точно деление?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

public:
AccessMap(Coord, Coord);
~AccessMap();
char** getMatrix() {return matrix;};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так и не поправлено

Copy link
Collaborator

@leshiy1295 leshiy1295 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

только паттернов нет
поэтому баллы могу поставить за первые два модуля


class GameData {
// stores finished events and other stuff
public:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если это public class, то лучше использовать struct...

@eadium eadium requested a review from SinimaWath June 21, 2018 15:59
Copy link
Collaborator

@SinimaWath SinimaWath left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вобщем было бы хоршо убрать комментарии. Поменять необходимые методы на const. Использовать умные указатели. Почаще использовать auto. Побольше проверок исключений нужно

if (!surfaceData.CoordIsValid(point)) return NULL;
if (!eventMatrix[point]) return NULL;
if (!eventMatrix[point]->empty())
// return eventMatrix[point]->front();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

коммент

add event to map
*/
for (auto i : list) {
Event &event = i.second;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему reference. Вместо auto i. Можно использовать const auto& i, чтобы не копировать

Event &event = i.second;
int counter = 0;

Coord eventCenter = event.GetCoord();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можно использовать auto, чтобы не писать лишнего. Тип сам выведется

current.y++) {
counter++;
if (!eventMatrix[current]) {
eventMatrix[current] = new std::vector<str>;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему, raw указатель на контейнер. Это же фиаско. Используй умные указатели

}
}
}
cout << "event " << event.GetName() << " was sprayed " << counter << " times" << endl;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше использовать логгер

return surfaceMatrix[point];
}

short SurfaceData::getSurfSpeed(Coord point) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const метод. И вобще везде getter-ы. Const методы

}

short SurfaceData::getSurfSpeed(Coord point) {
return surfaceList.at(getSurface(point)).getSpeed();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если at не находит элемент, то он бросает exception out_of_range. Нужен try catch


/*
// struct for terrain modifiers, contains name and power factor
struct surfaceModifier {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

опять комменты в релиз коде

class SurfaceData {
public:
SurfaceData();
// ~SurfaceData();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

public:
AccessMap(Coord, Coord);
~AccessMap();
char** getMatrix() {return matrix;};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants