11

morsmordre: mortis requiem

Объявление

лучший эпизод

HUNT OR BE HUNTED
лучший пост от питера

Питер был просто в восторге от самого себя. Он не только отбил заклинание, не только попал по противнице — он даже заставил слизеринку петь! Более того, он получил одобрение от профессора — первый раз на его памяти! За «выступлением» Алекто он наблюдал с особым упоением. Как мог сдерживался, чтобы не захихикать вместе с частью зрителей, и то только потому, что Визберг следил теперь за их сражением внимательно. А смех над соперником — не то, что поощрялось на дуэльной арене.

новости #202 от профессионального умирателя Мем дня получай мем каждый день ПАЗЛЫв ожидании оранжевой листвы Бродилка прогуляйся по магическому Лондону

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » morsmordre: mortis requiem » зеркало еиналеж » МЕМО - найди пару!


МЕМО - найди пару!

Сообщений 1 страница 14 из 14

1

МЕМО - НАЙДИ ПАРУ!

https://i.ibb.co/2dMvW8H/107.webp Дамы и господа! Предлагаю нам немного развеяться и поиграть в легенькую (хехехе) игру! Она максимально проста - тыкаете на ячейки, получаете изображение и ищите ему пару. Первый уровень 20 пар. Скажете легко? Хрень?! Тогда соберите двадцать пар и переходите к среднему уровню - 30 пар! Все еще плюнуть и растереть? Тогда 40 пар ждут вас! https://i.ibb.co/2dMvW8H/107.webp

Суть, конечно, не в наградах, ведь главное игра. Но и награды есть:

Уровень: изи катка - 50 монет.
Уровень: легкая мигрень - 100 монет.
Уровень: чёувасздесьпроисходит?! - 150 монет в профиль!

Делайте скриншот и присылайте ниже!

