テストステ論

高テス協会会長がテストステロンに関する情報をお届けします。

(awesome2048 report) 進捗報告

イータイルズを伸ばすために2048を作り始めたことは話した。今どこまで出来てるかというと,

www.youtube.com

ゲーム画面のロジックとアニメーションを大体実装した。もっとも心配だったことは、React-Nativeでパラレルにアニメーションを走らせた時、それがスケールするかということだったが、何十個ものタイルを同時に動かしてもスムーズに動いたため、問題がないと判断出来る。React-Nativeは思っていたよりすごかった。

既存の2048実装と何か差別化を図りたいところだが,

  • クロスプラットフォームなリーダーボードを提供しているアプリは少ない。あるいは存在しない。これはふつうのやり方で作る場合、AndroidならGoogle Play Gamesを使うだろうし、iOSならGame Centerを使うからだ。実際におれが先行調査目的でダウンロードしたゲームはそうなっていた。これは2048が流行ったのが少し前のことで、React-Nativeのようにクロスプラットフォーム対応なフレームワークはまだなかったし、それぞれのプラットフォームで別のゲームサービスを使うことが実装上自然だったというのもあると思う。おれの作るawesome2048はイータイルズと同様に、Scala.js + React-Native + PlayFabの組み合わせで作り、リーダーボードも共有する。リーダーボードの共有は競技性の高いアプリにとっては必須だと感じている。
  • 多くの実装では、タイルが重なって2倍になった時に何かしらのアニメーションがあり典型的には少しぽよんぽよんする。おれは、アニメーション周りでは少し差別化を図りたいと考えていて、その一つとして出来上がった数字の大きさによってぽよんぽよんの大きさを変えている。4ではほとんどぽよんぽよんしないが、32ではだいぶぽよんぽよんしていることが分かる。その他、吸収される方のタイルは少しfadeさせている。その方が吸収される感が直感的に伝わると思うからだ。人間の知覚は鋭く、多少のアニメーションの違いでもこだわればそれは伝わるとおれは考えている。アニメーション周りは今後も改善し続けたい。

このawesome2048は、出来るだけコミュニティの意見を反映させて改善していきたい。すでに2048というのは知れ渡ってるゲームでプレイした人も多いため、「こういう機能があったら良かった」というのがあればTwitterなどで積極的に発言してほしい。要求は早ければ早いほど反映されやすい。

ところで、React-NativeとScala.jsの組み合わせの力は素晴らしい。上の画像を見てみなさんはどのくらいのコードを想像するだろうか?実はおれは2048のアルゴリズムの実装も含めてここまで大体10時間で作ってしまった。これはおれが優れてるというのもあるし、React-Native + Scala.jsの経験がすでにあるというのもあるが、何よりScalaの素晴らしさに依るものが大きいと感じている。このやり方が広まればいいのにと思う。

サングラスしてるやつって何なの?

ママチャリがすごい勢いで迫ってくる。

後ろには子供が乗っている。ヘルメットはしていない。

もしぶつかってこけられたら子供がやばい。

右か?左か?どっちだ!?視線が分からん!!!

こんなことないだろうか。

田舎出身の人が都会に出てきて困ることの一つに、人混みをうまく避けれないことがあるようだ。人混みをうまく避けて歩くには、他の人がどこを見ているのかを把握すればいい。特に、真正面から衝突しないためには視線でどっちに避けるかの合図をして避けるのが自然と身についているマナーだ。

サングラスをして視線を隠すことはこれを拒否してることになる。歩道を自転車で走ること自体がルール違反なのに、ことさら視線を隠すというのは言語道断。

これは自転車乗りに関わらず歩いている人にも言えることだ。危険だからやめて法律で禁止してほしい。

(etiles report) 2048を実装してクロスプロモーションする

etilesはiOS版を出してから2日で3x3の累計プレイヤー数が100人になった。確かに一瞬だけ爆発したけど、それ以降、ユーザの伸びはあまり伸びていない。

この期間でわかったことは、etilesにはパズルゲーム好きを惹き付ける魅力がある。しかしそれだけではアプリのユーザは増えない。ユーザを増やすためには、プレイする以前に魅力的に見えないといけないし、そもそも検索に引っかからないといけない。多くの人にetilesを知ってもらうためには広告を出したり、アプリ紹介サイトに投稿したりいろいろとやり方があるとは思うが、おれはそういう強引なやり方は好きではないし、出来ればユーザの自発的なshareと検索によって広まっていくのが理想だと思っている。それが、今の時代のアプリの広がり方だと思うからだ。そういう意味では、プレイヤーがあまりshareをしてくれない現状には絶望している。

