先日のプログラマーの日にも書いたが、自作のパズルゲームを作っている。
時間に縛られない、暇つぶしになるようなパズルゲームを作っているのだが、
コレクション要素もあって、そこにハマるとやばいことになりそうな予感がする。
ある法則に従って、12点から3点を選ぶと、図形が変形していくパズル。
スタートは時計回りに300対400対500の直角三角形から、
そこからどんな図形に変形出来るのか、
どんな面積の図形を導き出せるのか、
最小手数は何手なのか、
といった要素を考えながら、出来上がった図形をコレクション出来る。
そもそも変形の過程で、面積が整数にならなければならないという縛りが存在する。
面積を実数にまで拡張すると、それこそ手に負えないし、データの保存
変形した過程のすべての図形を保存出来るかというと、それはやめて、
凸多角形は保存出来るが、凹多角形は保存できないようにする。
つまり、途中の変形で凹多角形になると、そこがミッシングリンクとなる。
現在、出来上がった図形の点数を考えており、
- 手数が少ないほうが高得点
10000点から1手ごとに100点を減点していく - 角数が少ないほうが高得点
三角形を1000点、四角形を900点、… - 直角の個数、平行線の組数、線対称の本数、点対称など
それぞれ100点を加点していく - 面積の末尾の0の個数
面積が1000なら1000点、1000を除く100の倍数なら100点、100の倍数を除く10の倍数なら10点を加点 - その他
そうなると、様々な図形を作り出してみる他ない。
種類とは、
- 面積が異なる。
- 形が異なる(鏡像体も異なるものとする)
- 当然凹多角形は種類に加えない
直角三角形は2種類
正方形は3種類
長方形は6種類
ここまでは、誰でも導ける。
菱形は10種類
平行四辺形は44種類
凧形は27種類
までは見つけたが、これでコンプリートかは解らない。
こんな感じで、図形を模索しつつ、プログラムのバグを見つけつつ、パズルを楽しんでいたら、唐突にヤバイものを発見したりする。
このヤバイ図形は高得点でなければつまらないだろうと、点数の加点、減点を見直す必要が出てくる。
1辺を10とする十二多角形なので、300×300の長方形で面積は900、何らかの手順で角数は増えて面積1000を超える図形を見つけることは出来ていた。
面積が丁度1000は難しいのか、無いのか、半ばあきらめていた。
そんなとき、9手で、面積1000、直角0、平行1、対称0の凸八角形を見つけた。
こりゃすげーと、スクショを撮り、もう一度やってみようとしても手順を忘れているw。
そうこうしていると、今度は10手で、面積1000、直角2、平行2、対称0の凸七角形を見つけた。
これを見つけた当時は、点数の要素となるものを模索していたので、直角や平行や角数は考えて居なかった。
前者の凸八角形は、10000-9×100=9100点
後者の凸七角形は、10000-10×100=9000点
でも、凸七角形のほうが高得点であって欲しいという欲求が出てきたわけです。
まだまだ、未知の未到達の図形があるのではないだろうか。
作者すら未到達な状態で、世に出して良いものなのだろうか。
点数計算が確定したら、次は図形の保存の部分。
HTML5+Javascript、つまりウェブ版はCookieに保存することになるだろうか。
そこまで出来たら、次はAndroidアプリ版への移植作業だろうか。
Javaはメモ帳で昔作ったことがあるんだけど、Android Studioを使ったことないんだけど、どうなることやら。
ではでは