2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Markdown AIを使った記事を投稿しよう!

「JavaScript を埋め込める + Webサイト化」ができる Markdown でゲーム作ってみた。

Posted at

はじめに

Markdown AI は、マークダウン記法で Web サイトが作れるサービスです。そして、script タグが使えるため、JavaScript を埋め込むこともできます。

私は、この JavaScript を埋め込めるという特徴に着目し「ちょっとしたゲームくらいなら作れるかも」と思いました。そして、それは正解でして、意外と簡単に作れてしまったのです。


今回、AI の力をかりて 2 つのゲームを作ってきましたので、本記事で紹介させてください。(遊んでいただくことも可能です。)

作成したゲーム
①選択肢で "1024" を目指すゲーム
②ランダムな数字を当てるゲーム


①選択肢で "1024" を目指すゲーム

選択肢で "1024" を目指すゲーム

緑色のボタン(選択肢)によって数字が増えていくゲームです。選択肢は選ぶたびにランダムで変更されます。出現する選択肢は画面下部で確認することができます。1024 を超えるとゲームオーバーです。

マークダウン
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1024</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
        }
        textarea {
            width: 70%;
            background-color: #f5f5cc;
            color: #774411;
            font-size: 15px;
            font-weight: bold;
            height: 50vh;
            overflow-y: scroll;
            resize: none;
            border: 2px solid #b3b300;
            border-radius: 4px;
            padding-top: 5px;
            padding-left: 10px;
        }
        #buttonsContainer {
            margin: 5px 0;
        }
        button {
            padding: 10px 20px;
            margin: 5px;
            font-size: 16px;
            font-weight: bold;
            color: white;
            background-color: #4CAF50;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s, transform 0.2s;
            height: 40px; /* 固定の高さを設定 */
            line-height: 1.2; /* テキストの高さをボタン内で調整 */
        }
        button:disabled {
            background-color: #ccc;
            cursor: not-allowed;
        }
        button:hover:enabled {
            background-color: #45a049;
            transform: scale(1.05);
        }
        #resetButton {
            background-color: #ff4d4d;
            margin-top: 10px;
        }
        #resetButton:hover {
            background-color: #ff3333;
        }
    </style>
</head>
<body>

<textarea readonly id="gameDisplay"></textarea>

<div id="buttonsContainer">
  <!-- ボタンが動的に生成されます -->
</div>
<button id="resetButton" onClick="resetGame()">リセット</button>

<script>
let number = 1;
let steps = 0;

const actions = [
  { label: "+1", apply: () => { number += 1; } },
  { label: "+2", apply: () => { number += 2; } },
  { label: "+3", apply: () => { number += 3; } },
  { label: "+5", apply: () => { number += 5; } },
  { label: "+10", apply: () => { number += 10; } },
  { label: "+20", apply: () => { number += 20; } },
  { label: "+30", apply: () => { number += 30; } },
  { label: "+50", apply: () => { number += 50; } },
  { label: "+100", apply: () => { number += 100; } },
  { label: "+200", apply: () => { number += 200; } },
  { label: "+300", apply: () => { number += 300; } },
  { label: "+500", apply: () => { number += 500; } },
  { label: "+1024", apply: () => { number += 1024; } },
  { label: "×2", apply: () => { number *= 2; } },
  { label: "1桁目を2倍", apply: () => { number = Math.floor(number / 10) * 10 + (number % 10) * 2; } },
  { label: "2桁目を2倍", apply: () => { 
      const hundreds = Math.floor(number / 100) * 100;
      const tens = Math.floor((number % 100) / 10) * 2 * 10;
      const units = number % 10;
      number = hundreds + tens + units;
    } 
  },
  { label: "3桁目を2倍", apply: () => { 
      const thousands = Math.floor(number / 1000) * 1000;
      const hundreds = Math.floor((number % 1000) / 100) * 2 * 100;
      const tensAndUnits = number % 100;
      number = thousands + hundreds + tensAndUnits;
    } 
  },
];

