百人一首

Djangoの勉強を兼ねて百人一首を作ってみた。

https://poets100.itsagent.net/

データの登録はなく、データを読むだけなので簡単な例といえる。

上の句一覧、下の句一覧、詠み人一覧を作成し、選択するとその歌の詳細画面を表示する。

最近は5色百人一首といって、20首ずつ色別にグルーピングして遊ぶらしい。
いきなり100首だと敷居が高いから。

なので、色別にリストできるようにした。

百人一首といえば坊主めくりなので、Profile(姫とか坊主とか)別にも表示できるようにした。

スマホは対象にしないが、坊主めくりもにも挑戦した。

4名でゲームをする前提。

ランダムに札をひいていき坊主でなければ自分の場に追加し坊主だと手持ち札全てを共通の場に移動する。
姫を引いた場合は、共通の場にある札を全て獲得する。

それら各場の札数を管理するのが処理内容となる。

最初に山に100枚の札を用意するが、山がひとつでは開始時に結果が決まってしまうので山を4つに分けることにした。

意外とこれが難しかった。

百人一首本来の遊び方として、上の句を聞いたら下の句がわかる、あるいは下の句を見たら上の句がわかる、というのを練習できるようにした。

これを5色のグループ別にできるようにした。

ランダムにその色の中から選んで出題するだけだが20首だと乱数といえども偏りが気になる。
何度も出題されるものもあれば、ほとんど出題されないものがでてくる。

そこで、ランダムに出題するが、20首万遍なく出題するようにした。
物理的な世界であれば20札から順番に出していけばいいだけだが、これが案外難しい。
Pythonでは集合の概念があるのでこれを利用した。
元の20首の集合と出題済みの札を記録して集合として、出題範囲はその差集合になる。

結局、乱数と集合の処理の練習だった。