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)をランダムで与えて実行し、最終的なプレイヤーのステータスを出力できるようにプログラムを変更してください
お礼
回答ありがとうございます。