suna8’s blog

還暦を過ぎたジジーの気まぐれ日記

やっぱり趣味のプログラミングは楽しい(Part3)

Part2より

 

ところが、結論を先に書けば、やっぱりというか今回はなかなかうまくいかなかったのです。まずは、こんな質問をしてみました。

イスカンダルのとうふ屋ゲーム」を知っていますか?

申し訳ありませんが、「イスカンダルのとうふ屋ゲーム」については、私の知識には含まれていません。可能性のある理由として、そのゲームが非常に新しいか、または地域的な人気があるゲームである可能性があります。詳細について教えていただければ、お手伝いできるかもしれませんが、保証することはできません。他の質問やお手伝いできることがあれば、どうぞお知らせください。

(ChatGPT)

 

まあ、知っているほうがおかしいとは思いましたが。日本人の99.9999%の人は知らないと思うし(数字は適当)、ということで、本題のほうにはいったわけですが。

以下のRubyで書かれたプログラムをJava言語に変換してください。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
##■イスカンダルのトーフ屋ゲーム■ (外部仕様より再現)
##Copyright (C) 1978-2013 by N.Tsuda
##Reference: http://vivi.dyndns.org/tofu/tofu.html
##背景: あなたはイスカンダル星で遭難し、帰りの費用を稼ぐためにトーフをなるべくたくさん売ってお金を稼がなければならない。
##最初に所持金1000円が与えられる。
##30000円儲けることができれば、めでたくイスカンダルから脱出することができる。
##トーフは製造に一個あたり10円かかり、一個あたり12円で売ることができる。
##トーフは晴れの日は100個、曇りの日は50個、雨の日は10個売れる。
##売れなかった分は損失となる。
##あなたは天気予報を見て、明日いくつのトーフを製造するかを決めねばならない。
##
##A Tofu vendor surviving in Iscandar
##Copyright (C) 1978-2013 by N.Tsuda
##Reference: http://vivi.dyndns.org/tofu/tofu.html
##Background: You are a castaway in planet Iscandar in outer space, and you have to gain money by making and selling Tofu in order to go back to your mother planet.
##Initially you have 1,000 yen. The goal is to gain 30,000 yen for your traveling fee.
##One Tofu costs 10 yen for production, and the unit price is 12 yen.
##The sales of Tofu depends on weather: you can sell 100 Tofu on a fine day, 50 on a cloudy day, and 10 on a rainy day.
##Watch weather forecast and determine the quantity of Tofu you are going to make.

class Iscandar
  COST    = 10
  PRICE   = 12
  RATE    = {
    fine:   100,
    cloudy:  50,
    rainy:   10
  }
  RED = "\e[31m"
  GRN = "\e[32m"
  SO  = "\e[m"

(以下略)

 

以下は、提供されたRubyプログラムをJava言語に変換したものです。ただし、Javaの出力はターミナルではなくコンソール上に表示されるため、一部の出力部分には調整が必要です。

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

public class Iscandar {
    private static final int COST = 10;
    private static final int PRICE = 12;
    private static final Map<String, Integer> RATE = new HashMap<String, Integer>() {{
        put("fine", 100);
        put("cloudy", 50);
        put("rainy", 10);
    }};
    private static final String RED = "\u001B[31m";
    private static final String GRN = "\u001B[32m";
    private static final String SO = "\u001B[m";

    private Map<String, Integer> forecast;
    private int total;

    public Iscandar() {
        forecast = new HashMap<>();
        total = 1000;

        showComment();
    }

    private void showComment() {
        String filename = Iscandar.class.getSimpleName() + ".java";
        // コメント行のみを抽出して表示することで対応します
        // 必要に応じてファイルの読み込みを行ってください
        System.out.println("##イスカンダルのトーフ屋ゲーム## (外部仕様より再現)");
        System.out.println("##Reference: http://vivi.dyndns.org/tofu/tofu.html");
        System.out.println("##背景: あなたはイスカンダル星で遭難し、帰りの費用を稼ぐためにトーフをなるべくたくさん売ってお金を稼がなければならない。");
        System.out.println("##最初に所持金1000円が与えられる。");
        System.out.println("##30000円儲けることができれば、めでたくイスカンダルから脱出することができる。");
        System.out.println("##トーフは製造に一個あたり10円かかり、一個あたり12円で売ることができる。");
        System.out.println("##トーフは晴れの日は100個、曇りの日は50個、雨の日は10個売れる。");
        System.out.println("##売れなかった分は損失となる。");
        System.out.println("##あなたは天気予報を見て、明日いくつのトーフを製造するかを決めねばならない。");
        System.out.println();
    }

    private Map<String, Integer> calcProbab() {
        Map<String, Integer> probab = new HashMap<>();
        Random random = new Random();
        probab.put("fine", random.nextInt(100));
        probab.put("cloudy", random.nextInt(100 - probab.get("fine")));
        probab.put("rainy", 100

(ChatGPT)

 

例によって途中で切れています。そこで、いつものように続きを表示させて、すべて表示されたと思われるソースコードEclipseに貼り付けました。エラーは出なかったものの実行させると、思ったような動きにはならずゲームルール的に滅茶苦茶な動作をしたのです。

 

Part4につづく