ゲーセンに有った設定をC#でシュミレーションしてみる

自分ゲーセン大好きでよく通っているのですが、こんな設定を見かけました。

クレーンでボタンを押して6つのさいの目を振って、ゾロ目なら賞品獲得!

たこ焼きキャッチャーのような完全な運ゲー設定です。

これをC#でシュミレーションして、どのような結果になるのかを出力してみたいと思います。

競プロ風になってます。
疑似乱数によってシュミレーションしています。

設定と目的を定義する

僕の出会った設定は「ゾロ目なら景品獲得、またその中でも”1のゾロ目”なら高額景品獲得!」というものでした。

1プレイは100円。500円払うと6プレイ遊ぶことが出来ます。また、クレーンを落とせる位置は制限されていて、確実にさいの目を振ることが可能でした。

普通の景品はだいたい5000円くらいのもので、ピンゾロの景品が”[パチスロ北斗の拳 強敵]の筐体”だったので25000円位でしょう。(ネット通販で見てきました)

目的はもとを取ることなので設定は多分こんな感じでしょう。

問題文

ゲーセン好きなAtriaくんはサイコロの値を揃えるサイコロゲームを見つけた。

そのゲームでは1のゾロ目ならば25000円、それ以外のゾロ目ならば5000円分の商品がもらえる。また、1プレイは100円。500円払うと6プレイ遊ぶことが出来る。

N円消費したとき、Atriaくんが儲かっている場合は”Rich”、そうでない場合は”Poverty”と出力してください。

標準出力では N(100<N<10^6)が与えられる。

解いてみる

とりあえず、目的のコードがこちらになりました。

ロジック

儲かるかそうでないかを判断するための流れは

  1. 持っているお金から最大何回プレイできるかを調べる
  2. ゲームを(1)で求めた最大回数分シュミレーションする
  3. 得られた情報から解を出す

という感じになります。

1.持っているお金から最大何回プレイできるかを調べる

これは

自分の持っているお金が500円以上ある場合、500円を使用して6プレイ手に入れる。そうでない場合は100円使用して1プレイを得る。

ということになるので

このような記述となります。

CanPlayが遊べる回数nが持っているお金です。

2.ゲームを(1)で求めた最大回数分シュミレーションする

先ほど求めたCanPlayを用いてシュミレーションします。これは

1~6の乱数を6つ作り(これがサイコロ代わり)それらがどれも一致しているか(ゾロ目)をCanPlay回分判別する。

ということになります。

よって1のゾロ目が出た回数をHighPricecntそれ以外のゾロ目の回数をLowPricecntとすると

こうなります。

3.得られた情報から解を出す

最後に、ゲームからの収益は[25000 * 高額景品 + 5000 * 通常景品]で求められるので

これで完成です。

実際に動かす

実際動かすとわかりますが、全然儲かりません。

もうこれムリでしょ

500万かけても全く回収できません。

疑似乱数で作っているとはいえ、この設定は絶望的ということがわかりました。

まとめ

この手の設定がゲーセンに有ってもやらないことを心に決めました。

Atria
  • Atria
  • 大学生個人開発者| AtCoder(茶) / C# / VBA /その他趣味いっぱい