43号線を西へ東へ

フリーランスの備忘録、アウトプットの実験場

世間のお盆休みにREVERSI(オセロゲーム)に興じる

このブログはプロモーションリンクを含むときがあります


一人職場につき、普段から仕事が無ければふらっと万博に行ったり出来るので、特に盆休みはありません。

月〜水も仕事だったので、家族は親戚の皆さんと旅行にいってしまって私だけ取り残されていました。

夜の時間がたっぷりあったので、AIを活用してREVERSI(オセロゲーム)を作って、そしてプレイしまくっていました。

REVERSI(オセロゲーム)ゲーム画面

起動画面

ゲーム画面

勝ちました!

買った時に出るスプラッシュ画面。もっとセレブレーション感があってもいいですね

戦績一覧

ChatGPTとCursorを使ったコード生成

ひな形をChatGPT-5で作成して、その後Cursorで改変していきました。

ChatGPTにコードを全部任せるのが心配になった

パワーアップしたとちまたで話題のGPT-5ですが、コードのブラッシュアップする際に、もともとあった機能をごっそり忘れて消去することがありました。

日本で「書く」という言葉は、1から書くのとリライトの同様の意味を持地ます。AIに投げかけるこちらの指示は修正のつもりでも、ChatGPTが1から書き出すことがあるという話しをどこかのブログで見ました。

ごっそり機能が抜け落ちる様な現象は、こちらのプロンプトの書き方のように思いますので、今後は気をつけないといけないですね。

とりあえず今回は、ChatGPTとCursorの二刀流でとりあえずゲームできるところまで持ってきました。

AIはRedmeも作成してくれる

自動的に、Readmeファルを作成してくれます。

CPU側が差し手を決めるのは、下記の理論に基づくそうです。

  • Minimax: ゲーム木の探索
  • Alpha-Beta枝刈り: 探索効率の向上
  • 段階別戦略: 序盤・中盤・終盤で異なる評価基準

おかげさまで上級レベルでは全く勝てません。

クリックでReadmeファイルを表示します

# Mac版オセロ(リバーシ)ゲーム

## 概要

このアプリケーションは、Pythonとtkinterを使用して開発されたMac用のオセロ(リバーシ)ゲームです。ユーザー登録機能、戦績管理、CPU対戦機能を備えた本格的なオセロゲームです。

## 主な機能

### 🎮 ゲーム機能
- **8x8のオセロボード**: 標準的なオセロゲームボード
- **合法手の表示**: 置ける場所を黄色い点で表示
- **リアルタイムスコア表示**: 黒と白の石の数をリアルタイムで表示
- **パス機能**: 合法手がない場合の自動パス処理
- **ゲーム終了判定**: 連続パスまたは全マス埋まり時の自動終了

### 🤖 CPU対戦機能
- **3段階の難易度**:
  - **弱**: 浅い探索 + ランダム性高(初心者向け)
  - **普**: 中程度の探索 + 少しランダム(中級者向け)
  - **強**: 深い探索 + 完全に最適(上級者向け)
- **AIアルゴリズム**: Minimax + Alpha-Beta枝刈り
- **評価関数**: 位置重み、可動力、危険マス、終盤の石の数を考慮

### 👥 ユーザー管理機能
- **ユーザー登録**: 複数ユーザーの登録・管理
- **戦績記録**: 勝利・敗北・引き分けの記録
- **勝率表示**: 各ユーザーの勝率を計算・表示
- **戦績一覧**: 全ユーザーの戦績を一覧表示

### 🎯 ゲームモード
- **CPU対戦**: 白プレイヤーがCPU(AI)
- **対人戦**: 2人の人間プレイヤー

## 動作環境

- **OS**: macOS(Python 3.x + tkinter)
- **Python**: 3.6以上
- **必要なライブラリ**: 
  - tkinter(標準搭載)
  - json(標準搭載)
  - random(標準搭載)
  - copy(標準搭載)
  - os(標準搭載)
  - pathlib(標準搭載)

## インストール方法

1. **Pythonの確認**
   ```bash
   python3 --version
   ```