そこで、自分にとって今気が進む広め方は何かと考えると、もう1つアプリを作ってクロスプロモーションをすることだと思った。これならば、アプリがもう1つ増えることにもメリットがある。クロスプロモーションはこのやり方に限らず、他の人のアプリを紹介する広告を出して代わりに紹介してもらうというやり方がむしろ一般的で、それもやろうかと思っているが、自分のアプリでクロスプロモーションするのが一番直接的に効果があると思った。

では何のアプリを作るのか。2048に決めた。どういうアプリを作るのが良いかと考えた時、検索されやすいメジャーなものが良いからだ。その他にもメジャーなものは作ってしまってアプリの数を増やそうかとは思っているが、まずは2048にする。

2048というのはプレイをするのも楽しいが、実装自体も面白い。いやこれはもしかしたら実装が面白いものはプレイしても面白いという驚愕の事実を発見しただけなのかも知れないがそれはさておき、Githubを調べるとおれさま実装がたくさん出てくる。というわけでアルゴリズムの実装自体にはさほど価値はないため、公開する。

2048はなぜ実装が面白いかというと、アホがアホな実装をすると死ぬほど複雑でバグだらけのコードになりそうだが、うまく書くとコンパクトに書けそうだからだ。これは対称性からそう思うというのもあるが、スワイプ後にタイルがたし合わさっていく操作が関数型プログラミングのfoldと相性が良さそうだからというのもある。

github.com

これを使ってどうやってreact-nativeで2048を実装するかというのもすでに頭にある。動作するかはやってみないと分からないが。とにかく、今週末は2048をやりたい。

(etiles report) タイルのデザインを変えようかと思っている

etilesの面白さは、タイルの裏表のセットが決まっていて、プレイしていくとこれがなんとなく染み付いてくるため、運ゲーから実力ゲーになるところにあると思っている。例えば、この黄色の裏は赤の確率が高いなどを瞬時に判断していくことで手数を少なくして、素早く回答することが出来る。今リーダーボードのトップレベルにいるプレイヤーは意識的かは知らないがこれをやっている。

一方で、これが出来ないといつまで経っても運ゲーから抜け出せず、面白みを感じることは出来ない。今のetilesのような小規模なゲームに対して初期投資としてタイルの組み合わせを全暗記してくれる人はほぼいないと思われるため、このラーニングカーブのきつさは導入の障壁になる。

今、これを解決する策として、色に数字を振るということを考えている。

f:id:akiradeveloper529:20180626175627p:plain

色に数字を振った時、etilesでは「偶(奇)数の裏は奇(偶)数のどれか」という性質を持つことが明らかになる。これならば、色を覚えるよりはわかりやすい。また、現在etilesが5x5までサポートしていないのは色盲者にとっても認識可能な色のセットとして明らかなものが10個だったからだ。全部白塗りでやってみた時のモックが以下となる。このように色を消せば理論上はNxN一般についてゲームを提供することが出来る。

f:id:akiradeveloper529:20180626175628j:plain

しかしこの場合には「どの色が足りてないか一発で分からない」という視認の難しさが問題として上がる。

そこで今おれは、既存のデザインの上に数字を乗せるという折衷案を考えている。

視界でエイムすればクロスヘアがなくても当たる

www.youtube.com

視界速度があなたにとって正しい場合、

  • クロスヘアがなくてもフリック出来る
  • どこを見てるのか分からなくなった時でもPSAをやれば三角法の原理で見えないクロスヘアを見つけることが出来る

視界速度が正しいとはこの逆なのだ。1つ目がn0thingの理論。2つ目はそのPSAへの応用。

PSAは正確にやることが難しいので、短い距離についてフリックした時にピッタリ合うセンシを見つける方がいい。その上で、PSAを試験薬として使うとよい。

日本でもっともn0thingの理論に近づいたのはr6sのkenkiで

www.youtube.com

の中では壁撃ちによる調整が紹介されている。方法自体は実はAVAのshakaも似たようなことを言ってるのだが

www.youtube.com

なぜkenkiの方が近いかというと、

  • フリックしてる。shakaのは遅い
  • kenkiは手首でエイムしていることを、彼の手元動画から知っている

からである。

やっていることはn0thingの理論に近いのだが、その理論背景の説明がないので京大入試においては0点となる。手首だけでやるのが良いことの説明があれば100点だった。

ただ、r6sやAVAのように比較的エイムの重要性がCSGOに近いゲームで同じセンシ合わせにたどり着いていることという事実は、n0thingの理論の正しさをより確からしくするものである。OWのことは知らない。OWはどうでもいいしマルス先輩にでも聞いてりゃいい。

電話をかけてくるな。封筒を送ってくるな。

インターネットの発達した現代社会において、早く滅んだ方が良いと思ってるものがある。電話と封筒郵便だ。

まず電話。おれは知らない電話番号から電話がかかってきてもまず100%とらない。知らない電話番号はその電話番号をググってどの会社の電話番号かを調べた上で再コールしてきた場合のみとる。これについては面倒なので、会社だとかは電話をかけた時に名前が表示される機能があったら便利だと思う。

