やっぱり趣味のプログラミングは楽しい(Part4)
(Part3より)
やはりというか、ChatGPTは万能ではないということで(もともと文章を生成する機能に特化したものだし)諦めればいいのに、しつこく再度トライすることにしました。
ということで、今度はこんな感じで、ChatGPTにお願いしました。
以下のPrologのプログラムをJava言語に書き換えてください。
%;;;; -*- coding: utf-8 -*-
%
% tofu.prolog - イスカンダルのトーフ屋ゲーム(Prolog版)
% by たけおか (take at takeoka.net)
% ver.1.0
% 2012/DEC/09
% for SB-Prolog or GNU Prolog
%
% Copyright (C) 1978 - 2000 by Nobuhide Tsuda
% http://vivi.dyndns.org/tofu/tofu.html
% 著作権は津田伸秀さん (ntsuda@beam.ne.jp) にあります。
%
% この Prolog版は、たけおか しょうぞうが、
% 永野圭一郎氏の(gano@is.s.u-tokyo.ac.jp) perl版 tofu.plを元に
% 書き直したものです。
%
%
% consult('/home/take/src/tofuya/tofu-prolog/tofu.prolog').
% ?- tofu.% millisleep
%#+sbcl (defun millisleep(x) (sleep (/ x 1000)))
millisleep(X) :- XX is X/1000.0, sleep(XX).
% 乱数初期化
:- dynamic(irandom/2).
defRand :- retractall(irandom(_,_)),defRand1.
defRand :- defRand1.defRand1 :-
current_prolog_flag(prolog_name,'GNU Prolog'),
%%for GnuProlog
!,asserta((irandom(R,N) :- !,random(RR),R is floor(RR * N + 0.0))).
defRand1 :-
%%for SWIProlog
!,asserta((irandom(R,N) :- (!,R is random(N)))).% 0 - 100の整数乱数
random100(R) :- irandom(R, 101).(以下略)
以下はJava言語に書き換えたプログラムです。
import java.util.Random;
import java.util.Scanner;public class TofuGame {
private static Random random = new Random();private static void millisleep(long milliseconds) {
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}private static int random100() {
return random.nextInt(101);
}private static int calc(int comp, int hare, int ame) {
int x;
if (hare >= 50) {
x = 500;
} else if (ame > 30) {
x = 100;
} else {
x = 300;
}
return Math.min(comp / 40, x);
}private static void disp(String str) {
System.out.print(str);
}private static void displn(String str) {
System.out.println(str);
}private static void dispShojikin(String name, int gold) {
int ggg = gold / 1000;
System.out.print(" " + name + " " + gold + " 円 ");
for (int i = 0; i < ggg; i++) {
System.out.print("■");
}
for (int i = 0; i < Math.max(30 - ggg, 0); i++) {
System.out.print("□");
}
System.out.println();
}private static void dispYohou(int hare, int kumori, int ame) {
int hhh = hare * 10 / 25;
int kkk = kumori * 10 / 25;
int aaa = 1000 / 25 - (hhh + kkk);
System.out.println();
System.out.println("明日の天気予報: 晴れ " + hare + "% くもり " + kumori + "% 雨 " + ame + "%");
for (int i = 0; i < hhh; i++) {
System.out.print("◎");
}
for (int i = 0; i < kkk; i++) {
System.out.print("・");
}
for (int i = 0; i < aaa; i++) {
System.out.print("●");
}
System.out.println();
}private static int inpTofu(int limit) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("トーフを何個作りますか?(1〜" + limit + ")> ");
int x = scanner.nextInt();
if (x > 0 && x <= limit) {
return x;
}
}
}private static int profit(int n, int sold) {
return Math.min(sold, n) * 50 - (n * 40);
}private static void dispResult(int player, int comp) {
if (player > comp) {
System.out.println("あなたの勝ちです。");
} else if (player < comp) {
System.out.println("コンピュータの勝ちです。");
} else {
System.out.println("引き分けです。");
}
}private static void tofu() {
defRand();
displn("イスカンダルのトーフ屋ゲーム (Java版)");
(中略)
このように修正することで、プレイヤーとコンピュータのトーフの作成、天候の設定、利益の計算などが行われます。ゲームは所持金が30,000円以上になるかどちらかの勝利条件が満たされるまで続きます。
(ChatGPT)
と、うまく行きそうに思えたのですが、必要となるメソッドが何故か抜けているのです。
calc メソッドを表示して
申し訳ありませんが、提供されたコードには
calc
メソッドが含まれていません。おそらく、別のコードやメソッドを参照している可能性があります。もしくは、calc
メソッドについて詳細な説明を教えていただければ、その内容に基づいてお手伝いできるかもしれません。ご提供いただいた情報が不十分な場合は、追加の詳細を教えていただけますか?(ChatGPT)
いやいや、元のソースコードにcalcメソッドに相当する部分は含まれていますよ。どこかで抜け落ちたのだろうということで、今度はChatGPTが生成したJava言語のソースを貼り付けてみたのです。
このJavaのコードを正しく修正してください。
import java.util.Random;
import java.util.Scanner;public class TofuGame {
private static Random random = new Random();public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("イスカンダルのトーフ屋ゲーム (Java版)");
System.out.println("ルール説明しますか?[y/n]");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("y")) {
displayRules();
}
tofu();
System.out.println("プレイを続けますか?[y/n]");
input = scanner.nextLine();
if (input.equalsIgnoreCase("y")) {
main(args);
}
}(以下略)
修正されたコードは以下の通りです。
(コードは略)
これで修正が完了しました。修正したコードを試してみてください。修正内容は、不要な
main
メソッドを削除し、calc
メソッドを追加している点です。また、関数名の日本語表記を英語表記に修正しています。ご不明な点があれば、遠慮なくお知らせください。
(ChatGPT)
なんとなくうまく行ったような末尾の文章でしたが、結局は未完成のプログラムでしかなかったのです。当然でしょうね。もともと仕様が不明だと言って抜け落ちていたcalcメソッドを何の情報も与えない状況で”勝手に生成”したのですから。