Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Реализация алгоритма игры (https://javascript.ru/forum/dom-window/69442-realizaciya-algoritma-igry.html)

r1sus 22.06.2017 17:42

Реализация алгоритма игры
 
Игра заключается в том, чтобы при выборе цвета опорного элемента, соседи со схожим цветом меняли свой цвет. И так далее, пока все игровое поле не будет заполнено одним цветом.
У меня уже реализован алгоритм, но работает когда как :blink:
Не пинайте ногами, код очень не хороший, но мне сейчас нужно чтоб работало, потом уже красоту наведу.
Я на эту игру уже неделю смотрю, может нужен просто свежий взгляд.
Спасибо всем!


https://codepen.io/jasesmith/pen/mRmWjQ

рони 22.06.2017 17:54

Цитата:

Сообщение от r1sus
соседи со схожим цветом меняли свой цвет

на какой цвет?

j0hnik 22.06.2017 17:57

я чет проиграл в твою игру, не вытащил катку. :-E

рони 22.06.2017 18:12

:write: похоже нужна волна от опорной клетки

рони 22.06.2017 18:15

r1sus,
добавить выбор цвета и фильтрацию
https://javascript.ru/forum/dom-wind...tml#post447768

r1sus 22.06.2017 18:18

..

рони 22.06.2017 19:52

игра, сделать все клетки одинакого цвета
 
r1sus,
кликать по кнопкам слева от блока, окончание игры фиксируйте самостоятельно :)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  *{
    padding: 0;
    margin: 0;
  }

  .cell {
    text-align: center;
     float: left;
     height: 23px;
     width: 23px;
     border: #0000CD 1px solid;
     background-color: #FFEBCD;
     font-size: 12px;
     -webkit-transition: all .5s ease-in-out;
     -moz-transition: all .5s ease-in-out;
     -o-transition: all .5s ease-in-out;
     transition: all .5s ease-in-out;
  }
  #matrix{
    display: inline-block;
    margin: 50px auto;

  }
  #color{
    margin: 50px auto;
     position: relative;
  }

  .but {
    text-align: center;
     height: 23px;
     width: 23px;
     margin: 12px;
     border-radius: 4px;
  }

  </style>

  <script>
window.addEventListener("DOMContentLoaded", function() {
    var matrix = document.getElementById("matrix"),
        l = (Math.random() * 15 | 0) + 10;
        t = (Math.random() * 10 | 0) + 10, n = l * t,
        color = document.getElementById("color");

    function createColorBg(num) {
        var temp = [];
        for (var i = 0; i < num; i++) temp[i] = "#" + ("000000" + (Math.random() * 16777215 | 0).toString(16)).slice(-6);
        return temp
    }


    function rund(num) {
        return Math.floor(Math.random() * num)
    }

    function createBut(bgColor)
    {
       bgColor.forEach(function(clr, i) {
       var div = document.createElement("div");
           div.className = "but";
           div.style.backgroundColor = bgColor[i];
           div.addEventListener("click", function(event) {
        currentColor = divs[0].dataset.bg;
        newColor = i;
        wave(0)
    })
      color.appendChild(div);
})
    }

    function createMatrix(numColor) {
        var w;
        for (var i = 0; i < n; i++) {
            var div = document.createElement("div");
            div.className = "cell";
            div.dataset.index = i;
            var num = rund(numColor);
            div.dataset.bg = num;
            div.style.backgroundColor = bgColor[num];
            matrix.appendChild(div);
            if (i == l - 1) w = matrix.offsetWidth + 1
        }
        matrix.style.width = w + "px";
        matrix.style.display = "block"
    }

    function chec(indx, size) {
        var s = [],
            x = indx % l,
            y = indx / l | 0;
        size = size || 1;
        for (var i = y - size; i <= y + size; i++)
            for (var k = x - size; k <= x + size; k++) {
                var num = k + i * l;
                i > -1 && i < t && k > -1 && k < l && num < i * l + l && s.push(num)
            }
        return s
    }
    var numColor = 3;
    var bgColor = createColorBg(numColor);
    createMatrix(numColor);
    var divs = [].slice.call(document.querySelectorAll(".cell"), 0);
    var currentColor;
    var newColor;

    createBut(bgColor);

    function wave(index) {
        var elems = chec(index);
        elems.forEach(function(indx) {
            var bg = divs[indx].dataset.bg;
            if (bg == currentColor && bg != newColor) {
                divs[indx].dataset.bg = newColor;
                divs[indx].style.backgroundColor = bgColor[newColor];
                window.setTimeout(function() {
                    wave(indx)
                }, 300)
            }
        })
    }

});
  </script>
</head>

<body>
<div id="matrix" ></div>
<span id="color" ></span>
</body>
</html>

r1sus 22.06.2017 20:47

..

r1sus 22.06.2017 20:48

Рони,Спасибо большое, на ваш взгляд мой код совсем не годный? Критики можно еще попросить)

рони 22.06.2017 20:52

r1sus,
мне легче написать свой вариант, разбор чужого кода без пояснений отнимает много времени.


Часовой пояс GMT +3, время: 03:40.