Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 12.01.2022, 20:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

игра собери по порядку
Борис К,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <style type="text/css">
        @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600&display=swap');
        .color {
            background-color: var(--color);
            width: 200px;
            height: 100px;
            text-align: center;
            line-height: 100px;
        }

        .color:after {
            display: block;
            content: var(--txt);
            color: #FFFFFF;
            font-size: 48px;
            font-family: 'Playfair Display', serif;
        }
    </style>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            let temp = [];
            let form = document.querySelector(".game");
            let tds = Array.from(form.querySelectorAll(".color"));
            let colors = "#FF0000|#008000|#0000CD".split("|");
            let txts = "Hello|Java|script".split("|");
            let win;

            function show() {
                tds.forEach(td => {
                    let i = td.dataset.id;
                    td.style.setProperty("--color", colors[i]);
                    td.style.setProperty("--txt", `"${txts[i]}"`);
                });
            }

            function randomId() {
                win = false; temp = [];
                let length = colors.length;
                let ids = Array.from({
                    length
                }, (v, i) => i);

                ids.forEach((_, i) => {
                    let a = Math.trunc(Math.random() * length);
                    [ids[i], ids[a]] = [ids[a], ids[i]];
                });
                tds.forEach(({
                    dataset
                }, i) => dataset.id = ids[i]);

                show();
            }
            randomId()

            function exch(event) {
                if (win) return;
                let td = event.target.closest(".color");
                if (td) {
                    let cellIndex = td.cellIndex;
                    let rowIndex = td.closest("tr").rowIndex;
                    if (temp.length) {
                        let x = Math.abs(cellIndex - temp[1]);
                        let y = Math.abs(rowIndex - temp[2]);
                        if ((x == 0 && y == 1) || (x == 1 && y == 0) || td === temp[0]) {
                            [td.dataset.id, temp[0].dataset.id] = [temp[0].dataset.id, td.dataset.id];
                            show();
                            temp = [];
                        }
                    } else {
                        temp = [td, cellIndex, rowIndex];
                    }
                    win = tds.every(({
                        dataset: {
                            id
                        }
                    }, i) => id == i);
                    if (win) alert("Hello JavaScript!");
                }
            }
            form.addEventListener("click", exch);

        });
    </script>
</head>

<body>
    <div class="block">
        <form class="game">
            <table align="center" cellspacing="0" cellpadding="0">
                <tr>
                    <td class="color"></td>
                    <td class="color"></td>
                    <td class="color"></td>
                </tr>
            </table>
        </form>
    </div>
</body>

</html>
Ответить с цитированием
  #22 (permalink)  
Старый 13.01.2022, 11:04
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Огромная благодарность за понимание, гениальный Рони!
Круто... очень круто!!!
С наступающим Старым Новым годом, Профессионал!)))
P.S. Уже есть по коду вопросы, но я ещё не решаюсь их задать... пока поэкспериментирую самостоятельно.
Ответить с цитированием
  #23 (permalink)  
Старый 17.01.2022, 14:06
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145


Рони, а вообще возможно реализовать так, чтобы кроме 30-ой строки (let txts = "Hello|Java|script".split("|");) в вашем последнем коде, была бы, например, ещё такая - let txts = "Good|morning|forum".split("|");... ну, и соответственно, чтобы под это было alert("Good morning forum!");?
И чтобы кнопкой можно было менять текстовые сообщения с их обновлением без перезагрузки страницы...
P.S. Я самостоятельно за четверо суток не справился.
Ответить с цитированием
  #24 (permalink)  
Старый 17.01.2022, 15:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Борис К,
не понимаю.
Ответить с цитированием
  #25 (permalink)  
Старый 17.01.2022, 16:24
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Рони, если бы была не одна фраза для сборки, а несколько, которые сменялись бы рандомно кнопкой, и, соответственно, alert был бы каждый раз другой под свою фразу...
Ответить с цитированием
  #26 (permalink)  
Старый 17.01.2022, 17:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Борис К,
кнопку, массив фраз, элемент для вывода сообщения, набросайте, пожалуйста...
Ответить с цитированием
  #27 (permalink)  
Старый 17.01.2022, 18:43
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от рони
кнопку, массив фраз, элемент для вывода сообщения, набросайте, пожалуйста...
Слушаюсь, Учитель!))
Сообщение от рони
кнопку
<button id=""></button>
Сообщение от рони
массив фраз
Hello Java script (уже есть в вашем коде)
Good morning forum
Roney good luck))
Сообщение от рони
элемент для вывода сообщения
<p id="out"></p>
для
out.append("Hello Java script");
out.append("Good morning forum");
out.append("Roney good luck");

P.S. Надеюсь, правильно Вас понял.
Ответить с цитированием
  #28 (permalink)  
