Вообще, код работает. Это хорошо, но тут есть что исправить:
Шаблоны окна победы и проигрыша слишком похожи, надо избавиться от копипасты.
Окошко лучше расположить по центру. Не стоит привязывать его размер к ширине окна, лучше сделать чтобы он зависел только от содержимого + поля.
На окне «вы победили» текст черный на темном фоне, надо сделать светлый. Также, можешь попрбовать сделать фон окошка чуть прозрачным (alpha =0.8), а кнопку оставить непрозрачной.
>if( classes.indexOf(' '+ klass +' ')>=0){
>returntrue;
Можно писать return x >=0; так как оператор сравнения возвращает true или false
> Util.toggleContentOfTag
Это неудачный способ, читать innerHTML. Гораздо лучше завести в Cell поле, показывающее есть флаг или нет.
Насчет функции showWindow(...), а зачем ты передаешь self? Это не надо, можно просто:
....// где-то Field или внешнем коде
Util.showWindow('win',function(...){
self.newGame(...);
});
А self и так будет доступна.
То, что у тебя — очень странно выглядит. Ты разбираешься в замыканиях? Решал первые задачи отсюда (или понимаешь как они решаются?)? https://g...content-available-to-author-only...b.com/codedokode/ce30e7a036f18f416ae0
Алсо, если уж передавать self то логично при вызове функции передавать его в качестве this. Ты знаешь про методы apply/call/bind? Если нет то очень плохо.
> cell.getCoorByCell(...).x,
Не проще было сделать cell.getX(...) ?
> this.cells[x]!== undefined
Есть оператор in, зачем костыли?
Неиспользуемые функции типа Util.clickBtn хорошо бы удалять.
В функции Field.prototype.openCell есть огромный if размером со всю функцию. Это плохо, надо исправить, например с помощью return
>if(mines !==0){
>if(mines ===0){
Используй else
>var td = this.cells[x][y].getTd(...);
> Util.clearClass(td);
Ты опять лезешь в зону ответственности другого класса и нарушаешь инкапсуляцию. Тут надо написать
this.cells[x][y].clear(...);
То есть ты должен сказать ячейке: «очисти себя», а не лезть руками ее очищать.
Непонятно зачем вызвать this.closeCells после this.generateCells
><span>⚑
А span зачем?
> target.setAttribute('oncontextmenu'
Костыль. Используй предотвращение действия по умолчанию в обработчике mousedown, если не работает то сделай обработчик события oncontextmenu через addEventListener
>>400478
Вообще, код работает. Это хорошо, но тут есть что исправить:
Шаблоны окна победы и проигрыша слишком похожи, надо избавиться от копипасты.
Окошко лучше расположить по центру. Не стоит привязывать его размер к ширине окна, лучше сделать чтобы он зависел только от содержимого + поля.
На окне «вы победили» текст черный на темном фоне, надо сделать светлый. Также, можешь попрбовать сделать фон окошка чуть прозрачным (alpha = 0.8), а кнопку оставить непрозрачной.
> if ( classes.indexOf(' ' + klass + ' ') >= 0 ) {
> return true;
Можно писать return x >= 0; так как оператор сравнения возвращает true или false
> Util.toggleContentOfTag
Это неудачный способ, читать innerHTML. Гораздо лучше завести в Cell поле, показывающее есть флаг или нет.
Насчет функции showWindow(...), а зачем ты передаешь self? Это не надо, можно просто:
.... // где-то Field или внешнем коде
Util.showWindow('win', function (...) {
self.newGame(...);
});
А self и так будет доступна.
То, что у тебя — очень странно выглядит. Ты разбираешься в замыканиях? Решал первые задачи отсюда (или понимаешь как они решаются?)? https://g...content-available-to-author-only...b.com/codedokode/ce30e7a036f18f416ae0
Алсо, если уж передавать self то логично при вызове функции передавать его в качестве this. Ты знаешь про методы apply/call/bind? Если нет то очень плохо.
> cell.getCoorByCell(...).x,
Не проще было сделать cell.getX(...) ?
> this.cells[x] !== undefined
Есть оператор in, зачем костыли?
Неиспользуемые функции типа Util.clickBtn хорошо бы удалять.
В функции Field.prototype.openCell есть огромный if размером со всю функцию. Это плохо, надо исправить, например с помощью return
> if (mines !== 0) {
> if (mines === 0) {
Используй else
> var td = this.cells[x][y].getTd(...);
> Util.clearClass(td);
Ты опять лезешь в зону ответственности другого класса и нарушаешь инкапсуляцию. Тут надо написать
this.cells[x][y].clear(...);
То есть ты должен сказать ячейке: «очисти себя», а не лезть руками ее очищать.
Непонятно зачем вызвать this.closeCells после this.generateCells
> <span>⚑
А span зачем?
> target.setAttribute('oncontextmenu'
Костыль. Используй предотвращение действия по умолчанию в обработчике mousedown, если не работает то сделай обработчик события oncontextmenu через addEventListener