Прошу советов и критики по игре
Добрый день, случайно наткнулся на соседнюю темку (игра крестики нолики) и решил сделать нечто похожее на игру "Пятнашки".
Сейчас понемногу осваиваю JS по Фленегану и заодно вспоминаю html & css из ВУЗовской программы обучения, хотя чисто интуитивно сегодня пришлось понять как работает this и dataset, хотя возможно я их и не правильно и не к месту применил)))) Сразу скажу что есть один существенный баг - фишки можно переставлять по горизонтали или вертикали на 1, чего в оригинале естественно делать нельзя, но я об этом вспомнил только когда все было готово :lol: , а за день написания кода уже мозг не варит (возможно завтра исправлю) https://jsfiddle.net/Amedeo_Avogadro/axbprxu5/ P.S. Сейчас прохожу объекты, но как-то на практике в данном примере вообще ума не приложу где использовать объекты..... P.S.S. В общем хочу объективной/субъективной критики по коду:thanks: |
Amedeo Avogadro,
может по первому клику и менять, а не по двум? |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
исправил все: https://jsfiddle.net/Amedeo_Avogadro/axbprxu5/10/ Кода стало намного меньше:haha: |
Amedeo Avogadro,
на всякий случай, в половине(условно) комбинаций "миссия будет не выполнима" |
Цитата:
P.S. Есть баг .cell_game:hover не срабатывает на тех ячейках где из скрипта ( move_value() ) был применен фоновый цвет( |
Цитата:
можно гонять пустую ячейку рандомно из начального "правильного" положения. |
На кодварсах сегодня в ленте задание всплывало, нужно бота к это игре написать, который выводит массив всех матриц от стартового состояния до финишного, если задача не решaема, вернуть null.
|
Цитата:
|
Amedeo Avogadro,
Такая игра раньше в карманном варианте была, была всегда решаема, а если не решалась, человек отходил в сторонку и каким то загадочным образом находил решение. |
Цитата:
Всем спасибо за обсуждение) Проблема с ховером решилась, в move_value() нужно убрать #dddddd и присваивать просто пустую строку, но это все равно странно, .cell_game:hover это же никак не затрагивает.... |
Нужно решить вопрос с тем, что рони говорил - нерешаемые комбинации. А когда все будет готово, советую попробовать сделать те же пятнашки, только с анимированными плитками, чтоб они плавно переезжали с места на место. Вот там будут интересные подводные камни при работе с DOM и вообще - это веселая задачка)
|
Цитата:
Цитата:
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .klet, .cl{ width: 50px; height: 50px; background-color: #ddd; font-size: 42px; border: 5px solid #ccc; color: grey; text-align: center; } .cl{ background-color: white; border: 0; color: white; } .green{ background-color: #B6FF00FF; } </style> </head> <body> <div id="game"></div> <script> var game = document.querySelector('#game'), table = document.createElement('table'), str = ''; arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,'cl'].sort((a, b)=>Math.random() - 0.5); for(var i = 0; i<4; i++){ str += '<tr>'; for(var j = 0; j<4; j++) str += '<td class="klet '+(arr[arr.length-1] == 'cl'&&'cl')+'">'+arr.pop(); } table.innerHTML = str; game.append(table); var td = document.querySelectorAll('td'); function fn2(t){ var cl = document.querySelector('.cl'), text = t.textContent; t.textContent = 'cl'; cl.textContent = text; cl.classList.remove('cl'); t.classList.add('cl'); fn1(); } (fn1=()=>{ var x = 0; for(var i = 0; i<15; i++){ if(i+1 == td[i].textContent*1 && i==x) { td[i].classList.add('green'); if(++x == 15) alert('Победа'); } else td[i].classList.remove('green'); } })(); td.forEach((el,i) => el.onclick = function(){ if ((i!=0 && i!=4 && i!=8 && i!=12 && td[i-1].matches('.cl')) || (i!=15 && i!=11 && i!=7 && i!=3 && td[i+1].matches('.cl')) || (i<12 && td[i+4].matches('.cl')) ||(i>3 && td[i-4].matches('.cl')) ) fn2(this); }); </script> </body> </html> |
Цитата:
|
Rise,
:thanks: |
Часовой пояс GMT +3, время: 15:59. |