Старый 17.01.2022, 23:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Борис К,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <style type="text/css">
        @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600&display=swap');

        body {
            background-color: #D3D3D3
        }

        .block {
            background-color: var(--color);
            text-align: center;
            line-height: 100px;
            margin: var(--rip);
            flex-basis: calc(100% / var(--cols) - var(--rip) * 2);
            font-family: 'Playfair Display', serif;
            color: #FFFFFF;
            font-size: 48px;
        }

        .out:after {
            content: var(--snippet);
        }

        .btn:after {
            content: "init";
        }

        .game {
            display: flex;
            flex-wrap: wrap;
            --cols: 3;
            --gap: 2px;
            --rip: calc(var(--gap) - 1px);
            padding: var(--gap);
        }

        .game {
            width: 700px;
            margin: 40px auto;
        }

        .win .block {
            background-image: linear-gradient(45deg, rgba(255, 255, 255, .0) 50%, rgba(255, 255, 255, .8), rgba(255, 255, 255, .0) 70%), radial-gradient(190% 100% at 50% 0%, rgba(255, 255, 255, .7) 0%, rgba(255, 255, 255, .5) 50%, rgba(0, 0, 0, 0) 50%);
            box-sizing: border-box;
            background-position: 200% 0, 0 0;
            box-shadow: rgba(0, 0, 0, .3) 0 2px 5px;
            background-repeat: no-repeat;
            background-size: 200% 100%, auto;
            animation: anim 3s linear infinite;
        }

        @keyframes anim {
            from {
                background-position: 200% 0, 0 0;
            }

            to {
                background-position: -200% 0, 0 0;
            }
        }
    </style>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            let snippets = `Hello Java script !
            1 2 3 4 5 6 7 8 9 10 11 12
                            Good morning forum
                            Roney good luck`.split(/\n/);
            let colors = [
                '#0000FF', //blue
                '#FFFF00', //yellow
                '#008000', //green
                '#FFA500', // orange
                '#FF0000', //red
                '#800080', //purple
                '#808000', //olive
                '#00FF00', //lime
                '#800000', //maroon
                '#00FFFF', //aqua
                '#008080', //team
                '#000080', //navy
                '#FF00FF', //fushua
                '#808080' //gray
            ];
            let out = document.querySelector(".out");
            let btn = document.querySelector(".btn")
            let game = document.querySelector(".game");
            let win = _ => true;
            let temp = [];
            let cols = 3;

            function shuffle(array, elem) {
                let length = array.length,
                    arr = array.slice(0);
                const randomIndex = _ => Math.trunc(Math.random() * length);
                let k = randomIndex();
                if (elem) return arr[k];
                arr.forEach((_, i) => {
                    k = randomIndex();
                    [arr[i], arr[k]] = [arr[k], arr[i]];
                });
                return arr;
            }
            // rule
            let [a, b] = [0, 1];

            function rule(x, y) {
                return a == x && b == y
            }

            function exch(event) {
                if (win()) return;
                let block = event.target.closest(".block");
                if (block) {
                    let i = block.style.order;
                    let [c, d] = [i % cols, i / cols | 0];
                    if (temp.length) {
                        let x = Math.abs(c - temp[1]);
                        let y = Math.abs(d - temp[2]);
                        if (x > y)[x, y] = [y, x];
                        let move = rule(x, y);
                        if (move || block === temp[0]) {
                            [block.style.order, temp[0].style.order] = [temp[0].style.order, block.style.order];
                            temp = [];
                        }
                    } else {
                        temp = [block, c, d];
                    };
                    win()
                }
            }
            game.addEventListener("click", exch);

            function createContent() {
                if (!win()) return;
                temp = [];
                let snippet = shuffle(snippets, true).trim();
                let words = snippet.split(/\s+/);
                let len = words.length;
                cols = len > 5 ? 3 : len;
                let bgColor = shuffle(colors);
                out.style.setProperty("--snippet", `"collect ${snippet}"`);
                let div = document.createElement('div');
                div.classList.add('block');
                let content = words.map((word, i) => {
                    let elem = div.cloneNode();
                    elem.textContent = word;
                    elem.style.setProperty("--color", bgColor[i % bgColor.length]);
                    return elem;
                });
                shuffle(content).forEach(({
                    style
                }, i) => style.order = i);
                game.classList.remove("win")
                game.innerHTML = "";
                game.style.setProperty("--cols", cols);
                game.append(...content);
                win = _ => {
                    let validate = content
                        .every(({
                            style: {
                                order
                            }
                        }, i) => order == i);
                    if (validate) {
                        out.style.setProperty("--snippet", `"${snippet} right!!! More? click init"`);
                        game.classList.add("win")
                    }
                    return validate
                }
            }
            btn.addEventListener("click", createContent);
            createContent()
        });
    </script>
    <title></title>
</head>

<body>
    <p class="out"></p>
    <div class="game"></div>
    <button class="btn"></button>
</body>

</html>
Ответить с цитированием
  #29 (permalink)  
Старый 18.01.2022, 12:23
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

"Я влюбился в программиста
За его талант - так быстро
Рони создал чудо-код,
Аж душа моя поёт!"

© Борис К.
Ответить с цитированием
  #30 (permalink)  
Старый 22.01.2022, 13:53
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Рони, сдаюсь!(((
Возможно ли сделать так, чтобы ячейки располагались просто одна под другой?
А чтобы текст в одной ячейке состоял из двух слов, например, "turn on"?
P.S. Я самостоятельно за несколько суток решение так и не нашёл(((((
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в цикле for переходить к следующей итерации после завершения предыдущей? FRIE jQuery 5 30.07.2014 19:03
Как запустить функцию после завершения другой функции? Hurray Элементы интерфейса 2 12.05.2014 14:38
Выполнение после таймера hoax Элементы интерфейса 4 24.11.2013 11:23
Возврат значения функции после завершения анимации (затухания) grego jQuery 5 16.04.2013 22:25
Как обнулить переменные после завершения скрипта QRS jQuery 3 07.07.2010 03:08