PR

AIを使って神経衰弱を作ってみた|プログラミング知識がなくてもOK!

【広告】

ChatGPTを使って神経衰弱を作ってみました。
自力で作るなら何日もかかりそうなものが1時間程度でできました。

最初にざっくりと指示を出して、気になる部分を修正していくという作り方です。
簡単な修正は自力でやって、難しそうなところはAIに丸投げです。

まずは完成版で遊んでみてください。

神経衰弱をやってみよう!

有名なトランプゲームと同じルールです。
今回は数字ではなく動物の絵文字で作りました。同じ絵文字を揃えましょう。

ゲーム制作手順

まずは超ざっくりと指示を出します。

  • javascriptで神経衰弱を作って
  • カードは10枚

👆これだけの指示である程度完成しました。

👇これだけの指示でChatGPTの作ったゲームがこちらです。

同じ指示なら同じ結果になるというわけではありませんが、今回はこのようなアプリが出てきました。

主な修正点

  • 5列だとスマホでは幅が足りなくなるので、4列に変更して、カードを12枚にする
  • 左寄せを中央寄せに変更
  • 数字だと見た目が地味なので動物の絵文字に変更
  • クリアするとアラートが出る設定を、メッセージと「もう一回」ボタンを表示する設定に変更
  • 「もう一回」ボタンを押すと最初からやり直すことができるようにする

4列・12枚、中央寄せ、絵文字に変更は自力でサクッと。
「もう一回ボタン」はめんどくさいのでAIにお願いしました。

アラートではなく、メッセージと「もう一回」ボタンを出すようにしてください

👆これだけでAIがやってくれました。

簡単に完成して面白いですが、達成感がないのが問題点ですね。

完成版のコード

動物絵文字の神経衰弱アプリのコードを載せておくので、コピペして試してください。

私もコードの全てを理解しているわけではないのですが、想定通りに動いているならまあいいかという感じです。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>神経衰弱</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      body {
        width: 100%;
        height: 100vh;
        font-family: sans-serif;
        display: flex;
        justify-content: center;
      }

      h1 {
        margin: 30px 0;
        text-align: center;
      }

      .message {
        text-align: center;
        margin-bottom: 20px;
        display: none;
      }

      .message p {
        font-size: 18px;
      }

      .message button {
        margin-top: 20px;
        padding: 6px 12px;
        font-size: 16px;
        cursor: pointer;
      }

      .board {
        display: grid;
        grid-template-columns: repeat(4, 80px);
        gap: 10px;
      }

      .card {
        width: 80px;
        height: 100px;
        background: #ccc;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 40px;
        line-height: 1;
        cursor: pointer;
        user-select: none;
      }

      .card.open,
      .card.matched {
        background: #fff;
        cursor: default;
      }
    </style>
  </head>
  <body>
    <div class="wrap">
      <h1>神経衰弱</h1>
      <div class="message" id="message">
        <p id="clearText"></p>
        <button id="restartBtn">もう一回</button>
      </div>
      <div class="board" id="board"></div>
    </div>

    <script>
      const baseEmojis = ['🐼', '😸', '🐧', '🐋', '🐵', '🐭'];
      const emojis = [];

      baseEmojis.forEach((emoji) => {
        emojis.push(emoji);
        emojis.push(emoji);
      });

      const shuffleArray = (ary) => {
        let len = ary.length;
        while (len) {
          let i = Math.floor(Math.random() * len);
          let last = ary[--len];
          ary[len] = ary[i];
          ary[i] = last;
        }
        return ary;
      };

      const board = document.getElementById('board');
      const message = document.getElementById('message');
      const clearText = document.getElementById('clearText');
      const restartBtn = document.getElementById('restartBtn');

      let firstCard = null;
      let lock = false;
      let matchedCount = 0;
      const cardNum = 12;

      const initGame = () => {
        board.innerHTML = '';
        firstCard = null;
        lock = false;
        matchedCount = 0;

        message.style.display = 'none';
        clearText.textContent = '';

        const shuffled = shuffleArray([...emojis]);

        shuffled.forEach((emoji) => {
          const card = document.createElement('div');
          card.className = 'card';
          card.dataset.emoji = emoji;
          card.textContent = '';

          card.addEventListener('click', () => {
            if (lock || card.classList.contains('open') || card.classList.contains('matched')) {
              return;
            }

            card.classList.add('open');
            card.textContent = card.dataset.emoji;

            if (!firstCard) {
              firstCard = card;
              return;
            }

            if (firstCard.dataset.emoji === card.dataset.emoji) {
              firstCard.classList.add('matched');
              card.classList.add('matched');
              matchedCount += 2;

              if (matchedCount === cardNum) {
                message.style.display = 'block';
                clearText.textContent = 'クリアしました!';
              }
              firstCard = null;
            } else {
              lock = true;
              setTimeout(() => {
                firstCard.classList.remove('open');
                card.classList.remove('open');
                firstCard.textContent = '';
                card.textContent = '';
                firstCard = null;
                lock = false;
              }, 800);
            }
          });

          board.appendChild(card);
        });
      };

      restartBtn.addEventListener('click', () => {
        initGame();
      });

      initGame();
    </script>
  </body>
</html>
タイトルとURLをコピーしました