-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Solution #8
base: master
Are you sure you want to change the base?
Solution #8
Conversation
kshvetsova
commented
Sep 16, 2020
- DEMO LINK
Знайшов баг, якщо наприклда ходу немає вліво, клікаєш вліво і у тебе в рандомному місці генериться клітинка |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
moveUp moveDown moveRight
Буде дуже класно це переробити на одну функцію merge.
Як? Завжди мерджити клітинки в одному напрямку, вниз для прикладу.
Ця функція в тебе вже готова, але як зробити так щоб завжди мерджити вниз при будь-якому натисканні стрілки?
В тебе є матриця 4*4, якщо нажали вниз тоді ти просто мерджиш клітинки вниз, якщо нажали вверх, то ти розвертаєш свою матрицю на 180 градусів, мерджиш клітинки і тоді розвертаєш матрицю назад на 180 градусів,
Якщо нажимають вправо, ти повертаєш матрицю на 90 градусів і -90 для натискання в ліво
Відповідно схематично буде щось схоже:
addEventListener('keypress', () => {
rotateMatrix(matrix, 90);
mergeNumbers();
rotateMatrix(matrix, -90);
})
Це чисто схематично може треба буде ще коду там дописати, але це щоб було зрозуміло про що я.
src/scripts/main.js
Outdated
case '': cell[i].className = 'field-cell'; | ||
break; | ||
case '2': cell[i].classList.add('field-cell--2'); | ||
break; | ||
case '4': cell[i].classList.add('field-cell--4'); | ||
break; | ||
case '8': cell[i].classList.add('field-cell--8'); | ||
break; | ||
case '16': cell[i].classList.add('field-cell--16'); | ||
break; | ||
case '32': cell[i].classList.add('field-cell--32'); | ||
break; | ||
case '64': cell[i].classList.add('field-cell--64'); | ||
break; | ||
case '128': cell[i].classList.add('field-cell--128'); | ||
break; | ||
case '256': cell[i].classList.add('field-cell--256'); | ||
break; | ||
case '512': cell[i].classList.add('field-cell--512'); | ||
break; | ||
case '1024': cell[i].classList.add('field-cell--1024'); | ||
break; | ||
case '2048': cell[i].classList.add('field-cell--2048'); | ||
break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
а це можна автоматизувати а не руками прописувати стільки коду?)
cell[i].classList.add('field-cell--${cell}')
src/scripts/main.js
Outdated
} | ||
} | ||
|
||
const board = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
чому 1234567...
не легше працювати з нулями, індекси елементів в тебе і так є.
типу нуль це пуста клітинка, 2 відповідно з 2кою
src/scripts/main.js
Outdated
if (cell[board[row + 1][j]].innerHTML === '') { | ||
cell[board[row + 1][j]].innerHTML = cell[board[row][j]].innerHTML; | ||
cell[board[row][j]].innerHTML = ''; | ||
row++; | ||
} else if (cell[board[row + 1][j]].innerHTML | ||
=== cell[board[row][j]].innerHTML) { | ||
cell[board[row + 1][j]].innerHTML *= 2; | ||
cell[board[row][j]].innerHTML = ''; | ||
|
||
score.innerHTML = +score.innerHTML | ||
+ (+cell[board[row + 1][j]].innerHTML); | ||
checkForWin(); | ||
break; | ||
} else { | ||
break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
то це що виходить що board вище нам навіть не треба?? Ти просто читаєш інфу з клітинок? Це дуже поганий підхід, в такому разі я як користувач можу просто підредагувати html і перемогти.
Створи собі board масив масивів і працюй з ним, а не з html, створи метод render передай туди свій масив і перетворюй вже свій масив html елементи.
Користувач має бачити тільки результат того що він нажав, ніяк самостійно вплинути він не має на результати, навіть якщо він підредагує числа в клітинках, в тебе в масиві мають зберігатися точні числа і точний стан справ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В гру грати можна, в портфоліо теж додати можна, виглядає гарно і здається все працює ок. По коду є зауваження
Наприклад краще було б все ж використати rotate вже готовий алгоритм, щоб не придумувати велосипед)
Ну і код дуже не очевидний, тобто я читаю функцію і насправді не розумію що там відбувається, треба старати писати максимально простий код і тупий, тобто людською мовою, щоб він читався як книжка
перечитуй свій код і дивись на нього так ніби це не ти писала і чи буде людині яка тільки почала девелопити зрозуміло що тут відбувається
Не використовуй абстрактні назви типу arr, action
якщо це масив елементів з рядка то так і пиши row
|
||
function merge(data) { | ||
const arr = []; | ||
let alpha = data.shift(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
шо це тут за радіоактивний код? бета гама альфа?)
} | ||
|
||
function merge(data) { | ||
const arr = []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
що таке arr? що там зберігається?
if (!beta) { | ||
if (alpha) { | ||
arr.push(alpha); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
тут якісь чудеса теж(
банально не розумію що тут відбувається
arr.push(alpha); | ||
} | ||
break; | ||
} else if (alpha === beta) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
альфа і бета рівні, чому?
Думаю ти розуміє, що окрім тебе цей код ніхто не зможе розшифрувати і це погано