電話をかけるということは電話をかけたらとってもらえると思ってるのだろうが、知らない電話番号に出ることはリスクの高い行為だ。まず、こちらが男性なのか女性なのか、何歳くらいなのか特定されてしまうだけでも危ない。特に女性は危ない。それを元にしてストーカー行為に発展する可能性もある。名字などは絶対に名乗ってはならない。会社などで電話対応をしてる人は自社名を名乗ることが習慣づけられてるのでうっかり名字を言ってしまいそうだ。そんなやつが家族にいたらトロールでしかない。

次に封筒郵便。例えば保険会社とかクレジットカード会社とかから送られてくる封筒だ。あれもやめた方がいい。

まず、封筒を開けるということは見たことになってしまうということだ。可能性は低いものの、開けた瞬間に爆発する可能性だってある。だから本当に自分に関係あるかわからないのに封筒を開ける行為はリスクが高い。だからおれはほとんどの封筒はそもそも開けない。そしてゴミに出すわけだが、これはゴミに個人情報を含めてしまうことになる。そんなものを送ってくるというのは害でしかない。重要書類を燃やすためだけの特別サービスというのが実はヤマトなどが提供しているのだが、はっきり言ってそこまでするのはめんどくさい。もちろん自分でシュレッダーにかけるのもめんどくさい。

もし締切がすごく重要なものであれば封筒の表に締め切りを書くべきだ。それならば開ける確率は高くなる。そもそもその程度のこともしないのは、送ったら開けてもらえると勝手に思ってる甘えにほかならない。開けてもらう努力を怠るべきではない。

開けた場合もほとんどの場合、読みにくい。特に新しいサービスがありますと言われても、今のものとどう違うのか読まないとわからないし、価値があるかどうかわからないものを必死に読み解こうとするわけがない。だからせめて、15秒間斜め読みして分かるように一枚のまとめを添えるべきだ。論文でいうアブストラクトだが、それで関心をもってもらえなければ本編の方を読んでもらわなくても構わないくらいの気持ちで、そのまとめは本気で作った方がいい。書きたいことを全部べたーっと書かれた文章など、よほど暇な人間じゃないと誰も読まない。

共通するところとして、何かしたら必ず応答してもらえると思ってるところに昭和感がある。

これらのシステムでは時代遅れで、もうemailで送ってほしい。電話の方が効率が良い場合も、まずはemailでコンタクトをとってからしたらいい。まぁ、Githubが設計図共有サイトな国では無理か。

ゲーム間センシはMonitor Distance 0%で合わせろ

昨日、ゲーム間でセンシを合わせるためには、マウスを微小距離動かした時のモニター上の移動距離を同じにするという考え方を示した。

akiradeveloper.hatenadiary.com

これはつまり、mouse-sensitivity.comでいうところのMonitor Distance 0%と同じであるという話もした。

今回は、理論ではなくおれの体感の話をする。

おれがCSGOで使っているセンシは1。225 (800dpi)。これがOW、Sniper Elite 4 (SE)、Far Cry 5 (FC)の3つのゲームでMonitor Distance 0%、Viewspeed v2でどのセンシに変換されるかを以下に示す。

Game FOV Monitor Distance 0% Viewspeed v2
OW 103 3.85 3.93
SE 82 2 5
FC 75 0.7050 0.8091

この動画の途中でおれの体感について述べた。

youtu.be

実際にViewspeedで合わせた5というのは、Monitor Distanceで合わせる場合にはCSGOで1。35に相当する。実際に5でやると視界がぷるぷるする具合が1。35でやった場合と同じように感じた。SEやFCのような遊びゲーの場合はそれほどエイムを突き詰めなくても良い(特にSEは全く関係ないと言ってもよい)ため、今までViewspeedでやっていても気づかなかったが、実際に確かめてみると確かにViewspeedで合わせると速いということがわかった。例えばSEの場合は1。35相当ということだから、この「速い」という感覚は正しいと思う。なぜならばこのセンシはCSGOでやると全く使い物にならないレベルのハイセンシだからである。

逆にOWの場合はCSGOとFOVが近いこともあり差が出ないため、どっちでもそれほど差は感じず、結果としてViewspeed v2によるセンシ合わせが悪いことに気づけなかっただけならず、OWでいいと思ったセンシをCSGOに逆輸入しての行ったり来たりを繰り返して混乱していたものと思われる。

以上より今のおれの考えとしては、Monitor Distance 0%でセンシを合わせることは間違ってないというものであり、みなさんも是非使っていただきたい。mouse-sensitivity。comがない場合でも、マウスの振り向き距離を正しく測ることが出来るのであれば、先のブログに示した計算式によって合わせることが出来る。