2. **アプリケーションのダウンロード**
   - `Othello-mac.py`ファイルをダウンロード

3. **実行**
   ```bash
   python3 Othello-mac.py
   ```

## 使い方

### 初回起動
1. アプリケーションを起動すると、プレイヤー選択画面が表示されます
2. 黒プレイヤーと白プレイヤーを選択
3. ゲームモード(CPU対戦/対人戦)を選択
4. 難易度を選択(CPU対戦時のみ)
5. 「▶ ゲーム開始」ボタンをクリック

### ゲームプレイ
- **石を置く**: 黄色い点が表示されている場所をクリック
- **パス**: 合法手がない場合、「パス」ボタンをクリック
- **リセット**: 「リセット」ボタンでゲームを初期状態に戻す

### ユーザー管理
- **ユーザー追加**: 「ユーザー管理」ボタンから新規ユーザーを追加
- **戦績確認**: 「戦績一覧」ボタンで全ユーザーの戦績を確認
- **ユーザー削除**: 「ユーザー管理」から不要なユーザーを削除

## ゲームルール

### 基本ルール
1. **開始**: 中央4マスに黒と白の石を交互に配置
2. **手番**: 黒が先手、白が後手
3. **石の配置**: 相手の石を挟むことができる場所にのみ配置可能
4. **石の反転**: 挟まれた相手の石は自分の石に変わる
5. **パス**: 合法手がない場合はパス
6. **終了**: 両プレイヤーがパスした場合、または全マスが埋まった場合

### 勝利条件
- ゲーム終了時に石の数が多いプレイヤーの勝利
- 同数の場合は引き分け

## AIの仕組み

### 評価関数
- **位置重み**: 角(120点)、端(20点)、中央(1-15点)、Xマス(-25点)
- **可動力**: 置ける手の数の差
- **危険マス**: XマスやCマスの危険度評価
- **終盤の石の数**: 終盤では石の数を重視

### 探索アルゴリズム
- **Minimax**: ゲーム木の探索
- **Alpha-Beta枝刈り**: 探索効率の向上
- **段階別戦略**: 序盤・中盤・終盤で異なる評価基準

## ファイル構成

Othello-mac/ ├── Othello-mac.py # メインアプリケーションファイル ├── setting/ │ └── users.json # ユーザーデータ保存ファイル └── README.md # このファイル

## データ保存

- **保存場所**: `setting/users.json`
- **保存内容**: ユーザー名、勝利数、敗北数、引き分け数、総局数
- **自動保存**: ゲーム終了時に自動的に戦績が更新・保存

## トラブルシューティング

### よくある問題

1. **プレイヤー選択画面が表示されない**
   - Python 3.xがインストールされているか確認
   - tkinterが利用可能か確認

2. **戦績が保存されない**
   - `setting`フォルダの書き込み権限を確認
   - ディスク容量を確認

3. **ゲームが重い**
   - 難易度を「弱」に設定
   - 他のアプリケーションを終了

### エラーログ
- コンソールにエラー情報が表示されます
- 問題が発生した場合は、エラーメッセージを確認してください

## 開発情報

### 技術仕様
- **言語**: Python 3.x
- **GUI**: tkinter
- **データ形式**: JSON
- **アーキテクチャ**: オブジェクト指向設計

### 学習ポイント
- クラスとオブジェクト指向プログラミング
- GUIプログラミング(tkinter)
- ゲームロジックの実装
- ファイル入出力(JSON)
- アルゴリズム(Minimax、評価関数)

## ライセンス

このプロジェクトは学習目的で作成されています。自由に使用・改変してください。

## 更新履歴

- **v1.0**: 初期リリース
  - 基本的なオセロゲーム機能
  - CPU対戦機能
  - ユーザー管理機能
  - 戦績管理機能

## 作者

Mac版オセロゲーム開発チーム

---

**注意**: このアプリケーションは学習用に作成されています。商用利用の際は適切なライセンス確認を行ってください。


今後

ゲーム終盤になるとフリーズすることがちょこちょこあるので、AIに頑張ってバグ取りしてもらおうと思います。

棋譜的なものを残して、学習機能を作るのもおもしろいかもしれません。