Amazon Q CLIで横スクロールゲームを作ってもらう

# はじめに

この記事は以下のキャンペーンを見て作成しました。

https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

# 環境準備
## 実行環境
手元の端末がWindowsかつWSLも入れていないので、Amazon Linux 2023を用意します。(t2.microを利用)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/5173eda5-ee0d-4cfd-85d9-4a4dd5d6482c.png)

ゲームを実行するためhttpdを上げておきます。
```
sudo yum install -y httpd
```
```
sudo systemctl start httpd
sudo systemctl enable httpd
```

## Amazon Q Developerの準備
こちらのzipファイルを使用したインストールで進めます。

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing-ssh-setup-autocomplete.html

zipファイルの入手
```
curl --proto '=https' --tlsv1.2 -sSf "https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip" -o "q.zip"
```

zipファイルの解凍
```
[ec2-user@ip-172-30-1-235 ~]$ unzip q.zip
Archive:  q.zip
   creating: q/
  inflating: q/install.sh
  inflating: q/README
  inflating: q/BUILD-INFO
   creating: q/bin/
  inflating: q/bin/q
  inflating: q/bin/qterm
  inflating: q/bin/qchat
```
shellの設定を変更するか聞かれるので、「yes」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/51104c18-4859-4843-8dbb-9680f598c807.png)

ログイン方法を聞かれるので、Builder IDを選択。(持っていない方は作成しましょう！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/59561c05-4de0-4c2a-be4d-c935efa19435.png)

https://docs.aws.amazon.com/ja_jp/signin/latest/userguide/create-aws_builder_id.html

ブラウザを使用した確認が入ります。URLをクリックしてブラウザで開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/5979a52f-9ccd-4343-8e8e-2d9ca13df2e2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/25c07d71-aadf-4333-bbb2-39ab3f8ff526.png)
確認して続行を押すと、以下の許可確認が出るので、「アクセスを許可」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/dc73fa54-fc59-46e0-a052-7144b14ff9e3.png)
リクエストが承認されれば、ブラウザを閉じてもＯＫ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/2dba8133-a93d-4a07-a987-89708c6c2e29.png)

ターミナルの方にも以下のように出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/46c14ea5-c6a2-4fe0-a2dd-bf71cd4896ab.png)

shellの環境変数などを反映させておきます。
```
source ~/.bashrc
```
q doctorを実行してチェックしましょう。sshd_configに追加が必要なようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/b634cd50-3a9f-41f4-8d35-254786e09d43.png)

最下部に2行追加します。(sudo vi /etc/ssh/sshd_config のように管理者権限で編集)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/7fdbe8ab-29db-4b24-8c48-e8e457560bd5.png)
sshdを再起動して反映しておきます。
```
sudo systemctl restart sshd
```

sshを一旦抜けて、再度ログインします。

q integrations install sshを実行
```
q integrations install ssh
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/cb247e5f-81d6-4417-af45-f0447742e5bd.png)

sshd_configを読み取れるようにしておきます。(これをしないとq doctorでエラーになった・・・）
```
sudo chmod 644 /etc/ssh/sshd_config
```

q doctorで確認します。qtermが動作していないというエラー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/422fa1bc-bc22-4bc6-b450-f79c6627adbb.png)

qtermはローカルフォルダに配置されているので、実行します。
```
.local/bin/qterm
```
改めてq doctorを実行。以下のように出力されれば問題ないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/71e9ce30-6b81-4407-a7b4-f237c025cfc6.png)

## q chatの起動確認
q chat で実行します。
```
q chat
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/2907140d-13f5-44f5-9d80-f8a86a8483d8.png)

# Amazon Qへのプロンプト作成

## 何を依頼するか？
某横スクロールアクションにインスパイアされたゲームです・・・。
```
Javascriptで動くゲームを作成してください。やりたいものは以下の通りです。
# 概要
・横スクロールアクションゲーム。
・左から右に移動する。
・地面の穴に落ちると死亡。
・通常はミニサイズからスタート1×1マスのサイズ。
・パワーアップアイテムを取ると、横1×高さ2マスのサイズに大きくなる。
・ジャンプで2マスまで高くとべる。
・ダッシュで加速すると4マスまで飛べる。
・敵に正面からぶつかったとき、ミニサイズであったら志望。大きくなっていた場合はミニサイズになる。
・スクロールは数画面程度とし、最後まで到達するとゴールとする。

#敵の挙動
##くり
・ゆっくり真っ直ぐに歩いてくる。
・上から踏むと死ぬ。
##かめ
・ジャンプしながら近づいてくる。
・上から踏むと甲羅の状態になる。
・甲羅の状態を再度踏むと、自分の加速している方向へ真っ直ぐすべっていく。
・甲羅はすべっている状態で、段差にぶつかると逆方向へすべっていく。
・甲羅は穴があると落ちる。
```
## q chatで作成依頼

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/3e9c0f51-13ca-4f7d-ace0-5fb233ba1133.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/e41a4521-adaf-4d97-978b-f169dde30ad6.png)

't':trustにするとどんどん進めてくれるようなので、tを入力します。

# Amazon Qの出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/b7cb55e8-807e-4be0-8297-a22d6014fbd1.png)

# 実際に出来上がった物
黄色い箱はパワーアップアイテムです。
茶色い四角はくり、緑は亀の模様。(亀はスタート直後に穴に落下するので踏む挙動は確認できず・・・）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/db4f2a86-5697-4eeb-823a-33af59319772.png)

# 改造依頼
横のスクロールが少なかったので、5画面程にしてもらいました。
q chatを一度終了していたため、現状を把握してから改修内容を検討しているようです。（なぜか回答は英語・・・）
改修する部分は差分が表示されるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/a58bd4d6-7dc0-47b6-8933-38f4e94539dc.png)

出力時の情報はこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/438e28be-ffac-4b2a-9e12-05133ff7b8d5.png)
山のような表現も追加されました。緑の平らな部分はかめを踏んだところ（甲羅）。自分のキャラはパワーアップアイテムを取った状態です。
この先進んでも敵はいっさい出てきませんでした・・・敵の出現条件などの定義が必要そうですね・・・。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/aabefe11-0460-4803-86c5-c6e8f08505b5.png)