Amazon Q Developer CLI でゲーム作る、そしてTシャツをもらう

技術勉強のためにDevelopersIO見ていたらこんな投稿が

https://dev.classmethod.jp/articles/q-developer-cli-game-cbs/

どうやらAWS Communityのほうで「Amazon Q Developer CLIでゲーム作ってブログに体験談書いたらTシャツあげるべ」というキャンペーンをやっているとか

https://community.aws/content/2xIoduO0xhkhUApQpVUIqBFGmAc/build-games-with-amazon-q-cli-and-score-a-t-shirt

なので急遽自分のオンボロノートPCにAmazon Qを入れて参加することにした

# そもそもAmazon Qって何よ

> Amazon Q は、組織での仕事の進め方を変える生成 AI アシスタントです。Amazon Q は、ソフトウェアデベロッパー、ビジネスインテリジェンスアナリスト、コンタクトセンターの従業員、サプライチェーンアナリスト、および AWS で開発を行うすべての人に特化した機能を備えており、すべての従業員がデータに関するインサイトを得てタスクの処理を加速できるよう支援します。
出典：https://aws.amazon.com/jp/q/

とのこと。つまりAWS使ってる人のためのAIアシスタント。Amazon Q Developerはこれの開発特化版で、Amazon Q Developer CLIはさらにこれをクライアント側で扱えるようにしたもの。コマンドライン上で使えるので便利。

# 開発を行っていく前に
#### 前提として
今回はWindows 10が搭載されているSuraface Proで開発やっていきます。
他のスペックはこんな感じ
| 1 | 2 |
|:-:|:-:|
|プロセッサ|Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz   2.71 GHz|
|実装RAM|8.00 GB|
|グラフィックス カード|Intel(R) HD Graphics 620 (128 MB)|
|システム|64ビット OS、x64 ベースプロセッサ|
#### Amazon Q Developer CLIをコマンド扱えるようにしよう
一番最初のリンクに書いてある方法に沿えばAWS Builderへの登録からAmazon Q Developer CLIのインストールまではできる。具体的にはこのリンクに従ってwslとUbuntu 24.04入れて仮想環境上でAmazon Qを動かしていきます。

https://community.aws/content/2v5PptEEYT2y0lRmZbFQtECA66M/the-essential-guide-to-installing-amazon-q-developer-cli-on-windows

#### pygameを扱えるようにしよう
今回はpythonでゲームを作っていきたいので、pygameというゲーム製作用のパッケージを入れていきます。これも最初のリンクに大体書いて...**ない！**
否、実際は書いているのだが著者の環境ではできない。なのでsudo aptを使って入れました。
~~~
puts 'sudo apt install python3-pygame'
~~~

:::note warn
注意
この方法でpygameをインストールすることはできますが、sampleフォルダが抜けているので最初のリンクみたいにサンプルゲームで遊ぶことはできません。あしからず。
:::

# Amazon Q を使っていこう①：お手並み拝見

準備は完了したので実際にAmazon Qを使ってゲームを作~~って~~らせていきます。はい、今回は自分ではコーディングをせず、**Amazon Qに指示を与えるだけでゲームを作っていきます**。

まずはお手並み拝見として「**矢印キーでキャラクターを動かせるゲーム**(?)」を作らせてみます。

```
## ユーザー
python3.12とpygameを使ってゲーム製作を行いたいです。

## Amazon Q
Pythonとpygameを使ってゲーム製作を行いたいですね。まず、Python 3.12とpygameがインストールされているか確認しましょう。

Python 3.12.3がインストールされていることが確認できました。次にpygameがインストールされているか確認しましょう。

素晴らしいです！Python 3.12.3とpygame 2.5.2が既にインストールされています。これでゲーム開発を始める準備が整っています。

pygameを使った簡単なゲームの例として、シンプルな四角形を動かすゲームを作成してみましょう。以下のコードを参考にしてください：
```

```python
import pygame
import sys

# pygameの初期化
pygame.init()

# 画面サイズの設定
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("シンプルなゲーム")

# 色の定義
BLACK = (0, 0, 0)
RED = (255, 0, 0)

# プレイヤーの設定
player_size = 50
player_x = WIDTH // 2 - player_size // 2
player_y = HEIGHT // 2 - player_size // 2
player_speed = 5

# ゲームループ
clock = pygame.time.Clock()
running = True

while running:
    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # キー入力の処理
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= player_speed
    if keys[pygame.K_RIGHT]:
        player_x += player_speed
    if keys[pygame.K_UP]:
        player_y -= player_speed
    if keys[pygame.K_DOWN]:
        player_y += player_speed
    
    # 画面の端での処理
    player_x = max(0, min(WIDTH - player_size, player_x))
    player_y = max(0, min(HEIGHT - player_size, player_y))
    
    # 描画
    screen.fill(BLACK)
    pygame.draw.rect(screen, RED, (player_x, player_y, player_size, player_size))
    pygame.display.flip()
    
    # フレームレートの設定
    clock.tick(60)

# pygameの終了
pygame.quit()
sys.exit()
```

少しの会話だけで作ってくれました。実際に遊んでみましょう。

![はじめのいっぽ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/2654af3d-fbd5-4bba-a1e7-4e203074e5a1.jpeg)

実際に矢印キーでキャラ操作はできます。ただなんかラグがひどいですし、窓枠の文字は化けちゃってます。Q に直させてみましょう。

