Generalnie spoko, mogę od siebie dać parę nie tyle uwag co może jakiś wskazówek:
1.Pobieranie referencji po ID:
function _id(id)
{
return document.getElementById(id);
}
//Można by tutaj zastosować nowszą metodę: (co nie oznacza, że Twój sposób jest gorszy)
const _id = document.querySelector.bind( document );
//i potem np.:
const element = _id( '#xxx' );
Ale generalnie jeśli korzystasz z getElementById zaledwie parę razy to można się zastanowić czy na pewno jest sens robić dodatkową funkcję.
2.Funkcja isGameOver:
function isGameOver()
{
if(player.score === POINTS_TO_WON || computer.score === POINTS_TO_WON)
{
return true;
}
return false;
}
//Można to uprościć:
function isGameOver() {
return (player.score === POINTS_TO_WON || computer.score === POINTS_TO_WON);
}
3.Funkcja resetGame:
function resetGame()
{
resetScore();
updateScore();
resetChoosensImages()
resetPlayersProperties();
}
Tutaj oki, ale jeśli już tak lecisz kolejno wywoływanie jednej funkcji za drugą to poczytaj w wolnej chwili o asynchroniczności w JS, Promise, async/await itp. Teraz może i wszystko jest oki, ale jak za chwilę zaczniesz bawić się np. ajaxem to możesz długo zastanawiać się co jest nie tak i dlaczego kod nie działa jak powinien :) Ale to taka nie uwaga, ale wskazówka co do dalszej drogi nauki.
4.Nawiązując np. do pkt. 3 poczytaj sobie np. o eslint. U Ciebie brakuje np. jednego średnika co eslint by wychwycił (akurat co prawda są osoby polegające na automatycznych średnikach JS, ale ja uważam, że lepiej mieć świadomą kontrolę nad kodem i wstawiać średniki gdzie trzeba).
5.Klamerki po IF:
if(player.lastPickedTool.classList.contains('tool--show'))
player.lastPickedTool.classList.remove('tool--show')
Staraj się zawsze używać klamerek po instrukcjach warunkowych IF. Tutaj wykonujesz jedną operację więc błędu nie ma, ale jeśli za chwilę dodasz drugą i zapomnisz o klamerkach to możesz dłuuugo szukać błędu logicznego w kodzie...
6.Używanie konsoli:
console.warn('You must pick a tool!')
Konsolę lepiej pozostawić tylko na etap projektowania aplikacji. W apce produkcyjnej lepiej się tego pozbyć i nie robić bałaganu. Pamiętaj, że konsola to nie miejsce na jakiekolwiek informacje dla użytkownika!
7. Funkcja updateChoosenImage:
Nie chce mi się wklejać całego kodu, także polecam tylko przeanalizować dwie kwestie: unikaj zwracania undefined (return;) chyba, że zrobisz to w świadomy sposób. Po drugie zamiast tego undefined i potem break w IF lepiej po prostu zwracać true lub false, co pozwoli Ci w przyszłości np. użyć tej metody w innej instrukcji warunkowej no i masz jasną sytuację, wiesz że zwracasz Boolean.
8. Klasa ToolComparator:
Skoro znasz klasy to polecam cały kod przepisać z ich wykorzystaniem :) No i dodatkowo porozbijać kod na mniejsze klasy + pliki aby apka była czytelniejsza.
---------------------
To tak na szybko w przerwie na wieczorną kawę :) Generalnie spoko, fajna gierka i pomysł na apkę. Życzę powodzenia w dalszym odkrywaniu świata JS :)
Pozdrawiam!