見出し画像

チャットGPT-4oは簡単なゲームを一行の指示で作れるしプログラム学習にも使える

今までのGPTとか他の言語モデルでも作れない事はなかったのですが、出力されるコードの質が微妙だったり、修正が必要だったりしたんですよね。

でも、チャットGPT-4oならマジで、簡単な指示文だけでモグラ叩きゲームが作れました。

きっかけとなったのは、先日、こんなXのポストを見かけました。

以前GPT3.5の時にJavaScriptとPythonで、キャッチ ザ フルールやジャンケンゲームのコードを書いて持った経験があるんですが、その時は修正が多くて結構てこずりました。

なので、半信半疑だったのですが、Claud3と比べてGPT-4oがどのくらいやるんだろうか?と軽い気持ちで試してみると、マジで作れたのでビックリです。

JavaScriptでモグラ叩きゲーム

さっきのXのポストをマネて出した指示文は「ジャバスクリプトでもぐら叩きを作りたいです、必要なプログラムを考えてファイルリストを作ってください」です。出てきた回答は

ChatGPT

もぐら叩きゲームをJavaScriptで作成するために、以下のファイルリストとその役割を提案します。

ファイルリスト

  1. index.html

    • ゲームのHTML構造を定義します。

  2. style.css

    • ゲームの見た目やレイアウトを整えるためのCSSファイルです。

  3. script.js

    • ゲームのロジックを実装するJavaScriptファイルです。

  4. images/

    • ゲームで使用する画像(例:もぐら、背景、ハンマーなど)を格納するディレクトリです。

各ファイルの内容

1. index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>もぐら叩きゲーム</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="game-container">
        <h1>もぐら叩きゲーム</h1>
        <div class="score-board">
            スコア: <span id="score">0</span>
        </div>
        <div class="grid">
            <div class="hole" id="hole1"></div>
            <div class="hole" id="hole2"></div>
            <div class="hole" id="hole3"></div>
            <div class="hole" id="hole4"></div>
            <div class="hole" id="hole5"></div>
            <div class="hole" id="hole6"></div>
            <div class="hole" id="hole7"></div>
            <div class="hole" id="hole8"></div>
            <div class="hole" id="hole9"></div>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>

2. style.css

body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background-color: #f0f0f0;
}

.game-container {
    text-align: center;
}

.score-board {
    margin-bottom: 20px;
    font-size: 24px;
}

.grid {
    display: grid;
    grid-template-columns: repeat(3, 100px);
    gap: 10px;
}

.hole {
    width: 100px;
    height: 100px;
    background-color: #8b4513;
    border: 2px solid #654321;
    position: relative;
}

.hole .mole {
    width: 80px;
    height: 80px;
    background-image: url('images/mole.png');
    background-size: cover;
    position: absolute;
    top: 10px;
    left: 10px;
    display: none;
}

3. script.js

let score = 0;
let activeHole = null;
let timer = null;

document.addEventListener('DOMContentLoaded', () => {
    const holes = document.querySelectorAll('.hole');

    holes.forEach(hole => {
        hole.addEventListener('click', () => {
            if (hole === activeHole) {
                score++;
                document.getElementById('score').textContent = score;
                hideMole();
            }
        });
    });

    startGame();
});

function startGame() {
    score = 0;
    document.getElementById('score').textContent = score;
    timer = setInterval(showMole, 1000);
}

function showMole() {
    if (activeHole) {
        hideMole();
    }
    const holes = document.querySelectorAll('.hole');
    const randomHole = holes[Math.floor(Math.random() * holes.length)];
    randomHole.innerHTML = '<div class="mole"></div>';
    randomHole.querySelector('.mole').style.display = 'block';
    activeHole = randomHole;
}

function hideMole() {
    if (activeHole) {
        activeHole.innerHTML = '';
        activeHole = null;
    }
}

4. images/ ディレクトリ

  • mole.png (もぐらの画像)

  • その他必要な画像(背景やハンマーなど)

まとめ

これで基本的なもぐら叩きゲームが作成できます。このセットアップを元に、タイマーの追加やレベル調整、さらにデザインの改善など、自由に拡張していくことができます。


以上が出力分です。
html.css.scriptとファイルが分かれているのに、それぞれのコードをちゃんと書いていますね。これには驚きました。

ただ
background-image: url('images/mole.png');
この部分で使う画像はありません。

GPTの無料プランでは画像生成はできないので、AI画像生成サイトのLeonardo.aiでモグラの画像は別途作ってもらいました。

こんなゲームができました

マウスでモグラをクリックするとスコアが増えていきます。

シンプルですがチャント動きました。

ちょっと寂しかったので、GPTに他にいる画像ファイルの種類を聞き、さらにそれを埋め込んだコードを生成して欲しいと頼みました。

突貫工事で生成しました。

穴と背景、モグラを叩いた時に表示されるハンマーが追加されています。やっつけで作ったのでアレですが、後はドンドンカスタマイズしていけば自由にゲームが作れるのが分かりました。

ゲーム製作しながらプログラム勉強もできる

分からないところは全部聞けばGPTが丁寧に解説してくれます。

ハンマーの動きのコードを作ってもらいました。
style.cssに追加しろとの事です。


.hammer {
    width: 50px;
    height: 50px;
    position: absolute;
    top: -30px;
    left: 30px;
    transform: rotate(-45deg);
    z-index: 1;
}

出てきたコードが分からなかったら「以下のコードの意味を初心者にも分かるように教えて下さい。」と聞いてその下にコードをコピペすれば解説してくれます。


チャットGTP
このCSSコードは、ハンマーの画像に対するスタイルを定義しています。各プロパティが何を意味するのか、初心者向けに説明します。

.hammer

これはCSSクラスの定義です。HTMLでクラスが "hammer" と指定された要素に対して、このスタイルが適用されます。

width: 50px;

ハンマーの画像の横幅(幅)を50ピクセルに設定しています。ピクセルは画面上の小さな点の単位で、50pxは幅が50ピクセルという意味です。

height: 50px;

ハンマーの画像の縦幅(高さ)を50ピクセルに設定しています。これも幅と同様に、50ピクセルの高さを指定しています。

position: absolute;

このプロパティは、要素の位置を親要素の中で絶対位置(absolute positioning)で配置することを指定します。これにより、 topleft プロパティを使って、要素の正確な位置を指定できます。

top: -30px;

このプロパティは、ハンマーの画像の上端を基準にして、親要素の上端から上方向に30ピクセル移動させます。負の値なので、上に移動します。

left: 30px;

このプロパティは、ハンマーの画像の左端を基準にして、親要素の左端から右方向に30ピクセル移動させます。

transform: rotate(-45deg);

このプロパティは、ハンマーの画像を回転させます。ここでは、時計回りに45度回転させています。負の値なので、反時計回りに回転させます。

z-index: 1;

このプロパティは、要素の重なり順序を指定します。z-index が大きい要素ほど前面に表示されます。ここでは、他の要素よりも前に表示されるように設定しています。

まとめ

このスタイルは、50x50ピクセルのハンマー画像を親要素の相対位置から少し上に持ち上げ、左にずらし、反時計回りに45度回転させ、他の要素より前に表示するようにしています。これにより、ハンマーが叩く動作をリアルに表現できます。


ゲーム制作の敷居が劇的に下がった

今までは検討違いや、惜しいコードを平気で書いてきたのですが、GDP-4oになり大幅に機能が向上しました。

これだけ手伝ってくれるなら、簡単に好きにゲーム作れそうです。ドンドン色々な種類のゲームを作ってみて、また記事にしてみますので、皆様のお役に立てたら幸いです。それではまた。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?