function randomizeButtons() {
  const container = document.getElementById("buttonsContainer");
  container.innerHTML = "";

  const shuffledActions = actions.sort(() => Math.random() - 0.5).slice(0, 2);

  shuffledActions.forEach(action => {
    const button = document.createElement("button");
    button.innerText = action.label;
    button.onclick = () => {
      action.apply();
      steps += 1;
      updateDisplay(action.label);
      randomizeButtons();
    };
    
    if (number > 1024) {
      button.disabled = true;
    }

    container.appendChild(button);
  });
}

function updateDisplay(action) {
  const target = document.getElementById("gameDisplay");
  let message = `${steps}回目の操作 (${action}): 現在の数値は ${number}`;

  if (number === 1024) {
    message += "\n\nおめでとう!1024に到達しました!";
  } else if (number > 1024) {
    message += "\n\n残念!1024を超えました。『リセット』をしてください。";
  }

  target.value += "\n" + message;
}

function resetGame() {
  number = 1;
  steps = 0;
  const target = document.getElementById("gameDisplay");
  target.value = "ゲーム開始!1024を目指してください。現在の数値は 1";
  randomizeButtons();
}

// 初期メッセージをセット
document.getElementById("gameDisplay").value = "ゲーム開始!1024を目指してください。現在の数値は 1";

// 初期化
randomizeButtons();
</script>

</body>
</html>

<br><!-- 改行を追加 -->

<details><summary>出現するボタンの一覧</summary>

- +1
- +2
- +3
- +5
- +10
- +20
- +30
- +50
- +100
- +200
- +300
- +500
- +1024
- 1桁目を2倍
- 2桁目を2倍
- 3桁目を2倍

</details>

②ランダムな数字を当てるゲーム

ランダムな数字を当てるゲーム

最初に 0 から 100 のランダムな数字(これを当てる)が作成されます。好きな数字を入力し「予想する」をクリックすると、その数字より大きいか小さいかが表示されます。それをヒントに、何回のヒントで当てることができるか?のゲームです。

マークダウン
<style>
    textarea {
        width: 70%;
        background-color: #e0e0ff;
        color: #3344ff;
        font-size: 14px;
        font-weight: bold;
        height: 50vh;
        overflow-y: scroll;
        resize: none;
        padding-top: 5px;
        padding-left: 10px;
    }

    #guessInput {
        width: 70%;
        margin-top: 10px;
        font-size: 14px;
    }

    .button-container {
        margin-top: 10px;
    }

    .button-container button {
        margin: 5px;
        padding: 8px 16px;
        font-size: 14px;
    }
</style>

<textarea readonly>
ゲーム開始!0から100までの数字を当ててください。
</textarea>

<input type="number" id="guessInput" placeholder="0~100の数字を入力">

<div class="button-container">
    <button onClick="guessNumber()">予想する</button>
    <button onClick="resetGame()">リセット</button>
</div>

<script>
    let targetNumber = Math.floor(Math.random() * 101);
    let attempts = 0;

    function guessNumber() {
        const guess = Number(document.getElementById("guessInput").value);
        const target = document.querySelector("textarea");
        attempts += 1;
        let message = "";

        if (guess < targetNumber) {
            message = `残念!もっと小さいよ! ${attempts}回目の予想: ${guess}`;
        } else if (guess > targetNumber) {
            message = `残念!もっと大きいよ! ${attempts}回目の予想: ${guess}`;
        } else {
            message = `正解! ${attempts}回で当てました!`;
        }
        
        target.value += "\n" + message;
        document.getElementById("guessInput").value = "";
    }

    function resetGame() {
        targetNumber = Math.floor(Math.random() * 101);
        attempts = 0;
        const target = document.querySelector("textarea");
        target.value = "ゲーム開始!0から100までの数字を当ててください。\n"; // メッセージの後に改行
        document.getElementById("guessInput").value = "";
    }
</script>

おわりに

AI に作ってもらったゲームをコピペして、ボタンひとつで Web サイトにしてみました。作業時間としては 30 分ほどで、こんな簡単に公開できたことに驚いています。

また、この記事では Markdown AI の JavaScript を埋め込めるという特徴に着目しましたが、実は「簡単に Web 公開できる」というのも素晴らしい特徴です。そのおかげで、皆さんにも遊んでもらうことができていますし、SNSなどで簡単に共有することもできています。


次は「簡単に Web 公開できる」という特徴もうまく使ってみたいですね。Markdown AI、まだまだいろいろ使えそうです。


以上です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?