SEの随筆

技術系とは全然関係ないことも書きます。

とっきーが提供するアプリ プライバシーポリシーについて

■個人情報の収集
本アプリは、広告配信のためにGoogle 広告、Google AdMob、利用状況解析のためにGoogle Firebase Analyticsを使用しています

■広告について
本アプリでは、広告配信を目的として以下の広告配信事業者がご利用者の情報を自動取得する場合がございます。取得する情報、利用目的、第三者への提供等につきましては、以下の広告配信事業者のアプリケーション・プライバシーポリシーのリンクよりご確認ください。

AdMob(Google Inc.)
http://www.google.com/intl/ja/policies/technologies/ads/

Google 広告に関するポリシー
https://policies.google.com/technologies/ads?hl=ja

■利用状況解析ついて
本アプリでは、今後の開発の参考とするため、アプリの利用状況データを収集するツールとしてFirebase(Google Inc.)を使用しており、Firebaseがご利用者の情報を自動取得する場合がございます。取得する情報、利用目的、第三者への提供等につきましては、以下のGoogleプライバシーポリシーのリンクよりご確認ください。

Google プライバシーポリシー
https://policies.google.com/privacy?hl=ja

指揮官レベルの経験値テーブル推定

犯行動機

Wikiに指揮官レベルの経験値テーブルが110以降は載ってない!
困った!どうしよう!
→推定しよう!

推定手順

①とりあえずWikiにある分の経験値テーブルをスプレッドシートに書き出します
②次の指揮官レベルまでの経験値(Next経験値)の差を求める
③線形補間して110レベル以降を求める
ここまでの作業結果が以下

f:id:tokky-se:20180320174859p:plain

合ってるの?

微妙。
理由としては、
①50レベルのNEXTと51レベルのNEXTの間に大きな差がある

f:id:tokky-se:20180320175147p:plain
②70レベルのNEXTと71レベルのNEXTの間に大きな差がある。

f:id:tokky-se:20180320175249p:plain
上記の理由により、今回線形補間してみたうち110~111の間に上記と同様の差が見られた場合今回の推定のテーブルからは外れる。

Cordovaアプリケーション作成の反省会

Cordovaでアプリケーションを作成してみたので、その反省会です。

1. MVCの意識が希薄
チュートリアル後にアプリケーションを作ってみたわけですが、
CordovaのチュートリアルMVCがきれいに分かれていることを感じました。
*Service→model
*View.js→view
app.js→controller
アプリケーションを作っているときはここの意識が希薄で、
Viewにメソッドが偏っていました。
それぞれのファイルはあるので、それほどとっちらかっているわけでもありませんが、
「このメソッドをどこに書くのか」の点で自己レビューは不足していたと言わざるを得ません。
途中で一旦リファクタリングして再構成しようかなとも思いましたが、
今回のアプリケーションはmodelへの新規データ追加のみで更新対応をする予定なこともあり、
今回だけはそのままとしました。(会社で複数人開発してるときはこんなことをしてはダメですよ)

2. config.xmlの知識が足りない
Androidアプリケーションを作ったことがある方はminSDKVersionという言葉を聞けばなんとなくわかるかもしれませんが、
CordovaにおいてこのminSDKVersionを設定するのがconfig.xmlです。
わからない方も見ているかもしれませんので、簡単に説明すると、minSDKVersionは最低限動作するAndroidバージョンを指します。(厳密に言えばSDKのバージョンです)
config.xmlについてチュートリアルでは特に触れておらず、
APKへの署名でPlayStoreからエラーが返されたときにこんなのがあると認識しました。
次回開発前にドキュメントを読みくだす必要があると思います。

3. JavaScriptの知識が偏っている
基本的に私の知識はフロントエンド側に偏っています。
フロントエンドにも色々あるかもしれませんが、私の言葉の意味するところはDOM操作くらいしかやらないってことです。
基本的にDOM操作さえ使えればCordovaの開発でも早々困ることはない…と思っていたのですが、色々困ることがありました。
例えば、コンストラクタ関数。
バッチリNode.jsとかでサーバーサイドしている人は使っているかもわかりませんが、少なくともフロントサイドで使うことはあまり、と言うかないです。そもそもクラス定義をしなければならなそうなことはサーバー側で処理するので。
基本的にDOM操作で画面の表示を動かしたりajaxでリクエスト出したりしかしないので。
そもそもJavaScriptでクラス(っぽいもの)を書けることすら知りませんでした。
(でもこんな使い方するならPythonで書きたい…。)

4. 絵心がない
これはもう開発者とか知識以前の問題です。
アプリケーションを作成したら、アプリのアイコン画像を作成しなければなりません。
また、PlayStore用の横長画像も用意しなければなりません。
いらすとやなどを使わないのであれば、描くしかありません。
描くしかないのです…。

5. デザインセンスがない
デザインセンス、と言うよりはデザインパターンでしょうか。
基本的にモバイル版のアプリケーションというものは、PCで扱うWebアプリケーションとは異なった見た目、動作感をしています。
そのデザインパターンを知らないので、「こうした方がモバイルらしい!」とか知らないのです。
スマホを持っていると言ってもゲームアプリはモバイル感ないというか、また別ですからね…。
デフォルトで入っているPlayStoreアプリとかが私のモバイル感を感じる源です。というかそれ以外にあんまり知らないです。
チュートリアルでアニメーションさせるCSSとか入れてくれなければほぼWebViewそのままの動作感で制作完了させてたと思います。
せっかくなので、ネイティブアプリっぽい、モバイル感を感じるアプリケーションにしたいですよね。

 

 

 

