そうだ！パンにバターを塗るゲームを作ろう！(?)【Amazon Q CLIくん頼んだ】

## はじめに
暑いですね。
こんな日はクーラーの効いた部屋で最高によく分からないけどなんか面白いミニゲームをして時間を潰したいですね！

でも、世の中には良作ゲームが多い。さらに最近は課金要素の多いゲームが多いから迂闊に手を出せない。でもよく分からないミニゲームはやりたい。([最高によく分からないミニゲーム](https://isuta.jp/category/iphone/2015/07/436504)で世界ランカーの経歴持ち)

そうなれば、やっぱ自分で作るしかないですね！

そんなところに現れたのが、Amazon Q CLIでゲームを作るとTシャツがもらえるというイベント。

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

もちろん夏服を持ってない自分は参加します。

## Amazon Q CLIの始め方

### インストール方法
Amazon Q CLIは、ターミナルから直接AIアシスタントと対話できるツールです。

1. **公式サイトからダウンロード**

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

2. **基本的な使い方**
   ```bash
   # AIチャットを開始
   q chat
   
   # モデルを選択（今回はClaude 4 Sonnetを選択）
   /model
   
   # ヘルプを表示
   /help
   ```

## Qも入ったことだし、なにつくろうかなぁ〜〜！

### そうだパンにバターを塗るゲームを作ろう(唐突)

パンが視界にあったのでそれにバターをいかに早く丁寧にぬれるかを競うゲームがあれば、いい感じに時間が潰せそうだなと思い作ろうと思いました。

↓その結果自分が投げたプロンプト

> パンにバターを塗るゲームという馬鹿げたゲームを作りたいです。大体やりたいこととしては、マウスでバターナイフを操作するゲームで、角度（0-45度が最適？）と速度（速すぎるとパンが破れる）を調整し、塗り残しがないように均等に塗るみたいなことをやりたいです。綺麗にぬれるとスコアが高くなります。

![スクリーンショット 2025-06-15 13.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/6c4f61a7-3c5e-4952-8b67-020881a8e83c.png)


さて、面白いアイデアとは言ってくれたものの、この意味がわからないゲームをQ CLIちゃんは作ってくれるのでしょうか？

## さすがにこれは自分が悪い

で、一番最初にできたゲームがこちら

![スクリーンショット 2025-06-15 13.23.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/39d68057-d49d-4def-82f4-fb34cbc9639c.png)

パンらしきものにバターナイフが表示されてマウスで、バターナイフを動かせます。
矢印キーで角度を調節できクリックしながら押すことで、バターが塗れるみたいです。

さっとひと塗り

![スクリーンショット 2025-06-15 13.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/85cbeab0-3733-486a-a0a5-9dbc1ce0feb9.png)

なんかとんでもなくでかい❌がでてきてゲームオーバーになりました。。。厳しすぎだろ！！！何もゲームとして成り立っていないですが、さすがに自分のプロンプトがわるいですね。

しかし、こんな雑なアイデアも一旦形にしてくれるのは嬉しいものですね！

### 段階的な機能追加リクエストが効果的っぽい

ここで一旦自分の頭を動かして、このゲームに何を求めるのかを考えてみました。

- バターを塗っている爽快感
- ちょっとむずい操作感
- 速度を競いたい
- これからのバター業界を担うゲームにできるか

そんなこんなでゲームの方向性を変え、ベースとなるゲームを作成してもらってからその後徐々に昨日を追加していく方針にしました。

```
【初期プロンプト】
パンにバターを塗るゲームを作りたいです。
- マウスでナイフを操作
- 速度制限（速すぎるとパンが破れて追加時間のペナルティ）
- 塗り残しがないように塗り切る
- 最後に塗るまでにかかった時間で競う

【追加機能リクエスト】
- バターゲージシステム（バターは無限ではない）
- 補給エリア（バターを補給する場所）
- パンの耳は塗れない仕様
- ペナルティシステムの調整
```

Q CLIは段階的な要求に対して柔軟に対応し、**650行の完全に動作するゲーム**を生成！

## 実際に作ってくれたゲーム

ゲームタイトル：Simple Butter Game
(どっかのタイミングでシンプルなバターゲームにとかいったらゲームタイトルになっちまってた)

- 基本的なルール
    - パン全体にバターを塗り切る
    - その塗り切った時間で競う
- 追加ルール
    - あまりにも早くバターを塗りすぎるとペナルティ(+何秒かされる)
    - バターはもちろん有限なので途中で補給しないといけない

みたいな感じで、字面からはクソゲー感漂いますが、やってみたら確かにクソだが意外と面白い最高の自分好みのゲームが生まれました！


↓こうやってバターを塗っていくとバターゲージが減っていき、
![スクリーンショット 2025-06-19 23.40.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/fbd4a9b3-fcbe-4cda-b83e-9899a9ecaf82.png)

↓バターがなくなればバター補給エリアからバターを調達
![スクリーンショット 2025-06-19 23.40.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/00ef2f4a-27f2-40e8-acbf-1f577e60ed7a.png)

↓で、最終的にバターを塗り切ったらVICTORY!

![スクリーンショット 2025-06-19 23.41.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/2e65488d-5033-49c4-87cf-59c27f557395.png)

↓速さを競うのですが、あまりにもバターを塗りすぎるとパンがかわいそうなのでペナルティです！
![スクリーンショット 2025-06-20 0.22.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515830/b99cd1a8-feb8-40aa-95f9-f70a1d7a639f.png)

ということで、ちょうどいいスピードで塗りながら適宜バターをいい感じに補給して効率よくバターをパンに塗ることが求められる最高のゲームが誕生しました！(見た目は若干汚いけど遊べればなんでもOK！)


## Q CLIはよしなに機能を作ってくれるナイスガイ
### 1. リアルな速度検知システム

Q CLIは速度による破れシステムを実装：

```python
def apply_butter(self, mouse_x, mouse_y, speed, has_butter):
    """マウス位置にバターを塗る（パンの耳は塗れない）"""
    # 速度チェック（速すぎるとパンが破れる）
    current_time = time.time()
    time_diff = current_time - self.last_butter_time
    
    # 速度が速すぎる場合（0.05秒以内に連続塗布 = 危険）
    if time_diff < 0.05 and speed > 15:
        self.speed_warnings += 1
        
        # 警告が3回以上でパンが破れる
        if self.speed_warnings >= 3:
            self._tear_bread(mouse_x, mouse_y)
            return False
    elif time_diff > 0.2:
        # ゆっくり塗っている場合は警告をリセット
        self.speed_warnings = max(0, self.speed_warnings - 1)
```

**特徴：**
- 3段階の警告システム（⚠️→⚠️⚠️→💥）
- 時間ベースの速度計測
- ゆっくり塗ると警告がリセットされる寛容なシステム

### 2. バター資源管理システム

```python
class SimpleKnife:
    def __init__(self):
        # バターゲージシステム
        self.butter_gauge = 100.0  # 最大100%
        self.max_butter = 100.0
        self.butter_consumption_rate = 0.2  # 塗布時の消費量
        
    def consume_butter(self):
        """バターを消費（塗布時に呼び出し）"""
        if self.butter_gauge > 0:
            # 速度に応じた消費量調整（速いほど多く消費）
            consumption = self.butter_consumption_rate * (1 + self.speed * 0.02)
            self.butter_gauge = max(0, self.butter_gauge - consumption)
            return True
        return False
```

**戦略的要素：**
- 速く塗るとバターを多く消費
- バターがなくなると塗れない
- 補給エリアでの時間管理が重要

### 3. パンの耳システム（塗れない領域）

```python
class SimpleBread:
    def __init__(self, x, y, width, height):
        # パンの耳の太さ
        self.crust_thickness = 30  # 30ピクセルの太い耳
        
        # 実際にバターを塗れる領域（耳を除いた内側）
        self.inner_x = self.x + self.crust_thickness
        self.inner_y = self.y + self.crust_thickness
        self.inner_width = self.width - (self.crust_thickness * 2)
        self.inner_height = self.height - (self.crust_thickness * 2)
```

**リアリズムの追加：**
- パンの耳は茶色く表示
- 塗れる領域が明確に区別される

### 4. 補給エリアとアニメーション

```python
class ButterSupplyArea:
    def update(self, knife_x, knife_y, dt):
        """ナイフとの距離をチェックして補給状態を更新"""
        distance = math.sqrt((knife_x - (self.x + self.width//2))**2 + 
                           (knife_y - (self.y + self.height//2))**2)
        
        self.is_active = distance <= self.radius
        
        # パルスアニメーション
        self.pulse_timer += dt * 3
        self.pulse_scale = 1.0 + 0.2 * math.sin(self.pulse_timer)
```

**視覚的フィードバック：**
- バター塊がパルスアニメーション
- 補給中は「Refilling...」表示
- 4箇所の補給エリアで戦略性UP

## ここもよかったな！

### 1. 環境設定の自動化

Q CLIは必要なライブラリを自動で検出・インストール：

```bash
🛠️ Using tool: execute_bash (trusted)
⋮
● I will run the following shell command: pip3 install pygame numpy
⋮
↳ Purpose: PygameとNumpyをインストール
```

### 2. エラーの即座解決

実行時エラーを検出し、自動的に修正案を提示→修正：
```
ValueError: invalid color argument
→ アルファ値を含む色の処理を自動修正
```

### 3. ゲームバランスの調整

自分のプレイテストのフィードバックに基づいて、Q CLIが即座にパラメータを調整：
- バター消費率の最適化
- 速度閾値の調整
- ペナルティ時間のバランス

## まとめ

### Amazon Q CLIと仲良くなるには？

雑に投げれば雑なものが返ってくる。だからこそ、優しさを持って以下のことをしたらそれに応えてくれるなぁと実感しました。

1. **段階的な開発アプローチ** - 基本機能から徐々に拡張
2. **具体的な要求仕様** - 明確なゲームシステムの説明
3. **実際にやってみたフィードバック** - 操作感までは調整できないので実際に触ってみてどう思ったかは伝える

### パンが視界に入っただけでここまでのものが生まれる世界

ゲームの題材なんにしよ〜！あ、パンがあるな〜で1,2時間後には自分好みのゲームができてしまい、大事なのはAIと戯れること以上にいろんな景色やものをみて想像を膨らませることなのかもしれないなぁと感じました。

とはいえ、視界から生まれたアイデアもこういう技術があるからこう発展させられるかも！みたいな次のステップまで考えられるとより具現化に近づくんだろうなというところで、技術力も発想力も人間らしく深めていきたいなと思いました！

### おわりに
パンっていっぱい書いたらお腹空きました。
みんな〜！は〜い！なにがすき〜？バターたっぷり塗ったパンよりもQ CLI!