(Part5より)
実は別のプログラムソースを元に、ChatGPTにリバースエンジニアリングさせたことがありました。要は、ソースコードから「仕様書」を作らせたのです。この時はかなりの精度で”生成”できたので、今回完成したプログラムについても作らせることにしました。
以下のソースプログラムから、プログラム仕様書を作成してください。
・プログラムの概要
・ゲームの遊び方
・メソッドの一覧
・変数一覧表
・仕様の拡張案
/*
* イスカンダルのトーフ屋ゲーム
* original copyright 1978 by N.Tsuda
* convert & arrange to Java version by T.Sunahachi 2023
*/
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
public class TofuGame {
static int STARTGOLD = 5000; // 開始時の所持金
static int GOALGOLD = 30000; // 目標金額
static int TOFUBAIKA = 50; // トーフの売価
static int TOFUGENKA = 40; // トーフの原価
static int SELLMAX = {500, 200, 100}; // 天気ごとの最大売上個数
static String TENKIWORDS = {"晴れ", "曇り", "雨"}; // 天気を表す言葉
static int hare; // 晴れの確率
static int kumori; // 曇りの確率
static int ame; // 雨の確率
private static Random random = new Random();
// メインメソッド
public static void main(String args) {
Scanner scanner = new Scanner(System.in);
String input;
(以下略)
すると、こんな感じの文章が出来上がってきたのですが……(レイアウトが乱れているのは、HatenaBlogのエディタの勝手な挙動のせい)
プログラム仕様書
プログラムの概要:
このプログラムは「イスカンダルのトーフ屋ゲーム」というゲームを実行するものです。プレイヤーはトーフ屋を経営し、目標金額を達成することを目指します。プレイヤーとコンピュータが交互にトーフを作り、天候に応じてトーフを売ります。売上に基づいて所持金が増減し、先に目標金額に到達したプレイヤーが勝利となります。ゲームの遊び方:
a. プログラムを実行すると、「イスカンダルのトーフ屋ゲーム (Java版)」と表示されます。
b. ルール説明を表示するかどうか尋ねられます。"y"を入力するとルールが表示されます。
c. ゲームが開始され、プレイヤーとコンピュータが交互にプレイします。
d. ゲーム終了後、プレイを続けるかどうか尋ねられます。"y"を入力するとゲームが継続されます。
e. 目標金額に到達したプレイヤーが勝利となり、ゲームが終了します。メソッドの一覧:
- main(String args): プログラムのエントリーポイント。ゲームのメイン処理を呼び出します。
- displayRules(): ゲームのルール説明を表示します。
- gameMain(): トーフ屋ゲームのメイン処理を実行します。
- tenkiYohou(): 天気予報を表示します。
- randomNum(int max): 指定された最大値までの乱数を生成します。
- inpTofu(int limit): プレイヤーが作成するトーフの個数を入力します。
- compTofu(int limit, int player): コンピュータが作成するトーフの個数を決定します。
- nextTenki(): 翌日の天候を決定します。
- soldTofu(int tenki, int make): 売れるトーフの個数を計算します。
変数一覧表:
STARTGOLD
: 開始時の所持金 (初期値: 5000)GOALGOLD
: 目標金額 (初期値: 30000)TOFUBAIKA
: トーフの売価 (初期値: 50)TOFUGENKA
: トーフの原価 (初期値: 40)SELLMAX
: 天気ごとの最大売上個数を格納した配列 (初期値: [500, 200, 100])TENKIWORDS
: 天気を表す言葉を格納した配列 (初期値: ["晴れ", "曇り", "雨"])hare
: 晴れの確率kumori
: 曇りの確率ame
: 雨の確率random
: 乱数生成に使用するRandomクラスのインスタンスscanner
: 入力を受け取るためのScannerクラスのインスタンスinput
: ユーザーの入力を格納する変数playerMake
: プレイヤーが作成するトーフの個数computerMake
: コンピュータが作成するトーフの個数playerSold
: プレイヤーが売ったトーフの個数computerSold
: コンピュータが売ったトーフの個数playerProfit
: プレイヤーの利益computerProfit
: コンピュータの利益playerGold
: プレイヤーの所持金computerGold
: コンピュータの所持金仕様書の拡張案:
難易度設定の追加
現在のプログラムでは、トーフの作成数や売上個数などの要素がランダムに決定されています。拡張として、プレイヤーがゲームの難易度を選択できるようにします。難易度によって、作成数や売上個数などのパラメータを調整します。複数日のプレイ
現在のプログラムでは、ゲームは1日ごとに繰り返されますが、拡張として複数日のプレイをサポートします。プレイヤーは指定された日数分だけゲームを進めることができます。各日の結果や利益を記録し、最終日に最終的な所持金や勝敗を表示します。イベントの追加
ゲームにさらなるバラエティを加えるために、イベントを追加します。イベントはランダムに発生し、天候や売上数に影響を与えることがあります。例えば、イベントが発生すると晴れの確率が上昇したり、売上数が増加したりすることがあります。イベントの内容や影響は多様化させることで、ゲームのエンターテイメント性を向上させます。UIの改善
現在のプログラムはコンソールベースで動作しますが、拡張としてグラフィカルユーザーインターフェース(GUI)を導入します。GUIを使用することで、より直感的な操作や視覚的な情報表示を実現し、ユーザーエクスペリエンスを向上させます。プレイヤーのカスタマイズ
プレイヤーが自身のトーフ屋をカスタマイズできる機能を追加します。プレイヤーは店舗のデザインやトーフの品質、販売戦略などを選択できます。これにより、プレイヤーの戦略や選択の影響がゲームに反映され、より自己のプレイスタイルに合ったゲーム体験を提供します。
(ChatGPT)
今回の『イスカンダルのトーフ屋ゲーム』に関しても、まあまあの仕様書が出来上がったようです。ゲームの遊び方の部分がイマイチですが、それ以外は完璧と言えるかと思います。
特に仕様の拡張案(いつのまにか”仕様書の拡張案”に変わっている)に関しては、どんどん提案してくるようで、ChatGPTはこのあたりが得意分野と言うことがわかります。
つづきをお願いします
拡張案のつづきです:
リーダーボードの追加
プレイヤーのスコアや成績を追跡するリーダーボード機能を実装します。プレイヤーは自分の成績を保存し、他のプレイヤーと競い合うことができます。リーダーボードは、最も高い売上や最長連続営業日数などの指標でランキングされます。これにより、プレイヤー同士の競争やゲームへのモチベーションが高まります。成長要素の追加
プレイヤーがゲーム内で成長する要素を追加します。例えば、トーフのレシピを改良したり、新しい販売戦略を学んだりすることができます。成長要素は、プレイヤーの経験ポイントやレベルといった形で表現され、新たなチャレンジや報酬を提供します。追加のトーフバリエーション
現在のプログラムでは、トーフの種類は限られています。拡張として、さまざまなトーフのバリエーションを追加します。豆腐以外の材料を使った特別なトーフや、季節限定のフレーバーなど、プレイヤーにより多様な選択肢を提供します。インゲーム通貨とアイテムショップ
プレイヤーがゲーム内で獲得した通貨を使用して、特別なアイテムやアップグレードを購入できるアイテムショップを実装します。アイテムショップには、効率的なトーフ作成ツールやマーケティングキャンペーンなど、プレイヤーの進行をサポートするアイテムが用意されます。マルチプレイヤーモード
複数のプレイヤーがオンライン上で一緒にプレイできるマルチプレイヤーモードを追加します。プレイヤー同士が協力したり競争したりすることができます。共同経営のトーフ屋やトーフ作りの対戦など、さまざまなプレイスタイルに対応します。イベントや特別なイベントアイテムの追加 定期的なイベントを開催し、プレイヤーに特別な報酬やアイテムを提供します。例えば、季節イベントやトーフ祭りなどのイベントを開催し、限定のレシピや装飾品を手に入れることができます。これにより、プレイヤーはゲーム内での長期的な興味を維持しやすくなります。
チャレンジモードの追加
プレイヤーに特定の目標や制限が与えられるチャレンジモードを追加します。例えば、時間内にできるだけ多くのトーフを作る、予算制限内で最高の利益を上げるなどのチャレンジがあります。チャレンジモードは、プレイヤーの戦略力やスキルを試す機会となります。ストーリーラインの拡張
ゲームにストーリーラインを追加し、プレイヤーがトーフビジネスの世界で冒険をする要素を提供します。プレイヤーはトーフ業界の新たな展開やキャラクターとの出会い、困難な選択を経験することができます。ストーリーラインはゲームの興奮と没入感を高め、プレイヤーにより深い体験をもたらします。コミュニティ機能の強化
プレイヤー同士がコミュニケーションを取りやすい環境を提供します。フレンドリストやチャット機能などのコミュニティツールを実装し、プレイヤーが情報や助言を共有し、協力したり競い合ったりすることができるようにします。コミュニティの活発化は、ゲームの楽しさと持続性を高める効果があります。ゲームのバランス調整と改善
フィードバックやデータ分析を通じて、ゲームのバランスを見直し、不均衡な要素を改善します。プレイヤーのフィードバックを重視し、ゲームプレイの公正さと面白さを向上させるために、(以下略)
(ChatGPT)
今回の結論として、(無料利用の範囲での)ChatGPTはプログラミングの世界においては下記のようなことが言えると思います。
- 新たなプログラムの生成は出来る(今回の日記には書いていないが実験済み)
- 既存のソースコードの言語間のコンバートは苦手
- リバースエンジニアリングは出来るが、その中でもアイデアの提供は得意技
という感じで今回のシリーズ?は終わりたいと思います。