FABFIBは0から9までの数字と1から3までのダメージ数が書かれたカード合計50枚の山札を使ってプレイするゲームです。プレイ人数3-10人用で、各プレイヤーは12ライフを持ってゲームを開始します。
最初のプレイヤーは山札からカードを3枚引き、手札とします。
手札には読み方があります。手札は常に大きい順に並べ、1番大きい数字を100の位、2番目の数字を10の位、3番目の数字を1の位として読みます。この場合は"5","3","2"と並び替え、532と読みます。
プレイヤーは手札の数字、もしくは手札の数字以外の数字を宣言し、次のプレイヤーに手札を伏せて渡します。
渡されたプレイヤーは、その手札を受け取ることも出来ますし、受け取らないことも出来ます。受け取らない場合は「ダウト」を宣言し手札をオープンします。
宣言した数字と手札の数字が一致していたら、ダウト成功です。手札を渡したプレイヤーにカードにかかれている数だけダメージが入ります。ダウトが失敗した場合は、渡されたプレイヤーにダメージが入ります。この場合は6ダメージとなります。
次のプレイヤーは、受け取った手札を0-3枚交換し、同じように手札の数字、もしくは手札の数字以外の数字を宣言し、次のプレイヤーに手札を伏せて渡します。このとき、宣言する数字は、前に宣言された数字よりも大きくなければいけません。
"0","0","0"は特殊な手札です。これは1000扱いとなります。例え999を宣言され手札を渡されても、1000を引く可能性があります。この数字を引いた場合、引いたプレイヤーはライフを12まで回復し、その他のプレイヤーにカードに書かれている数だけダメージが入ります。
最後までライフが残っていた人が勝ちです。
任意の数のゲームを自動実行するFABFIBシミュレータ。マルチプロセスで動かしてみたりした。
Pythonとnumpy
プログラミングしていく上で、パラダイムとしてオブジェクト指向を採用しています。宣言戦略やダウト戦略、捨札戦略にはABCを用いた抽象クラスを定義していて、様々な戦略を拡張出来るように作りました。
例えば、宣言の気まぐれさを表現する際にポアソン分布を使ってます。また、カードの位置を表す行列が定義されていて、それをデータとして貯めることで機械学習で遊ぶことが出来るかなと考えています。
Sigmaです!
起業します!
起業資金欲しくて仕事探してます!
Nuxt.js Vue.js Pythonを主に使っています!
勉強する圧倒的姿勢あります!
Twitterは@ssssssigmaです!