🐎BLOG🐎

Copilotつかってみようず!というLTをした

pulished:

Chat-GPT+GithubCopilot

10分LP:

 組み合わせるのがよさげ

① ChatGPTで大まかな仕様を想定 まずは、ChatGPTに大まかな仕様を提示し、どういうスタートをきるか

下記の仕様内容でJavaScriptのゲームを作ろうと考えています。
実装のフローを教えてください。

フロー例:

1. 仕様検討:済
2. game.htmlというファイルの作成
3. Canvasの構築
4. キャンバス内に5px x 5pxのスネークヘッドを作成する

仕様:

- 言語:JavaScript
- ゲーム内容:スネークヘッド
- キャンバスを作成する
- キャンバス内に5px x 5pxのスネークヘッドを作成する
- ユーザーはキーボードの左右上下矢印キーでスネークヘッドを操作する
- エサは5px x 5pxの正方形で、ランダムにキャンバス内に出現する
- ユーザーはスネークヘッドをキーボードで操作し、えさを食べる。
  - エサと頭が接触すると、エサ分(1x1)スネークの体が伸びる
- ゲームオーバー条件
  - スネークヘッドがキャンバスの外に出るとゲームオーバー
  - スネークヘッドが自分の体に接触するとゲームオーバー

② Chat-GPTからの返答

1. HTMLファイルの作成
最初に、HTMLファイルを作成し、必要なスクリプトとスタイルを読み込みます。

2. Canvasの作成
Canvasを作成するには、HTMLファイル内にcanvas要素を追加します。それに加えて、JavaScriptでCanvasコンテキストを取得し、Canvasに描画する方法を定義する必要があります。

3. スネークヘッドの作成
スネークヘッドをCanvas内に描画するために、JavaScriptでCanvasのコンテキストを使用して、正方形を描画します。これにより、スネークヘッドが初期位置に描画されます。

4. キーボードイベントの追加
キーボードの矢印キーの押下を監視するには、JavaScriptでキーボードイベントリスナーを追加する必要があります。キーが押されたときに、スネークの方向を変更する関数を呼び出します。

5. エサの追加
エサをCanvas内にランダムに配置するために、JavaScriptでランダムなx座標とy座標を生成する必要があります。それに加えて、エサを描画するために、Canvasのコンテキストを使用して、正方形を描画します。

6. スネークの移動と成長
スネークの移動と成長を制御するために、JavaScriptで次のステップの座標を計算する必要があります。ステップごとに、スネークがエサに接触しているかどうかをチェックし、接触している場合は、スネークの体を1つ成長させます。

7. ゲームオーバーのチェック
ゲームオーバーになる条件をチェックする必要があります。スネークがCanvas外に出た場合や、自分自身に接触した場合は、ゲームオーバーとなります。

8. ゲームループの作成
最後に、ゲームループを作成し、スネークの移動、エサの生成、ゲームオーバーのチェックを継続的に実行します。ゲームループは、requestAnimationFrameメソッドを使用して作成することができます。

③ GithubCopilotでコードを生成

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>game with chat-gpt</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    canvas {
      background: #eee;
      display: block;
      margin: 0 auto;
    }
  </style>
</head>
<body>

  <canvas id="gameWithChatGPT" width="480" height="320"></canvas>
  <script>

    // Canvasの取得
    const canvas = document.getElementById("gameWithChatGPT");
    // snakeHeadの作成
    const snakeHead = { x: 0, y: 0 };

    // snakeBodyの作成
    const snakeBody = [];

    // snakeの描画
    function drawSnake() {
      ctx.beginPath();
      ctx.rect(snakeHead.x, snakeHead.y, 10, 10);
      ctx.fillStyle = "#0f0";
      ctx.fill();
      ctx.strokeStyle = "#000";
    }

    // feedというエサの描画ファンクション
    function drawFeed() {
      // えさの大きさは1px x 1px
      ctx.beginPath();
      ctx.rect(feed.x, feed.y, 1, 1);
    }

    // キーボードの入力を受け取る
    document.addEventListener("keydown", keyDownHandler, false);
    document.addEventListener("keyup", keyUpHandler, false);

    function keyDownHandler(event) {
      if (event.key === "z") {
        paddle.dx = -paddle.speed;
      } else if (event.key === "x") {
        paddle.dx = paddle.speed;
      }
    }

  </script>
</body>

こんな感じで実際おみせしながら〜。 会社の経費でCopilot使えたりしたら裏山だぜ〜(´・ω・`)