```
## ユーザー
simple_game.pyを実行しました。キーによる操作は問題なくできるのですが、ラグがひどいように感じられます。またウィンドウの文字が正常に表示されていない可能性があります。

## Amazon Q
ゲームの実行に関する問題についてご相談いただきありがとうございます。simple_game.pyの実行時にラグが発生し、ウィンドウの文字表示にも問題があるようですね。まずはファイルの内容を確認して、問題の原因を特定しましょう。

コードを確認したところ、いくつかの問題点が見つかりました。ラグと文字表示の問題に対処するために、以下の改善を提案します：

1. フレームレートの問題：現在60FPSに設定されていますが、システムによっては処理が追いつかない可能性があります。

2. イベント処理の最適化：現在のキー入力処理方法は連続的な入力に対して遅延を感じやすい実装になっています。

3. 文字表示の問題：日本語のウィンドウタイトル「シンプルなゲーム」が正しく表示されていない可能性があります。

以下の修正を行いましょう：

ゲームのラグと文字表示の問題を解決するために、以下の改善を行いました：

1. パフォーマンスの最適化
   - デルタタイム（dt）を導入して、フレームレートに関係なく一定の速度で動くようにしました
   - 現在のFPSを画面に表示するようにしたので、パフォーマンスを確認できます

2. 文字表示の問題解決
   - ウィンドウタイトルを英語に変更（"Simple Game"）
   - フォントを明示的に初期化し、システムフォントを使用
   - 画面上にFPSとプレイヤーの位置情報を表示

3. その他の改善
   - 白色（WHITE）を追加して文字を見やすく表示
   - フレームレートの設定を変数化（target_fps）して調整しやすくしました
```

やってくれました。すごいですね。

# Amazon Q を使っていこう②：ジャンル指定

今度は「タイピングゲーム」とジャンルを指定してみます。

```
## ユーザー
ありがとうございます。ついでにですが、単純なタイピングゲームのコードを"simple_typing_game.py"として書いてくれると助かります。

## Amazon Q
喜んでタイピングゲームのコードを作成します。シンプルで使いやすいタイピングゲームを`simple_typing_game.py`として作成しましょう。

シンプルなタイピングゲームを作成しました！
```

かなりあいまいな指示でしたがやってくれましたね。遊んでみるとこんな感じです。

![はじめのいっぽ_たいぴんぐ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/169bb6b5-57d9-4f9d-be3a-033de0cb6b25.jpeg)

うーむお見事。

# Amazon Qを使っていこう③：本格開発

#### で、何を作るの？

～♪（軽妙な音楽）

I have a 「キャラ操作ゲーム」
![はじめのいっぽ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/d49bdd9c-94a5-42de-8cf7-318bda98409d.jpeg)

I have a 「タイピングゲーム」
![はじめのいっぽ_たいぴんぐ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/d2a8cd87-9d29-41d4-88f8-6cb543f19c40.jpeg)

「キャラ操作ゲーム」～「タイピングゲーム」～

**Oh**

![たいぴんぐあくしょん.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/de5459c5-d059-44b7-a263-b709a8a6feb3.jpeg)

「**アクションタイピングゲーム**」
...を作らせました。指示としてはこんなの。
```
## ユーザー
ありがとうございます。
では一つ注文なのですが、このsimple_typing_game.pyにおいて、タイピングゲームの画面にwで上、aで左、sで下、dで右に動くような緑色の丸いキャラクターを追加してほしいです。
またそのコードを新しく"typing_action_game.py"として保存してほしいです。
```
非常に単純な指示で作ってくれました。ただ直す点はたくさんあります。
まずwasdでキャラ操作ができる代わりに**タイピングで使えなくなってます**。
あとラグも何となくひどいです。
シバイて行きましょう。
```
User: まずはwasdキーをキャラクターの移動だけでなくタイピングにも使えるようにしてほしいです。次に、タイピングが誤っている場合は文字入力を受け付けないようにしてほしいです。

Amazon Q: I understand your requests for the typing_action_game.py file. You want to make two changes:
```

**うわぁ！いきなり英語になるな！**
...といったようにたまに英語で応答してきます。でもやってくれることはやってくれるので臆せずに開発を進めていきましょう。

#### オモロさを加えていく
今のままではゲームの面白さとしてはドベなのでいろいろ加えていきます。具体的には：
+ **時間制限制ルールからライフ制ルールに変更する**
+ **画面上を動き、ぶつかるとダメージを与えてくる敵を追加する**
+ 問題に正答することで敵にダメージが与えられるようにする
+ 敵の体力が減るほど、長い単語が出てくるようにする

をAmazon Qに指示して加えさせます。そうして出来上がったのが

![アツいたいぴんぐあくしょん.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4108453/a7ecb79b-4e7e-4bcb-a473-416b8f908656.jpeg)


こちらです。
...**そしてエントリー締め切りが近づいてきたのでここでタッチダウン！**

# まとめ
今回はAamzon Q Developer CLIを使ってゲーム作りをやってみました。
完走した感想 ~~（激うまギャグ）~~ ですが
+ チャットだけでゲーム作りができるのはすごい
+ ポンコツPCでもローカルで生成AI使えるのはうれしい
+ たまにAI側が愚直に指示に従って変なの作ってくるので、「無意識下の要求」を洗い出すのに重宝する

といった感じです。かなり有能なので皆さんも使ってみてはいかがでしょうか。

今回製作したゲームは以下のgithub からダウンロードできるので、興味を持った人は遊んでくれると嬉しいです。
（githubにアップロードするのもAmazon Qがやってくれました。ぐう有能）

https://github.com/Creamy-Potage/Build-Games-with-Amazon-Q-CLI-entry.git

# あとがき

今回がQiitaでの初記事です。
楽しんで読んでくれましたら非常にうれしいです。

~~あとはこれをエントリーしてTシャツをもらうだけや！~~