Skip to content

Develop#1

Open
johnneon wants to merge 26 commits intomainfrom
develop
Open

Develop#1
johnneon wants to merge 26 commits intomainfrom
develop

Conversation

@johnneon
Copy link
Owner

@johnneon johnneon commented Mar 3, 2021

  1. Task: https://github.com/rolling-scopes-school/tasks/blob/master/tasks/react/react-game.md
  2. Screenshot:
    Screen
  3. Deploy: https://johnneon.github.io/react-game/
  4. Done 03.03.2021 / deadline 03.03.2021
  5. Score: 80 / 100
    Так как видео по ряду причин сделать возможности не было, прошу ознакомится с описанием в ветке develop - https://github.com/johnneon/react-game/tree/develop
  • Basic scope (+30)

    • вёрстка, дизайн, UI. Выполняются требования к оформлению приложения +10
    • эффекты анимации. Анимация ходов, перемещения фигур, допустимых и недопустимых ходов, начала и окончания игры, победы и поражения и т.д +10
    • механика игры. Ходы, перемещения фигур, набранные баллы, окончание игры и т.д. подчиняются определённым свойственным игре правилам +10
  • Advanced scope (+50)

    • звуки и музыка. В игре есть звуки и музыка, и есть настройки звуков и музыки: возможность вкл/откл звуки, вкл/откл музыку, регулировать громкость звуков, регулировать громкость музыки +10
    • настройки игры. Есть не меньше трёх настроек разных опций игры, например, внешний вид игрового поля и фигур, сложность игры, определение порядка ходов. Речь не про настройки звуков и музыки, которые проверялись и оценивались в предыдущем пункте. Это должны быть настройки разных опций, а не три параметра одной опции, например, размера игрового поля +10
    • статистика. Пользователь информируется о состоянии игры, ведётся запись ходов, побед и поражений, времени игры, либо отображается другая статистика игры. Есть таблица рекордов, в которой сохраняются результаты предыдущих 10 игр +10
    • сохранение состояния игры при перезагрузке страницы. Сохраняются все опции игры: ходы, набранные очки, положение фигур и т д. Состояние игры сохраняется без необходимости кликать по кнопке save. Есть кнопка new game для запуска новой игры +10
    • возможность управления игрой с клавиатуры или не меньше пяти hot keys. Есть список горячих клавиш для управления игрой с клавиатуры +10
  • Hacker scope (+20)

    • автопроигрывание игры. Есть кнопка Autoplay запускающая игру в автоматическом режиме. Это может быть отдельная партия игры (крестики-нолики, шашки, шахматы, морской бой, судоку и т.д.). Для бесконечных игр (тетрис, Flappy Bird и т.д), игра зацикливается не раньше чем через 30 ходов. Речь не про автозавершение начатой игры, автопроигрывание игры начинает игру с пустого поля или стандартной раскладки и показывает как эта игра сама играет без пользователя +10
    • дополнительная функциональность. Реализована достаточно сложная в реализации дополнительная функциональность, которая улучшает качество игры. В качестве дополнительной функциональности рекомендуется создать и использовать бекенд, например, для хранения счёта игры. Также может быть и другая дополнительная функциональность, например, 3d игра, написана логика для компьютерного противника, есть сетевой режим игры, и т.д +10

@johnneon johnneon requested a review from yastrdimaepam March 5, 2021 08:02
return [];
}

return JSON.parse(data || '[]');
Copy link
Collaborator

Choose a reason for hiding this comment

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

data || '[]' это лишнее, тк если data nullish , то она провалится в if.

Copy link
Owner Author

Choose a reason for hiding this comment

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

Понял, поправлю) Двойная перестраховочка

interface IAxisProps {
isLightTheme: boolean;
direction: string;
quantity: null[];
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
Owner Author

Choose a reason for hiding this comment

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

IAxisProps - оси, хотя до меня позже дошло что можно назваит Line
isLightTheme - что бы им цвет задавать
direction - что бы им задавать направление
quantity - первое что выдал переводчик на слово "количество"

Это недоделанный момент в целом, изначально я готовил этот компонент к возможным настройкам, вроде убрать линии, как-то анимировать, сменить цвет и тд. А по итогу ничего не успел и осталось как осталось(

Copy link
Collaborator

Choose a reason for hiding this comment

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

Я имею ввиду 13 строку. Коммент начинается под строкой, которую комментируешь. Что выражает тип null[]?

Copy link
Owner Author

Choose a reason for hiding this comment

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

массив заполненый null

Copy link
Collaborator

Choose a reason for hiding this comment

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

Понятно) Не очень правда понятно для чего нужен массив, заполненный null) Но раз используешь, видимо нужен)

Copy link
Owner Author

Choose a reason for hiding this comment

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

Как и написал выше, это недоделанный компонент, в массиве планировалось транспортировать какие-нить данные, возможно ссылки на текстуры, а что бы все завелось с хотя бы обычными полосками, накидал null

const GameOverScreen: React.FunctionComponent<IGameOverScreenProps> = (props) => {
const classes = useStyles();
const { score, resetGame } = useGameContext();
const [name, setName] = useState<string>('');
Copy link
Collaborator

Choose a reason for hiding this comment

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

Разве ts сам не выводит тип из передаваемого значения?

Copy link
Owner Author

Choose a reason for hiding this comment

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

Выводит, честно я без понятия до конца зачем, но везде где видел этому хуку так вот в ручную его пишут, вот и появилась привычка

} else if (code === KEY_S && direction !== UP) {
this.commandQueue.push(DOWN);
} else if (code === KEY_A && direction !== RIGHT) {
this.commandQueue.push(LEFT);
Copy link
Collaborator

Choose a reason for hiding this comment

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

Для чего нужно commandQueue? Почему сразу не менять состояние тут?

Copy link
Owner Author

Choose a reason for hiding this comment

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

Без этого змейка сама себя убивает) Очередь не позволяет сделать два действия одновременно, если убрать ее, то к примеру когда змейка ползет вверх, и быстро нажать ВПРАВО ВНИЗ то она просто умрет.

Долго с этим сидел, через простой setState никак этого поправить не получалось, что с колбеком, что без.
Предпологаю что это из за ассинхрона самого стейта

}

if (stoneCords.length > 0) {
stones = stoneCords.map((stone: number[], i) => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Ты бы мог мемоизировать результат вне функции render и сэкономить на лишних перерендерах

Copy link
Owner Author

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.

2 participants