PHPで宝探しゲームの作成について
下記の問題について回答案をいただけますでしょうか。
複数の島をボートで巡って、ゴールドを探し出し、無事ゴールへたどり着けるか!?
プレイヤーはターンごとに1回または複数回サイコロを振ります(通常は1回ですが、島によっては複数回必要な場合があります)。 プレイヤーのいる島ごとに、サイコロの目に応じてターンの行動が決まります。 スタート地点から出発し、ゴールへ到達して下さい。群島はスタートとゴール、およびA島~E島の5つの島からなります。プレイヤーは、ターン数、所持ゴールド、および巡った島の記録を保持しています。島ごとのサイコロの目と行動は、次のように決められています。
スタート地点:サイコロの出目が1ならA島へ、2ならB島へ、6ならC島へ、その他なら、動けない
A島:サイコロの出目が3ならB島へ、4ならC島へ、その他なら100Gゲットしてスタートへ
B島:サイコロの出目が奇数ならD島へ、偶数ならE島へ
C島:サイコロを2回ふって、出目の和が奇数なら200GゲットしてD島へ、偶数なら100GゲットしてE島へ
D島:サイコロの出目が4か5ならE島へ、それ以外は、スタートへ
E島:サイコロの出目が6かつ所持Gが500G以上ならゴールへ、それ以外なら、100GゲットしてC島へ
問題1
サイコロの出目の配列を入力値で受け取り、配列を最後まで処理した段階での、プレイヤーのステータスを出力とするプログラムを作成してください。 入出力は、以下の4パターンをすべてパスするようにしてください。
記録に使う島名は、以下のようにしてください
スタート地点:S
A島:A
B島:B
C島:C
D島:D
E島:E
ゴール:G
ターン数は、サイコロを振った回数ではなく、ヒントの判定を行った回数です。
スタート地点でサイコロを振り、移動しても移動しなくても1ターン。
C島では2回サイコロを振り、その結果移動で1ターン。
テストデータ(CSV)
No., 入力, ターン数, 所持ゴールド, 履歴
1, "214211643636466", 12, 600, "S 2, B 1, D 4, E 2, C 11, E 6, C 43, D 6, S 3, S 6, C 46, E 6, G"
2, "3261255154523256", 13, 900, "S 3, S 2, B 6, E 1, C 25, D 5, E 1, C 54, D 5, E 2, C 32, D 5, E 6, G"
3, "261621212322554264554221633114221645351356", 33, 2200, "S 2, B 6, E 1, C 62, E 1, C 21, D 2, S 3, S 2, B 2, E 5, C 54, D 2, S 6, C 45, D 5, E 4, C 22, E 1, C 63, D 3, S 1, A 1, S 4, S 2, B 2, E 1, C 64, E 5, C 35, E 1, C 35, E 6, G"
4, "624334152252512416431546432413114514414135214511425615154236231334534125561142642614615452623143232142224616116334416142653453565356335425423432454212534324465262655434651434641534565325652536", 152, 9300, "S 6, C 24, E 3, C 34, D 1, S 5, S 2, B 2, E 5, C 25, D 1, S 2, B 4, E 1, C 64, E 3, C 15, E 4, C 64, E 3, C 24, E 1, C 31, E 1, C 45, D 1, S 4, S 4, S 1, A 4, C 13, E 5, C 21, D 4, E 5, C 11, E 4, C 25, D 6, S 1, A 5, S 1, A 5, S 4, S 2, B 3, D 6, S 2, B 3, D 1, S 3, S 3, S 4, S 5, S 3, S 4, S 1, A 2, S 5, S 5, S 6, C 11, E 4, C 26, E 4, C 26, E 1, C 46, E 1, C 54, D 5, E 2, C 62, E 3, C 14, D 3, S 2, B 3, D 2, S 1, A 4, C 22, E 2, C 46, E 1, C 61, D 1, S 6, C 33, E 4, C 41, D 6, S 1, A 4, C 26, E 5, C 34, D 5, E 3, C 56, D 5, E 3, C 56, D 3, S 3, S 5, S 4, S 2, B 5, D 4, E 2, C 34, D 3, S 2, B 4, E 5, C 42, E 1, C 25, D 3, S 4, S 3, S 2, B 4, E 4, C 65, D 2, S 6, C 26, E 5, C 54, D 3, S 4, S 6, C 51, E 4, C 34, D 6, S 4, S 1, A 5, S 3, S 4, S 5, S 6, C 53, E 2, C 56, D 5, E 2, C 53, E 6, G"
テストデータ(関数形式)
/* 1 */ test(1, "214211643636466", 12, 600, "S 2, B 1, D 4, E 2, C 11, E 6, C 43, D 6, S 3, S 6, C 46, E 6, G");
/* 2 */ test(2, "3261255154523256", 13, 900, "S 3, S 2, B 6, E 1, C 25, D 5, E 1, C 54, D 5, E 2, C 32, D 5, E 6, G");
/* 3 */ test(3, "261621212322554264554221633114221645351356", 33, 2200, "S 2, B 6, E 1, C 62, E 1, C 21, D 2, S 3, S 2, B 2, E 5, C 54, D 2, S 6, C 45, D 5, E 4, C 22, E 1, C 63, D 3, S 1, A 1, S 4, S 2, B 2, E 1, C 64, E 5, C 35, E 1, C 35, E 6, G");
/* 4 */ test(4, "624334152252512416431546432413114514414135214511425615154236231334534125561142642614615452623143232142224616116334416142653453565356335425423432454212534324465262655434651434641534565325652536",152, 9300, "S 6, C 24, E 3, C 34, D 1, S 5, S 2, B 2, E 5, C 25, D 1, S 2, B 4, E 1, C 64, E 3, C 15, E 4, C 64, E 3, C 24, E 1, C 31, E 1, C 45, D 1, S 4, S 4, S 1, A 4, C 13, E 5, C 21, D 4, E 5, C 11, E 4, C 25, D 6, S 1, A 5, S 1, A 5, S 4, S 2, B 3, D 6, S 2, B 3, D 1, S 3, S 3, S 4, S 5, S 3, S 4, S 1, A 2, S 5, S 5, S 6, C 11, E 4, C 26, E 4, C 26, E 1, C 46, E 1, C 54, D 5, E 2, C 62, E 3, C 14, D 3, S 2, B 3, D 2, S 1, A 4, C 22, E 2, C 46, E 1, C 61, D 1, S 6, C 33, E 4, C 41, D 6, S 1, A 4, C 26, E 5, C 34, D 5, E 3, C 56, D 5, E 3, C 56, D 3, S 3, S 5, S 4, S 2, B 5, D 4, E 2, C 34, D 3, S 2, B 4, E 5, C 42, E 1, C 25, D 3, S 4, S 3, S 2, B 4, E 4, C 65, D 2, S 6, C 26, E 5, C 54, D 3, S 4, S 6, C 51, E 4, C 34, D 6, S 4, S 1, A 5, S 3, S 4, S 5, S 6, C 53, E 2, C 56, D 5, E 2, C 53, E 6, G");
問題2
サイコロの出目および実行ターン数(10~100)をランダムで与えて実行し、最終的なプレイヤーのステータスを出力できるようにプログラムを変更してください
お礼
「タイ・アユタヤ川底は宝の山」確かにこれだと思います。 おかげさまで番組の特定が出来ました。一歩前進した感じです。 アユタヤは昔、アジアでも有数の港市国家でしたので諸外国とかなりの物量の物資のやり取りがなされていたと思います。その中には、現代でも価値のあるものも含まれているのでしょうね。