糧食と指揮官レベルによる経験値ボーナス増加をわかりやすい図で表すよ!

最近アズールレーンというゲームをやっている。
その中でも気になったのは糧食というシステムだ。
簡単に説明すると、
 

  • 燃料というリソースを消費して糧食を購入できる
  • 購入した糧食使用することで、設定したキャラに経験値が入る
  • 経験値には快適度と指揮官レベルに応じてボーナスがかかる

 ということだそうな。

そこで私は気になってしまったのです…。
「これ、どのくらい燃料効率がいいの?快適度と指揮官レベルどっちを気にしたほうが効率いいの?」

ということで検証開始。
検証過程に興味がない人は下の方まで飛ばしてください。
まず糧食に関する効果と購入にかかる燃料を整理。

f:id:tokky-se:20180210150351p:plain
ちなみに今回は王家グルメとフルコースは考慮しない。(燃料で買えないから)

続いて対象となる艦の数と総経験値を確認。

f:id:tokky-se:20180210150601p:plain
どっちも自分で検証した結果ですが、同じ結果がwikiに乗ってました。

また、日本版wikiより、
>>基礎経験値(毎時)=指揮官レベル×12+240と見られている
引用:寮舎 - アズールレーン(アズレン)攻略 Wiki


更に、経験値ボーナスは
>>経験ボーナス(%):快適度÷(快適度+100)*100 (中国版Wikiより)
引用:寮舎 - アズールレーン(アズレン)攻略 Wiki
となるようだ。

つまり、指揮官レベルをX、快適度をYとすると、
(X*12+240)*(Y/(Y+100)*100)という式で表されることになる。
…なるほど?

しかしこのままでは平面のグラフに表せないのでイメージがわかない。
そうだ!Python使おう!(短絡的思考)

ということで簡単にコードを書いてみた。
この記事を見ている人が気にするかどうかはわからないですが、Pythonは3.6.2を使用しました。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 100, 1)
y = np.arange(0, 500, 1)
X, Y = np.meshgrid(x, y)
Z = (X*12+240)*(1+ 0.01 * (Y/(Y+100)*100))*5*0.64/38.4
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z)
plt.show()


上記を実行すると、こんなグラフが出力される。

f:id:tokky-se:20180210152144p:plain


手前の部分が原点で、右奥が指揮官レベル、左奥が快適度で、高さが燃料効率(燃料1あたりに得られる経験値量)を示します。
これでもよくわかんねーよ!という人はPythonをインストールして上記のコードを実行してみてください。マウスでグリグリ3Dのオブジェクトとして自由に動かせるのでかなりイメージ湧きます。

ちなみにコード中に出てくる変数Zの式を詳しく解説しておくと、

(X*12+240)*(1+ 0.01 * (Y/(Y+100)*100))*5*0.64/38.4
→基礎経験値 * 経験値ボーナス * 5隻 * 0.64(5隻設定時の経験値倍率) / 38.4(1時間あたりに消費される燃料)
です。全部の艦の合計経験値を消費燃料で割ってますので、単位としてはexp/oilでしょうか。(間違っていたらゴメンナサイ…)

出撃はMVP補正や旗艦補正、艦数の減少時におけるMVP補正の影響が大きくなるなどの補正を考えるのが面倒なのでがあるので比較対象として10時間委託を考えてみましょう。
10時間委託は燃料1200を消費し、6隻*18000EXPが手に入る委託です。

つまり経験値効率としては 6*18000/1200=90exp/oilとなります。
一旦、3Dの図を置いておいて、ざっくり指揮官レベルを60で固定として計算してみます。
糧食の経験値ボーナスが0の時を考えると…
基礎経験値が60*12+240=960
1200燃料では糧食は120000買えます。
5隻で120000を消費し切るのは、120000/3840=31.25(h)
基礎経験値と隻数の経験値ボーナスを勘案すると、1隻あたりもらえる経験値は960*31.25*0.64=19200
全体の経験値は19200*5=96000
燃料効率を求めると、96000/1200=80
この時点でほとんど委託と10しか差がありません。
グラフを書いて快適度が上がるとどうなるか見てみましょう。

コードは以下のようになります。

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 500, 1)
y = (60*12+240)*(1+ 0.01 * (x/(x+100)*100))*5*0.64/38.4
plt.plot(x,y)
plt.show()

グラフは下記のとおりになります。
f:id:tokky-se:20180210154415p:plain

右軸は快適度で、縦軸はexp/oilです。
手計算した80からグラフが始まっているのでなんとなくあってそうです。
90なんて軽々と超えていますね。しかも海軍カレーというバフをまだ残しています。
フリーザ並みの余力の残し方です。
最も、1200燃料というのは5隻で消費したとしても31時間15分かかるので、
委託にもメリットはあります。(副産物も美味しいですし)

まとめ

糧食は長時間委託よりも経験値効率がいいのでガンガン使おう!


以上です。ありがとうございました。