[removeprofile][html]
<style>
.memo{
  --tile:98px;
  --gap:14px;
  --radius:16px;
  --cols:8;
 

  --main: #763c38;
  --secondary: #918f82;
  --front: #5c2f2a;     
  --back: #918f82;
  --accent: #763c38;
  --ok: #c4a38a;
  --text: #f5e9d8;
  --muted: #d4c4b0;

  font-family: "American Typewriter", "Georgia", "Times New Roman", serif;
  max-width: 1000px;
  margin: 20px auto;
  padding: 18px;
  background: linear-gradient(180deg, #3f2a26, #52423d);
  border-radius: 24px;
  box-shadow: 0 12px 32px rgba(0,0,0,.55);
  color: var(--text);
}

.memo h3{margin:0 0 .6rem; font-size:22px; color:var(--text)}
.memo .memo__controls{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.memo .memo__btn{
  appearance:none;
  border:1px solid #a16e64;
  background:#3f2a26;
  color:var(--text);
  padding:7px 12px;
  border-radius:12px;
  cursor:pointer;
  font-size:13.5px;
}
.memo .memo__btn:hover{
  border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(118,60,56,.3) inset;
}
.memo .memo__status{font-size:14px;color:var(--muted)}

.memo .grid{
  display:grid;
  grid-template-columns:repeat(var(--cols),var(--tile));
  gap:var(--gap);
  justify-content:center;
}

/* Адаптив */
@media (max-width:920px){.memo{--tile:88px}}
@media (max-width:780px){.memo{--cols:7;--tile:82px}}
@media (max-width:680px){.memo{--cols:6;--tile:76px}}
@media (max-width:560px){.memo{--cols:5;--tile:68px}}

.memo input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.memo .memo-card{width:var(--tile);height:var(--tile);border-radius:var(--radius);position:relative;perspective:1000px}

.memo .memo-face{
  position:absolute; inset:0; border-radius:var(--radius);
  transition:transform .55s cubic-bezier(0.23,1,0.32,1);
  backface-visibility:hidden;
  display:grid; place-items:center;
  user-select:none;
  box-shadow: inset 0 0 0 1px rgba(0,0,0,.4);
}
.memo .memo-front{
  background:var(--front);
  border:2px solid #8a5a52;
}
.memo .memo-back{
  background:var(--back);
  border:2px solid var(--main);
  transform:rotateY(180deg);
  overflow:hidden;
}
.memo .memo-back img{
  width:100%; height:100%; object-fit:cover;
}

.memo input:checked + label .memo-front{transform:rotateY(180deg)}
.memo input:checked + label .memo-back{transform:rotateY(360deg)}

.memo label{display:block;width:100%;height:100%;cursor:pointer}
.memo label:focus-visible .memo-front{box-shadow:0 0 0 4px rgba(118,60,56,.6)}
.memo label:hover .memo-front{box-shadow:0 0 0 3px rgba(118,60,56,.35) inset}

.memo label[data-locked]{pointer-events:none}
.memo label[data-locked] .memo-back{
  box-shadow:0 0 0 3px rgba(196,163,138,.7) inset;
  filter: brightness(1.1);
}
</style>

<div class="memo" id="memo40">
  <form>
    <h3>MEMO — найди пары</h3>
    <div class="memo__controls">
      <small>Открывай по две карточки</small>
      <div class="memo__status">Найдено: <b class="memo__found">0</b> / 20</div>
      <button class="memo__btn" type="reset">НОВАЯ ИГРА</button>
    </div>
    <div class="grid" id="memo-grid"></div>
  </form>
</div>

<script>
(() => {
  const root = document.getElementById('memo40');
  if (!root) return;

  const grid = root.querySelector('#memo-grid');
  const foundEl = root.querySelector('.memo__found');

 
  const imageUrls = [
    "https://upforme.ru/uploads/001c/a5/42/2/928103.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/796942.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/920791.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/210253.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/539522.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/570476.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/142848.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/792870.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/364056.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/940122.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/216561.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/193804.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/313646.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/539420.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/498050.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/805098.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/84622.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/958212.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/592960.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/387049.jpg"
  ];
 
  let opened = [];
  let lock = false;
  let found = 0;

  function rndInt(max) {
    if (window.crypto?.getRandomValues) {
      const buf = new Uint32Array(1);
      crypto.getRandomValues(buf);
      return buf[0] % max;
    }
    return Math.floor(Math.random() * max);
  }

  function shuffle(arr) {
    for (let m = arr.length; m; ) {
      const i = rndInt(m--);
      [arr[m], arr[i]] = [arr[i], arr[m]];
    }
    return arr;
  }

  function buildDeck() {
    grid.innerHTML = '';
    const deck = shuffle([...imageUrls, ...imageUrls]);

    deck.forEach((imgUrl, idx) => {
      const card = document.createElement('div'); card.className = 'memo-card';
      const input = document.createElement('input'); input.type='checkbox'; input.id = `mc${idx}`;
      const label = document.createElement('label'); label.setAttribute('for', input.id);

      const front = document.createElement('span'); front.className = 'memo-face memo-front';
      const back = document.createElement('span'); back.className = 'memo-face memo-back';
     
      const img = document.createElement('img');
      img.src = imgUrl;
      img.alt = '';
      back.appendChild(img);

      label.append(front, back);
      card.append(input, label);
      grid.appendChild(card);
    });

    opened = []; lock = false; found = 0;
    foundEl.textContent = '0';
  }

  root.addEventListener('change', (e) => {
    const input = e.target;
    if (input.tagName !== 'INPUT') return;
    if (input.nextElementSibling.dataset.locked) { input.checked = true; return; }
    if (lock && input.checked) { input.checked = false; return; }

    if (input.checked) {
      opened.push(input);
      if (opened.length === 2) {
        lock = true;
        const [a, b] = opened;
        const imgA = a.nextElementSibling.querySelector('img').src;
        const imgB = b.nextElementSibling.querySelector('img').src;

        if (imgA === imgB) {
          a.nextElementSibling.dataset.locked = '1';
          b.nextElementSibling.dataset.locked = '1';
          found++;
          foundEl.textContent = found;
          opened = [];
          lock = false;
        } else {
          const toClose = opened.slice();
          opened = [];
          setTimeout(() => {
            toClose.forEach(inp => inp.checked = false);
            lock = false;
          }, 800);
        }
      }
    } else {
      opened = opened.filter(x => x !== input);
    }
  });

  root.querySelector('form').addEventListener('reset', () => setTimeout(buildDeck, 10));

  buildDeck();
})();
</script>[/html]

Код:
[spoiler="изи катка"]*скриншот*[/spoiler]
[spoiler="легкая мигрень"]*скриншот*[/spoiler]
[spoiler="чёувасздесьпроисходит?!"]*скриншот*[/spoiler]

0

2

[removeprofile][html]<!-- === MEMO 30 пар === -->
<style>
.memo{
  --tile:86px;
  --gap:13px;
  --radius:15px;
  --cols:9;
 
  --main: #763c38;
  --secondary: #918f82;
  --front: #5c2f2a;
  --back: #918f82;
  --accent: #763c38;
  --ok: #c4a38a;
  --text: #f5e9d8;
  --muted: #d4c4b0;

  font-family: "American Typewriter", "Georgia", "Times New Roman", serif;
  max-width: 1080px;
  margin: 20px auto;
  padding: 20px;
  background: linear-gradient(180deg, #3f2a26, #52423d);
  border-radius: 24px;
  box-shadow: 0 12px 35px rgba(0,0,0,.55);
  color: var(--text);
}

.memo h3{margin:0 0 .6rem; font-size:23px; color:var(--text)}
.memo .memo__controls{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.memo .memo__btn{
  appearance:none;
  border:1px solid #a16e64;
  background:#3f2a26;
  color:var(--text);
  padding:8px 14px;
  border-radius:12px;
  cursor:pointer;
  font-size:14px;
}
.memo .memo__btn:hover{border-color:var(--accent); box-shadow:0 0 0 3px rgba(118,60,56,.3) inset}
.memo .memo__status{font-size:14.5px;color:var(--muted)}

.memo .grid{
  display:grid;
  grid-template-columns:repeat(var(--cols),var(--tile));
  gap:var(--gap);
  justify-content:center;
}

/* Адаптив */
@media (max-width:1050px){.memo{--tile:80px; --cols:8}}
@media (max-width:920px){.memo{--tile:76px; --cols:7}}
@media (max-width:780px){.memo{--cols:6; --tile:72px}}
@media (max-width:620px){.memo{--cols:5; --tile:68px}}

.memo input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.memo .memo-card{width:var(--tile);height:var(--tile);border-radius:var(--radius);position:relative;perspective:1000px}

.memo .memo-face{
  position:absolute; inset:0; border-radius:var(--radius);
  transition:transform .55s cubic-bezier(0.23,1,0.32,1);
  backface-visibility:hidden;
  display:grid; place-items:center;
  user-select:none;
  box-shadow: inset 0 0 0 1px rgba(0,0,0,.4);
}
.memo .memo-front{background:var(--front); border:2px solid #8a5a52}
.memo .memo-back{background:var(--back); border:2px solid var(--main); transform:rotateY(180deg); overflow:hidden}
.memo .memo-back img{width:100%; height:100%; object-fit:cover}

.memo input:checked + label .memo-front{transform:rotateY(180deg)}
.memo input:checked + label .memo-back{transform:rotateY(360deg)}

.memo label{display:block;width:100%;height:100%;cursor:pointer}
.memo label:focus-visible .memo-front{box-shadow:0 0 0 4px rgba(118,60,56,.6)}
.memo label:hover .memo-front{box-shadow:0 0 0 3px rgba(118,60,56,.35) inset}

.memo label[data-locked]{pointer-events:none}
.memo label[data-locked] .memo-back{
  box-shadow:0 0 0 3px rgba(196,163,138,.7) inset;
  filter: brightness(1.1);
}
</style>

<div class="memo" id="memo60">
  <form>
    <h3>MEMO — 30 пар</h3>
    <div class="memo__controls">
      <small>Открывай по две карточки</small>
      <div class="memo__status">Найдено: <b class="memo__found">0</b> / 30</div>
      <button class="memo__btn" type="reset">НОВАЯ ИГРА</button>
    </div>
    <div class="grid" id="memo-grid"></div>
  </form>
</div>

<script>
(() => {
  const root = document.getElementById('memo60');
  if (!root) return;

  const grid = root.querySelector('#memo-grid');
  const foundEl = root.querySelector('.memo__found');

 
  const imageUrls = [
    "https://upforme.ru/uploads/001c/a5/42/2/495755.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/166316.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/467275.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/321423.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/597520.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/786282.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/306003.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/244565.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/474662.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/174823.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/412842.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/372340.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/760551.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/362890.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/880343.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/167219.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/12539.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/929858.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/327974.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/986606.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/306158.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/119439.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/232588.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/380910.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/767740.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/52375.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/943320.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/325405.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/361116.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/459145.jpg"
  ];
 

  let opened = [];
  let lock = false;
  let found = 0;

  function rndInt(max) {
    if (window.crypto?.getRandomValues) {
      const buf = new Uint32Array(1);
      crypto.getRandomValues(buf);
      return buf[0] % max;
    }
    return Math.floor(Math.random() * max);
  }

  function shuffle(arr) {
    for (let m = arr.length; m; ) {
      const i = rndInt(m--);
      [arr[m], arr[i]] = [arr[i], arr[m]];
    }
    return arr;
  }

  function buildDeck() {
    grid.innerHTML = '';
    const deck = shuffle([...imageUrls, ...imageUrls]);

    deck.forEach((imgUrl, idx) => {
      const card = document.createElement('div'); card.className = 'memo-card';
      const input = document.createElement('input'); input.type='checkbox'; input.id = `mc${idx}`;
      const label = document.createElement('label'); label.setAttribute('for', input.id);

      const front = document.createElement('span'); front.className = 'memo-face memo-front';
      const back = document.createElement('span'); back.className = 'memo-face memo-back';
     
      const img = document.createElement('img');
      img.src = imgUrl;
      img.alt = '';
      back.appendChild(img);

      label.append(front, back);
      card.append(input, label);
      grid.appendChild(card);
    });

    opened = []; lock = false; found = 0;
    foundEl.textContent = '0';
  }

  root.addEventListener('change', (e) => {
    const input = e.target;
    if (input.tagName !== 'INPUT') return;
    if (input.nextElementSibling.dataset.locked) { input.checked = true; return; }
    if (lock && input.checked) { input.checked = false; return; }

    if (input.checked) {
      opened.push(input);
      if (opened.length === 2) {
        lock = true;
        const [a, b] = opened;
        const imgA = a.nextElementSibling.querySelector('img').src;
        const imgB = b.nextElementSibling.querySelector('img').src;

        if (imgA === imgB) {
          a.nextElementSibling.dataset.locked = '1';
          b.nextElementSibling.dataset.locked = '1';
          found++;
          foundEl.textContent = found;
          opened = [];
          lock = false;
        } else {
          const toClose = opened.slice();
          opened = [];
          setTimeout(() => {
            toClose.forEach(inp => inp.checked = false);
            lock = false;
          }, 850);
        }
      }
    } else {
      opened = opened.filter(x => x !== input);
    }
  });

  root.querySelector('form').addEventListener('reset', () => setTimeout(buildDeck, 10));

  buildDeck();
})();
</script>[/html]

0

3

[removeprofile][html]<!-- === MEMO HARD — 40 пар (80 карточек) === -->
<style>
.memo{
  --tile:82px;
  --gap:12px;
  --radius:14px;
  --cols:10;
 
  --main: #763c38;
  --secondary: #918f82;
  --front: #5c2f2a;
  --back: #918f82;
  --accent: #763c38;
  --ok: #c4a38a;
  --text: #f5e9d8;
  --muted: #d4c4b0;

  font-family: "American Typewriter", "Georgia", "Times New Roman", serif;
  max-width: 1120px;
  margin: 20px auto;
  padding: 20px;
  background: linear-gradient(180deg, #3f2a26, #52423d);
  border-radius: 24px;
  box-shadow: 0 12px 35px rgba(0,0,0,.6);
  color: var(--text);
}

.memo h3{margin:0 0 .6rem; font-size:23px; color:var(--text)}
.memo .memo__controls{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.memo .memo__btn{
  appearance:none;
  border:1px solid #a16e64;
  background:#3f2a26;
  color:var(--text);
  padding:8px 14px;
  border-radius:12px;
  cursor:pointer;
  font-size:14px;
}
.memo .memo__btn:hover{border-color:var(--accent); box-shadow:0 0 0 3px rgba(118,60,56,.3) inset}
.memo .memo__status{font-size:14.5px;color:var(--muted)}

.memo .grid{
  display:grid;
  grid-template-columns:repeat(var(--cols),var(--tile));
  gap:var(--gap);
  justify-content:center;
}

/* Адаптив */
@media (max-width:1120px){.memo{--tile:76px; --cols:9}}
@media (max-width:980px){.memo{--tile:72px; --cols:8}}
@media (max-width:820px){.memo{--cols:7; --tile:68px}}
@media (max-width:720px){.memo{--cols:6; --tile:64px}}
@media (max-width:580px){.memo{--cols:5; --tile:62px}}

.memo input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.memo .memo-card{width:var(--tile);height:var(--tile);border-radius:var(--radius);position:relative;perspective:1000px}

.memo .memo-face{
  position:absolute; inset:0; border-radius:var(--radius);
  transition:transform .55s cubic-bezier(0.23,1,0.32,1);
  backface-visibility:hidden;
  display:grid; place-items:center;
  user-select:none;
  box-shadow: inset 0 0 0 1px rgba(0,0,0,.45);
}
.memo .memo-front{background:var(--front); border:2px solid #8a5a52}
.memo .memo-back{background:var(--back); border:2px solid var(--main); transform:rotateY(180deg); overflow:hidden}
.memo .memo-back img{width:100%; height:100%; object-fit:cover}

.memo input:checked + label .memo-front{transform:rotateY(180deg)}
.memo input:checked + label .memo-back{transform:rotateY(360deg)}

.memo label{display:block;width:100%;height:100%;cursor:pointer}
.memo label:focus-visible .memo-front{box-shadow:0 0 0 4px rgba(118,60,56,.6)}
.memo label:hover .memo-front{box-shadow:0 0 0 3px rgba(118,60,56,.35) inset}

.memo label[data-locked]{pointer-events:none}
.memo label[data-locked] .memo-back{
  box-shadow:0 0 0 3px rgba(196,163,138,.7) inset;
  filter: brightness(1.12);
}
</style>

<div class="memo" id="memo80">
  <form>
    <h3>MEMO HARD — 40 пар</h3>
    <div class="memo__controls">
      <small>Открывай по две карточки</small>
      <div class="memo__status">Найдено: <b class="memo__found">0</b> / 40</div>
      <button class="memo__btn" type="reset">НОВАЯ ИГРА</button>
    </div>
    <div class="grid" id="memo-grid"></div>
  </form>
</div>

<script>
(() => {
  const root = document.getElementById('memo80');
  if (!root) return;

  const grid = root.querySelector('#memo-grid');
  const foundEl = root.querySelector('.memo__found');

  // ==================== ВСТАВЛЯЙ СЮДА 40 ССЫЛОК НА КАРТИНКИ ====================
  const imageUrls = [
    "https://upforme.ru/uploads/001c/a5/42/2/260357.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/232841.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/189724.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/798893.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/425541.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/521749.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/483170.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/961726.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/191045.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/300457.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/57774.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/550921.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/522115.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/273689.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/789313.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/540058.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/550228.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/223627.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/219238.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/20301.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/923415.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/710394.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/883427.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/225444.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/341258.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/417537.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/476244.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/212900.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/254419.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/35554.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/678809.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/82223.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/573545.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/806184.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/550605.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/539790.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/974328.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/913827.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/434813.jpg",
    "https://upforme.ru/uploads/001c/a5/42/2/840757.jpg"
  ];
  // ===========================================================================

  let opened = [];
  let lock = false;
  let found = 0;

  function rndInt(max) {
    if (window.crypto?.getRandomValues) {
      const buf = new Uint32Array(1);
      crypto.getRandomValues(buf);
      return buf[0] % max;
    }
    return Math.floor(Math.random() * max);
  }

  function shuffle(arr) {
    for (let m = arr.length; m; ) {
      const i = rndInt(m--);
      [arr[m], arr[i]] = [arr[i], arr[m]];
    }
    return arr;
  }

  function buildDeck() {
    grid.innerHTML = '';
    const deck = shuffle([...imageUrls, ...imageUrls]);

    deck.forEach((imgUrl, idx) => {
      const card = document.createElement('div'); card.className = 'memo-card';
      const input = document.createElement('input'); input.type='checkbox'; input.id = `mc${idx}`;
      const label = document.createElement('label'); label.setAttribute('for', input.id);

      const front = document.createElement('span'); front.className = 'memo-face memo-front';
      const back = document.createElement('span'); back.className = 'memo-face memo-back';
     
      const img = document.createElement('img');
      img.src = imgUrl;
      img.alt = '';
      back.appendChild(img);

      label.append(front, back);
      card.append(input, label);
      grid.appendChild(card);
    });

    opened = []; lock = false; found = 0;
    foundEl.textContent = '0';
  }

  root.addEventListener('change', (e) => {
    const input = e.target;
    if (input.tagName !== 'INPUT') return;
    if (input.nextElementSibling.dataset.locked) { input.checked = true; return; }
    if (lock && input.checked) { input.checked = false; return; }

    if (input.checked) {
      opened.push(input);
      if (opened.length === 2) {
        lock = true;
        const [a, b] = opened;
        const imgA = a.nextElementSibling.querySelector('img').src;
        const imgB = b.nextElementSibling.querySelector('img').src;

        if (imgA === imgB) {
          a.nextElementSibling.dataset.locked = '1';
          b.nextElementSibling.dataset.locked = '1';
          found++;
          foundEl.textContent = found;
          opened = [];
          lock = false;
        } else {
          const toClose = opened.slice();
          opened = [];
          setTimeout(() => {
            toClose.forEach(inp => inp.checked = false);
            lock = false;
          }, 900);
        }
      }
    } else {
      opened = opened.filter(x => x !== input);
    }
  });

  root.querySelector('form').addEventListener('reset', () => setTimeout(buildDeck, 10));

  buildDeck();
})();
</script>[/html]

+1

4

сама
изи катка

https://upforme.ru/uploads/001b/b9/c5/603/t370474.jpg

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/603/t169953.jpg

+1

5

селин

вау как прикольно

изи катка

https://upforme.ru/uploads/001b/b9/c5/413/393186.png

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/413/371287.png
 

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/413/952330.png
 

Отредактировано Tybalt Yaxley (2026-05-14 22:55:08)

+2

6

селин
изи катка

https://i.imgur.com/BXp0gVI.jpeg

легкая мигрень

https://i.imgur.com/LipKKre.jpeg

чёувасздесьпроисходит?!

https://i.imgur.com/rPjM1Dg.jpeg

это оказалось проще, чем я ожидал - я не знаю, кто на картинках, но они достаточно яркие-разные, чтобы можно было запомнить <3

+2

7

селин
изи катка

https://upforme.ru/uploads/001b/b9/c5/599/t804217.png

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/599/t988552.png

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/599/t361205.png

+1

8

селин
изи катка

https://upforme.ru/uploads/001b/b9/c5/611/t517511.png

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/611/t79464.png

+1

9

селин
чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/578/t793918.png

+1

10

селин

Все три. )))
https://upforme.ru/uploads/001b/02/f2/180/t802454.png
https://upforme.ru/uploads/001b/02/f2/180/t180514.png
https://upforme.ru/uploads/001b/02/f2/180/t425330.png

Награду в профиль тетушки плиз

+1

11

селин
изи катка

https://upforme.ru/uploads/001b/b9/c5/547/65464.png

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/547/56464.png

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/547/74574.png

+1

12

сама
изи катка

https://upforme.ru/uploads/001b/b9/c5/99/t686732.png

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/99/t558137.png

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/99/t581100.png

+1

13

L.
изи катка

https://upforme.ru/uploads/001b/b9/c5/519/t16362.jpg

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/519/t587965.jpg

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/519/t328394.jpg

0

14

L.
изи катка

https://upforme.ru/uploads/001b/b9/c5/609/t127246.png

легкая мигрень

https://upforme.ru/uploads/001b/b9/c5/609/t332091.png

чёувасздесьпроисходит?!

https://upforme.ru/uploads/001b/b9/c5/609/t80048.png

+1


Вы здесь » morsmordre: mortis requiem » зеркало еиналеж » МЕМО - найди пару!