最強のポイントカードを探せ! ハッシュコードバトラー
2018/01/10 7M4MON
概要
ハッシュコードバトラーとは、文字列のハッシュで戦うバーコードバトラーのようなゲームです。
ポイントカードや診察券、会員証などに記録されている磁気情報が秘めている
攻撃力・防御力・素早さを数値化し、バトルを行います。
必要なもの
hashcode_battler_pi の場合は上記に加えて
Raspberry Pi
タクトスイッチ 4個
128x64のOLED
赤LED 5個
抵抗330Ω 5個
Adafruit_SSD1306 ライブラリ
Pillow ライブラリ
フォント Fipps-Regular.otf と VCR_OSD_MONO_1.001.ttf
が必要です。
hashcode_battler_pi の配線は下記のとおりです。
OLEDのClockを 3 に、Dataを 2 に接続(I2C)
LEDを330Ωの抵抗を介して 22,23,24,25,27 に接続
スイッチを 4, 17 に接続 (内蔵pullupを使います。)
バトルの流れ
VIDEO
カード入力待ち時、キーボードから'q'入力で終了します。
ソースはgithubに置きました のでご自由にどうぞ。
*何故ハッシュなの?
カードをスワイプする度に異なる強さになっては困ります。
そこで、カード毎にユニークかつ固定長で推測されにくく、数値に変換が容易なハッシュコードを使用しました。
ハッシュ化方式はSHA-256 を採用しています。標準化されているため、マルチプラットホーム化は容易です。
最強は 99999 とし、最弱はゲームバランスを考えて 34464 (99999-65535) にしました。
既知の不具合
攻撃/回復ボタンは向かい合わせに付いていますが、接続はパラレルです。
そのため、自分のターンでなくても相手の攻撃/回復を邪魔することが可能です。
紳士的なプレイにより回避可能です。
日本システム開発の PDC-816UK を接続した場合、クレジットカードや特定のカード(WAON POINTカード等)を
スワイプすると、自主規制(?)で 「***」 という文字列を返してきます。
このため、それらのカードでは一律である特定の強さのカードになってしまいます。
余談
Raspberry Pi (V1, Model B) は元々、mumble-funk のサーバーにするつもりで買ったのですが、
Raspberry Pi はオーディオの入力が無い と買ってから知り、数年眠っていたものです。
USB オーディオアダプタや 外付けのI2Sで入力できるかも?と思いましたが、
なんか面倒そうなのでmumble-funkは普通のPCで実験しました。
Raspberry Pi上で開発するのは辛いので、SSHでログインして実行しつつ、samba入れてWindows上からソース編集という形を取りました。
ただし、バーコードリーダーをRaspberry Piに接続した場合は、Raspberry Piのコンソールから実行する必要があります。
フォントをいろいろ試しましたが、OLEDにバランス良く綺麗に表示されるフォントは見つかりませんでした。
最初はPython3で書こうと思ったのですが、Raspberry Piでは2系の情報が多い(特にライブラリ関係)ようで、
pip3でインストールできないモジュールがあり、あきらめてPython2で書きました。
OLEDの表示でPillowというモジュールが必要になるのですが、pipだと[No distributions at all found]となります。
しばらくハマってたのですが、easy_installだとインストール出来たみたいで、なんだかなぁ。
evdevはeasy_installで出来たかと思いきや、動作しなかったので、tarを拾ってきて展開してsetup.pyしました。なんだかなぁ。
→ 結局、使わなかった。
なりすまし攻撃は対策できません。ぁゃιぃ ハードウェアを使うのはご遠慮ください。
参考サイト