**Пайтон доминатус!**
Вау! Я правда удивлён способу получения сида для генератора случайных чисел :)
Очень интересная идея с взятием кода клавиши. Правда, к третьей попытке я стал нажимать одну и ту же стрелочку, но какая разница?
В целом, играется вполне приятно и удобно, учитывая специфику платформы.
На самом экране игры, на мой вкус, мало информации, можно было бы хотя бы
выводить счёт, а то ещё и следующую еду для змейки. Это, конечно, не обязательно, но как по мне это могло быть неплохим способом прямо внутри игры сообщать игроку его статы. Более того, это могло бы помочь построить у него понимание того, что делает каждая еда. Не все же читают файлики :) Вернее, когда играешь, файлик читать не очень охота.
В целом, ну, змейка очень змейная; питон в ней, впрочем, никак не узнаётся.
И за что вообще JS'у -50 к баллам XD
Теперь немного по коду проекта (откройте форточку заранее, буду много душнить):
-
Стиль кода: Стиль кода в целом хороший, читаемость нормальная. Впрочем, нигде нет никаких комментариев, но не везде это проблема. Там, где это правда раздражает, будет указано отдельно.
-
Random.jack: Нареканий нет. Генератор работает, идея мне очень нравится, код вполне самоочевиден, кроме функции Range, которой можно было бы дать чуть более понятное название. Некритично, но тем не менее.
-
LinkedList.jack: Линкедлист, который и не линкедлист даже, а лишь элемент оного. Это очевидно при рассмотрении кода, но название класса вводит в заблуждение. Плюсом, хранит почему-то он два интовых значения, и совсем неочевидно, почему это должно быть так. Возможно, комментарий + нормальное название было б достаточно. А ещё почему-то конкретно в этом файле пожалели отступов между функциями? XD
-
Queue.jack: push и pop - это про стек, а в очереди всё же enqueue и dequeue. Да, баги с именами - это некритично, но во многом это про интуицию (которую, кстати, ваш любимый питон всячески старается поддерживать), а push ассоциируется совсем с другим, нежели ты ожидаешь от очереди. Ну вы поняли. Я душный и всё такое. Уж либо пусть будет комментарий, либо пусть будет энкью/декью. Опять же, очередь неявно является очередью конкретно точек плоскости, но это баг, вышедший из реализации LinkedList*. 20 строчка: let returned = LinkedList.new(head.GetX(), head.GetY()); - на мой взгляд не должно быть объектом типа LinkedList. Ну вот когда ты декьюил очередь точек и получал на выходе связный список? Короче мне не нравится класс с точки зрения названий и прочего, но к реализации не придраться.
-
Python.jack: К коду змейки нареканий нет. Прикольненькая фишка с использованием boolean в качестве цвета, мне понравилась :) Разве что логика в EatFood несколько страшная и её можно было бы разбить на пару строчек во имя читаемости.
-
PythonGame.jack: Oh boy! Какая злачная штука! Для начала, мне очень понравилась идея с замедлением и ускорением питона и её реализация. Но дальше не так красочно: Во-первых, объекты типа food не диспозятся в конце игры. Не то что бы это было сильно важно в конце выполнения программы... Но в случае каких-либо расширений есть вероятность, что это станет проблемой. Во-вторых... бойлерплейт. Максимально очевидный. Строчки 30-53 абсолютно идентичны 54-77. Можно было выделить в метод, ну или ввести переменную под съеденную еду и проводить все танцы с бубном только для неё. Не понятно, почему это не сделано. Вроде, ОП у нас всё ещё ведёт один и тот же Петряшов... В-третьих, оказывается, чем быстрее ты ешь еду, тем больше ты получаешь баллов. Об этом совершенно нигде не рассказано! Пойду набивать новый хайскор.
-
Food.jack: Ну что сказать? Ответил бы любимой Лёниной фразой, но не стану. Страшноватенький класс. С кодом, я понимаю, сделать ничего и нельзя, но! можно было бы добавить каких-нибудь комментариев к происходящему. В остальном всё ок.
Ну вот и всё. Такое вот сочинньице