Тесты проходят успешно, хотя один из пунктов условия не выполнен.
- checkInitCompleted не должна вызываться из handleKeyPress, если у пользователя недостаточно золота для первой покупки, в коде подобной проверки нет в принципе, а тесты проходят успешно.
handlers.js
import { checkInitCompleted, updateGold } from "./functions.js";
export const handleKeyPress = (term, state) => (name, matches, data) => {
const key = String.fromCharCode(data.code);
const producerByKey = state.producers.find(prod => prod.id === Number(key));
if (producerByKey) {
state.productionRate = state.productionRate + producerByKey.baseProduction
state.gold = state.gold - producerByKey.cost;
producerByKey.cost = producerByKey.cost * producerByKey.growthRate;
producerByKey.count++;
state.producers = state.producers.map((producer) => producer.id === producerByKey.id ? producerByKey : producer)
}
if (key === 'c' || key === 'C') {
process.exit();
}
if (!state.isInitCompleted) {
checkInitCompleted(term, state);
state.isInitCompleted = true;
}
}
export const handleStateChange = (term, state) => () => {
if (!state.isGameStarted) {
state.isGameStarted = true;
}
updateGold(term, state);
}
functions.js
export const init = (term) => {
term.clear();
term.hideCursor();
term.grabInput();
term('Welcome to the mining game!');
}
export const updateGold = (term, state) => {
term.moveTo(25, 2);
term.eraseLineAfter();
term.bold.yellow('${state.gold} ');
state.gold = state.gold + state.productionRate;
}
export const checkInitCompleted = (term, state) => {
term.moveTo(0,0);
term.eraseLineAfter();
term('You can purchase producers by clicking the number button (1, 2, 3, ...)');
term.moveTo(0, 2)
term('GOLD: ${state.gold}');
term.moveTo(0, 3)
term('PRODUCTION RATE: ${state.productionRate}')
}
В итоге золото юзера не проверяется и мы можем купить продюсера, уйдя в отрицательный баланс.
Также есть пару вопросов:
- У юзера нет больше возможности копать золото вручную (10 этап, удаляем вызов updateGold), откуда золото у него появится чтобы купить первого producer-а ? Изначальный productionRate равен нулю
- Из handleKeyPress мы возвращаем ф-цию с тремя аргументами (name, matches, data), как в коде можно использовать matches и name если хватает вроде бы data.code ?
Если ф-ция checkInitCompleted будет вызвана только один раз за всё время, как только будет достаточно голды для самого дешевого продьюсера, то там ведь всегда будет одна и та же запись, GOLD: 10, PRODUCTION RATE: 0, как в примере.
P.S. Баг на форуме при редактировании поста.
Steps:
- Зайти на пост
- Нажать кнопку "Править"
- Отменить редактирование или нажать кнопку "Сохранить"
.
Actual: Подсветка синтаксика у кода пропадает, и появляется только после релоада страницы
Expected: Подсветка синтаксиса остается