イスカンダルのトーフ屋ゲーム

 

 "tofu.vvs":

//----------------------------------------------------------------------------
//
//          イスカンダルのトーフ屋ゲーム
//          Version 1.0.1(ViViScript 版)
//          Copyright (C) 1978 - 1998 by Nobuhide Tsuda
//
//----------------------------------------------------------------------------

function max(a, b) { return a >= b ? a : b; }
function min(a, b) { return a <= b ? a : b; }
function calc(comp, hare, kumori, ame)
{
    return min(comp / 40, hare >= 50 ? 500 : ame > 30 ? 100 : 300);
}
function printShojikin(name, gold)
{
    console.write("  " + name + format(" %6d 円  ", gold));
    var g = "";
    for(var i=1000;i<=gold;i+=1000) g += "■";
    for(;i<=30000;i+=1000) g += "□";
    console.writeln(g);
}

function main()
{
    srand();
    console.open();
    console.writeln("イスカンダルのトーフ屋ゲーム(ViViScript 版)");
    console.writeln("Copyright (c) 1978 - 1998 by Nobuhide Tsuda\n");
    console.write("ルール説明しますか?[y/n]");
    var res = console.input();
    if( res.charAt(0) == 'y' || res.charAt(0) == 'Y' ) {
        for(;;) {
            console.writeln("");
            console.writeln("ここはイスカンダル星。あなたはここでトーフ屋を経営し、");
            console.writeln("地球への帰還費用を作り出さなくてはいけません。");
            console.writeln("でもお向かいには、コンピュータが経営するトーフ屋があります。。。\n");
            console.writeln("トーフの原価は1個40円、販売価格は50円です。");
            console.writeln("1日に売れる個数は天候に左右されます。");
            console.writeln("晴れると500個、くもりだと300個、雨のときは100個まで売れます。");
            console.writeln("トーフは日持ちしないので、売れ残った分はすべて廃棄します。");
            console.writeln("そこで、次の日の天気予報をよく見て、何個作るか決心してください。");
            console.writeln("所持金5千円からはじめて早く3万円を超えた方が勝ちです。");
            console.writeln("");
            console.writeln("いいですか?[y/n]");
            res = console.input();
            if( res.charAt(0) != 'n' && res.charAt(0) != 'N' )
                break;
        }
    }
    for(;;) {
        var player = 5000;
        var comp = 5000;
        for(;;) {
            console.writeln("\n所持金:");
            printShojikin("あなた", player);
            printShojikin("わたし", comp);
            if( player >= 30000 || comp >= 30000 )
                break;
            var limit = player / 40;
            var prob1 = rand(100);
            var prob2 = rand(100);
            var hare = 100 - max(prob1, prob2);
            var ame = min(prob1, prob2);
            var kumori = 100 - hare - ame;
            console.writeln("\n明日の天気予報: 晴れ " + hare + "%  くもり " + kumori + "%  雨 " + ame + "%");
            var g = "";
            for(var i=25;i<=hare*10;i+=25) g += "◎";
            for(;i<=(hare+kumori)*10;i+=25) g += "・";
            for(;i<=1000;i+=25) g += "●";
            console.writeln(g);
            console.write("\nトーフを何個作りますか?(1〜" + limit + ")");
            for(;;) {
                var pn = console.input().toInteger();
                if( pn > 0 && pn <= limit )
                    break;
            }
            var cn = calc(comp, hare, kumori, ame);
            console.writeln("わたしは " + cn + "個 作ります。\n");
            sleep(500);
            console.writeln("***** 次の日 *****");
            var r = rand(100);
            var tenki, sold;
            if( r <= ame ) {
                tenki = " 雨  (;_;) ";
                sold = 100;
            } else if( r <= ame + kumori ) {
                tenki = " くもり  (~_~) ";
                sold = 300;
            } else {
                tenki = " 晴れ \(^o^)/ ";
                sold = 500;
            }
            console.write("今日の天気は");
            for(i=0;i<3;++i) {
                sleep(250);
                console.write(".");
            }
            sleep(250);
            console.writeln(tenki + " です。");
            player += min(sold, pn) * 50 - pn * 40;
            comp += min(sold, cn) * 50 - cn * 40;
            sleep(500);
        }
        if( player > comp )
            console.writeln("\nあなたの勝ちです。");
        else if( player == comp )
            console.writeln("\n引き分けです。");
        else
            console.writeln("\nコンピュータの勝ちです。");
        console.write("\nplay again ? [y/n]");
        res = console.input();
        if( res.charAt(0) == 'n' || res.charAt(0) == 'N' )
            break;
    }
}