自作ブラックジャックのCPUが強すぎる気がしたので、自動で1万回プレイして勝率を確認してみた
「これプレイヤーが勝てないように仕組んでない?」
G'sアカデミーというプログラミングスクールを卒業しました。卒業生は再履修できるのでもう一周しています。
じゃんけんをJavascriptで作るという課題があり、ブラックジャックをKotlin Javascriptで作って提出しました(G'sの課題はカオスの塊)。チェックしてくれたスタッフのAさんに「昨日からプレイしているけど、1回も勝てていない。これプレイヤーが勝てないように仕組んでない?」と聞かれました。
そんな仕様にした記憶はなかったので、自分でも再度プレイしたのですが3勝10敗でした。確かにちょっと勝率が偏っているかもしれません。勝率が50%だとすると3勝10敗になる確率は3.5%くらい(数学苦手なので計算間違ってるかも)
検証しよう
たまたま運が悪かっただけかもしれないので、試行回数を1万回ぐらいに増やして勝率を計算してみましょう。手でポチポチするのはめんどくさいです。怠惰はプログラマの美徳です。めんどくさいことはプログラムにさせましょう。
という訳で、Seleniumに自分が作ったブラックジャックを1万回ぷれいさせることにしました。
私の環境とバージョン情報
今回は特に環境がハマりどころなので要注意(後述)
- OS: Windows10 1803
- intelliJ: 2019.3 Community Edition
- Kotlin: 1.3.41-release-150 (JRE 1.8.0_202-release-1483-b03)
- Selenium: selenium-server-standalone-3.141.59.jar
- Chrome: 79.0.3945.79
- Chrome driver: 79.0.3945.36
- npm: 6.9.0
テストしたいブラックジャック
https://nagashimam.github.io/BlackJack/
ソース:https://github.com/nagashimam/BlackJack
Seleniumスクリプト
ソース:https://github.com/nagashimam/BlackJackTest
スクリプトを書く際のハマりどころ
環境構築自体はたくさん記事があるので、私がハマったところについて。
Chromeとドライバーのバージョン
この2つの整合性が取れていないとTimeoutExceptionで強制終了になります。ドライバーのどのバージョンがどのChromeに対応しているかはドキュメントを参照してください
有効な Win32 アプリケーションではありません。
エラーメッセージを保存し忘れたので若干違うかもしれませんが、npmでドライバーをインストールすると、上記のエラーメッセージが出てスクリプトを実行できません
コマンドプロンプトで
where chromedriver
と打つと
(パス)/chromedriver
(パス)/chromedriver.cmd
と出てきました。正しい方法ではないかもしれませんが、私の環境ではchromedriver(cmdがついていない方)を削除すると動くようになりました。
検証結果
保存する前にブラウザを閉じてしまった(笑)ので、記憶違いかもしれませんが勝率は42%だったはずです。
1万回実行した後にスクリーンショットをとるようにスクリプトを変えたので、今晩もう一度実行してみます。
仮に勝率を40%とすると、3勝10敗になる確率は11%ほどなので、ありえなくはないかな、ぐらいの数字ですね。
Author And Source
この問題について(自作ブラックジャックのCPUが強すぎる気がしたので、自動で1万回プレイして勝率を確認してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/ngsmvn/items/dd0a5d3971974905897e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .