約 36,790 件
https://w.atwiki.jp/37564/pages/464.html
【作品名】漫殺-マンコロ- 【ジャンル】漫画 【名前】漫刻齋 【属性】マンガの神 【殺人数】6万0440人 【長所】漫画好き 【短所】オマーン国際空港に匹敵する名前 【備考】後の漫さんをトーンカッターの刑で殺害後、一次審査で下位99パーセントにあたる5万9895人をトーンカッターの刑で処刑 続いて生き残り605人のうち二次審査で5人中4人にあたる484人を血飛沫トーンの刑で処刑 生存者121人のうち50%を三次審査で殺害し、60人加算 漫さんをもう一度殺害しているのでもう1人加算し、6万0440人 vol.1
https://w.atwiki.jp/talesoftherays0228/pages/263.html
マギルゥ 大魔法使い エクスクイジット・エア -... 説明:式神を華麗に乗りこなす妙技を見せつける魔鏡技 特殊効果 なし 属性 風 MG 100 ステータス -... 最大CC 13 最大威力 1330 最大物攻 401 最大術攻 509 強化内容 -... 強化1 ミラージュレシオが追加で5%加算 強化2 自身のHPが10%回復する 強化3 敵ののけぞり時間+0.1秒 強化4 自身のHPが10%回復する 強化5 ミラージュレシオが追加で5%加算 魔鏡技動画 -...
https://w.atwiki.jp/fsharpmaster/pages/14.html
Add/Subtract/Multiply/Divide展開編 これらの関数は四つありますが、見て分かるように中の演算子が違うだけで内容的にはほぼ同じものです。なので、代表としてAddを展開し、その結果を見て他の三つも展開することにしましょう。 関数展開の基本は、内側から、前からの順番に行います。ただ、どの順でやってもできないということはなく、途中の分かりやすさが若干違うだけのことも多いので、あまり展開順にこだわらず、どこからやっても展開できるような基礎体力をつけておくことも重要です。 というわけで、まな板の上にAdd関数の定義を載せます。VisualStudioを使っている人は、StateBuilderやGetState、SetState、StatefulFunc、Runなどの定義と一緒にソース上に貼り付け、コンパイルエラーが出ない状態にしてください。。 let Add x = state { let! currentTotal, history = GetState do! SetState (currentTotal + x, (sprintf "%dを加算" x) history) } 1.まず、GetStateとSetStateが関数であるためその定義と置き換える。 二つの関数の定義は以下のとおり。 let GetState = StatefulFunc (fun state - state, state) let SetState newState = StatefulFunc(fun prevState - () , newState) GetStateは引数がないためそのまま置き換えるだけ。 SetStateは、引数に与えられている「(currentTotal + x, (sprintf "%dを加算" x) history)」を、関数定義の右辺のnewStateと置き換えます。 置き換えたのが以下のような状態です。 let Add x = state { let! currentTotal, history = StatefulFunc(fun state - state, state) do! StatefulFunc (fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)) } これで、Addしか使わないならもうGetStateやSetStateの定義は不要になりますが、置き換えたAddは、これまでと同じように動くはずです。Alt+Enterで試して、これまでと実行結果が変わってないことを確認してください。 今後このような置き換えによる式の展開、変形を延々と繰り返していくことになりますが、一つ作業をしてコンパイラがエラーを出さなくなったら、その都度Alt+Enterで動作が変わってないことを確認してください。 2.return()の補完 プログラミングF#のどこにも書いていないのですが、計算式がdoのような値を返さない式で終わった場合は、コンパイラによってreturn ()が補完されてから解釈されます。僕はこれに気づくまで数日苦しみましたが、分かってしまえば当たり前のことといえます。 let Add x = state { let! currentTotal, history = StatefulFunc(fun state - state, state) do! StatefulFunc (fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)) return () } 3.returnの置き換え(ワークフロー展開1) いよいよワークフローの糖衣構文を解いていきます。 この作業は、途中コンパイルが通らず、うまくできているのか分からない状態になりますが、大気圏に突入するつもりで頑張ってください。 最初は簡単なreturnの展開から始めます。 困ったことにプログラミングF#には載ってないのですが、コンパイラがワークフローの糖衣構文を展開する際の置き換えルールがあります。幸い「実践F#関数型プログラミング入門」には載っているので、ここから引用します。 return exp ⇒ b.Return(exp) expはreturnの引数に与えられた何らかの式です。ここでは()になります。 bはワークフロービルダのオブジェクトで、ここではstateがそれにあたります。 これだけあれば最初の展開は可能です。 let Add x = state { let! currentTotal, history = StatefulFunc(fun state - state, state) do! StatefulFunc (fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)) state.Return () } ここからしばらくは前半最初のヤマ場となります。VisualStudio上で作業をしている場合はコンパイルエラーを表す赤い波線が出たままになっていると思いますが、次のステップが終わるまで我慢して下さい。 4.do!の置き換え(ワークフロー展開2) return同様、do!の糖衣構文の展開ルールも「実践F#関数型プログラミング入門」から引用します。 do! expr in expr2 ⇒ b.Bind(expr, fun() - expr2) なにやら怪しげなルールですが、これ(とlet!の展開ルール)こそがワークフローを形成している最も重要な変換ルールですので毎日暗唱するぐらいのつもりでいてください。ちなみに上のdo!についているinはソース上では省略されています。 まず、二行目のdo!から展開します。なぜ2行目から展開するのかと言いますと、展開すると2行目のdo!のほうが「内側」になるからです。やってみれば分かります。 上記の変換ルールでexprにあたるのは、do!の右にある式全部です。expr2にあたるのは次の行以降、stateの閉じ括弧までの式全部になります。この、「閉じ括弧までの式全部」を、「残りの計算」と言う意味で「継続」と呼びます。末尾再帰で出てきた「継続」と内部的には同じものですが捉え方はかなり違うので注意してください。 2行目のdo!から見ると継続は3行目だけになりますが、1行目のlet!から見ると2行目と3行目の両方を結合した処理が継続となります。 それでは、2行目のdo!を展開してみましょう。 let Add x = state { let! currentTotal, history = StatefulFunc(fun state - state, state) state.Bind( StatefulFunc(fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)), (fun () - state.Return ()) ) } do! → state.Bind( do!の右にあった式 → state.Bindの最初の引数 do!の次行以降の式 → state.Bindのに番目の引数 になっていることを確認してください。 この変換は、F#のコンパイラが行っていることで、定義したり変更したりすることはできません。 5.let!の置き換え(ワークフロー展開3) さらに最初のlet!を置き換えます。let!の展開ルールは以下のようなものです。 let! pat = expr in expr2 ⇒ b.Bind(expr, fun pat - expr2) ちなみに上のlet!についているinもソース上では省略されています。 これをよく見ながら、半ば機械的にソースを書き換えていきます。 let Add x = state { state.Bind( StatefulFunc(fun state - state, state), (fun (currentTotal, history) - state.Bind( StatefulFunc(fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)), (fun () - state.Return ()) ) ) ) } patとなっているcurrentTotal, historyと、二つ目の引数の前後に括弧を補いました。 最後に、不要となった一番外側のstate{}を削除すると、コンパイルが通るようになっているはずです。 let Add x = state.Bind( StatefulFunc(fun state - state, state), (fun (currentTotal, history) - state.Bind( StatefulFunc (fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)), (fun () - state.Return ()) ) ) ) ここで一旦Alt+Enterで実行してみて、プログラムの動きが変わっていないことを確認してください。 元のプログラムの面影はほとんど無くなってしまいましたが、これは元の式と同じ式なのです。 6.Returnを定義に置換する(ワークフロー定義展開1) まだまだ続きます。 これからの作業は、state.Returnやstate.Bindの記述を、StatefulFuncのmemberとして定義された関数と置き換えていく作業です。 Returnメンバ関数は以下のように定義されています。 member this.Return(x a) = StatefulFunc(fun initialState - x, initialState) 式の中でReturnには()が引数になっていますので、この定義のxを()に置き換えて、中ほどのstate.Returnを以下のようにします。 let Add x = state.Bind( StatefulFunc(fun state - state, state), (fun (currentTotal, history) - state.Bind( StatefulFunc(fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history)), (fun () - StatefulFunc(fun initialState - (), initialState)) ) ) ) 7.内側のBindを定義に置換する(ワークフロー定義展開2) 続いてBindの展開です。 Bindは以下のように定義されています。ちょっと悪夢のようですが、これに慣れないとしょうがありません。 member this.Bind( result StatefulFunc state, a , restOfComputation a - StatefulFunc state, b ) = StatefulFunc(fun initialState - let result, updatedState = Run result initialState Run (restOfComputation result) updatedState ) 引数は二つ。resultとrestOfComputationですが、今Bindに与えられている二つの式を、= 以降の式のresult、restOfComputationと置き換えてしまうのです。 ただし注意があります。Bindの定義にある let result, updatedState = Run result initialState の、=の左にあるresultは、引数にわたってきたresultとは型も値も全くの別物で、Runの実行結果に同じ名前を付けているだけです。次の行のresultもそうです。置き換えるのは、この行の=の右にあるresultだけですので間違えないで下さい。このあたりこのサンプルは初学者に配慮が足りないなぁと思ってしまいます。 ぼやいていても仕方がないので、元々do!だった内側のBindからやってみましょう。 let Add x = state.Bind( StatefulFunc (fun state - state, state), (fun (currentTotal, history) - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) ) BindのあったところがStatefulFuncになり、二つの引数がresultとrestOfComputationと置き換わっているのが分かるでしょうか。 resultの置き換えには括弧を補っています。 8.外側のBindを定義に置換する(ワークフロー定義展開3) ちょっと大変なことになってきた感じがしなくもないですが、機械の体を手に入れたつもりで外側のBindも展開します。 restOfComputationにあたるものが、5行にわたる式であることに気をつけてください。 let Add x = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun state - state, state)) initialState Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) result) updatedState ) これで、ワークフローの展開ができました。すでにStateBuilderクラスもそのオブジェクトstateもこの式からは無くなっているので、この時点でこれらのクラスがなくてもコンパイルが通るようになっているはずです。 このように、ワークフローの展開は以下のような2段階の構成になっています。 do!やlet!、returnを、state.Bindやstate.Returnを使った式に置き換える。(糖衣構文の展開) state.Bindやstate.Returnを、StateBuilderの定義に従って置き換える。 この作業を経ることで、ワークフローがどのような式を作成するかを知ることができます。 知ることができます、と言われても、上でできている式はかなりのものです。パッと見て意図が分かればたいしたものですが、僕は分からないので、これからは上の式を簡約していきます。ここから式は小さくなっていく一方ですのでご安心を。 9.RunでStatefulFuncの皮をむく まず、内側のStatefulFuncの1行目にあるRunを簡約してみます。Runの定義は以下のようなものです。 let Run (StatefulFunc f) initialState = f initialState これを見ると、関数fという中身をもつStatefulFuncとinitialStateの二つを引数にとり、initialStateに関数fを適用した結果を返す機能を持っていることがわかります。つまり、 Run (StatefulFunc(fun a - a * a) c という式があったら、StatefulFuncから関数(fun a - a * a)を取り出し、その引数aにcを代入して「c*c」としていいということです。 Run (StatefulFunc(fun a - a * a) c = c * c この二つの式は等価なのです。 これを念頭に置くと、、 Run (StatefulFunc (fun prevState - () , (currentTotal + x, (sprintf "%dを加算" x) history))) initialState は、 () , (currentTotal + x, (sprintf "%dを加算" x) history) と同じであることがわかります。 ちょっと引っかかるのが、Runの二番目の引数になっているinitialStateが消滅してしまっていることです。 これは、StatefulFuncの中にある関数の仮引数prevStateが関数の中で使われていないためなのですが、どこか釈然としませんね。 こういうちょっとバカにされているような気分になることが、StatefulFuncの簡約にはたびたび出てきます。あまり気にしないようにしましょう。 と言うわけで、式全体は以下のようになります。 let Add x = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun state - state, state)) initialState Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - let result, updatedState = () , (currentTotal + x, (sprintf "%dを加算" x) history) Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) result) updatedState ) 式の真ん中へんで右に尖がっていたところが落ち着きましたね。 ところで、その行を改めてみていると、let束縛の左右にタプルが来ていて、以下のように束縛されていることが分かります。 let result = () let updatedState = (currentTotal + x, (sprintf "%dを加算" x) history) これを、次の式のresult、updateStateと置き換えてしまうと、この行は不要になります。 let Add x = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun state - state, state)) initialState Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - Run ((fun () - StatefulFunc(fun initialState - (), initialState)) ()) (currentTotal + x, (sprintf "%dを加算" x) history) ) ) result) updatedState ) 1行減りましたね。 10.fun () に()を与える。 今しがた変形して1行にまとめた行を見ると、Runの最初の引数になっている式が、以下のような形をしていることに気がつきます。 (fun () - StatefulFunc(fun initialState - (), initialState)) () これは、unitを引数にとる関数にunitを与えているわけですから、直ちに関数から取り出すことができます。 StatefulFunc(fun initialState - (), initialState) このように、unitを引数にとる関数にunitを渡す行為は一見無駄なように思えますが、関数型言語の世界では「遅延評価」というものを形作る重要な考え方になります。頭の隅に置いといてください。 さて、行全体としては Run (StatefulFunc(fun initialState - (), initialState)) (currentTotal + x, (sprintf "%dを加算" x) history) のようになりました。 この式は、先ほどのRunの展開と同じように変形できますので、 (), (currentTotal + x, (sprintf "%dを加算" x) history) と簡約できます。 ずいぶん短くなってしまったので、前後の括弧を取り込んで行をまとめて見ると、全体として以下のようになります。 let Add x = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun state - state, state)) initialState Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - (), (currentTotal + x, (sprintf "%dを加算" x) history)) ) result) updatedState ) 11.initialStateの正体 少し目先を変えて、外側のStatefulFuncの1行目に出てくるRunを先に簡約することにしましょう。 let result, updatedState = Run (StatefulFunc(fun state - state, state)) initialState まずRunでStatefulFuncの中身を取り出して、initialStateに適用します。するとこんな式になります。 let result, updatedState = initialState, initialState というわけで、result, updatedStateはともに同じ値initialStateになりました。これを下のresult, updatedStateと置き換えると以下のようになります。 let Add x = StatefulFunc(fun initialState - Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - (), (currentTotal + x, (sprintf "%dを加算" x) history)) ) initialState) initialState ) ここでRunに続く関数に注目してください。引数は(currentTotal, history)というタプルになっています。ところがその関数が適用しようとしている値はinitialStateという一つの束縛変数です。これはどうしたことでしょう。 実は簡単なことなのです。initialStateはひとつの変数ですがその型は何かのタプルなのです。どうせ(currentTotal, history)に適用されるのですから、initialStateは(currentTotal, history)という名前の2変数のタプルとしてしまいましょう。 let Add x = StatefulFunc(fun (currentTotal, history) - Run ( (fun (currentTotal, history) - StatefulFunc(fun initialState - (), (currentTotal + x, (sprintf "%dを加算" x) history)) ) (currentTotal, history) ) (currentTotal, history) ) こうすることで、2行目の関数の引数が(currentTotal, history) となり、その内側の関数が適用する変数と同じになるので、内側の関数に(currentTotal, history) を適用する際に名前を変える必要がなくなります。 ちょっと変な感じですが、この簡約に問題ないことが納得できるまでよく考えて下さい。 let Add x = StatefulFunc(fun (currentTotal, history) - Run ( StatefulFunc(fun initialState - (), (currentTotal + x, (sprintf "%dを加算" x) history)) ) (currentTotal, history) ) 12.あと少し 最後にRunをはずして中身をまた(currentTotal, history) に適用します。 let Add x = StatefulFunc(fun (currentTotal, history) - (fun initialState - (), (currentTotal + x, (sprintf "%dを加算" x) history)) (currentTotal, history) ) この関数もinitialStateが中の式で使われていないため引数は捨てられます。なんだかなぁ。 let Add x = StatefulFunc(fun (currentTotal, history) - (), (currentTotal + x, (sprintf "%dを加算" x) history)) というわけで、たったこれだけの式になってしまいました。なんだかバカにされている気がしてきませんか? この式をじっと見ると、なるほどRunをかませて(0, [])を与えると()と、加算値と文字列のリストのタプルが返るだろうということが読み取れます。これがAddの正体だったのです。 同様にSubtract、Multiply、Divideも定義できます。 let Subtract x = StatefulFunc(fun (currentTotal, history) - (), (currentTotal - x, (sprintf "%dを減算" x) history)) let Multiply x = StatefulFunc(fun (currentTotal, history) - (), (currentTotal * x, (sprintf "%dを積算" x) history)) let Divide x = StatefulFunc(fun (currentTotal, history) - (), (currentTotal / x, (sprintf "%dを除算" x) history)) calculatorActions展開編 (文責:片山 功士 2011/12/29) 今日: - 人 昨日: - 人 トータル: - 人
https://w.atwiki.jp/talesofdic/pages/22658.html
N・L・K・L・キック(ナタリア・ルツ・キムラスカ・ランバルディア・キック) 概要 N・L・K・L(ナタリア・ルツ・キムラスカ・ランバルディア)・キックとは、悪を見逃さない正義のキックをお見舞いする魔鏡技。 初出はレイズのナタリア。 登場作品 + 目次 レイズ 関連リンク派生技 関連技 ネタ レイズ 習得者 ナタリア・L・K・ランバルディア 悪を見逃さない正義のキックをお見舞いする魔鏡技。敵に麻痺を付与する。 分類 魔鏡技 属性 光 HIT数 12 消費MG 80 基礎威力 1035→1345 増加MR 5→29% 習得条件 季節魔鏡「かわいい射的の景品」を入手 発動条件 MG満タンの状態で発動 追加効果 麻痺付与 強化1 ダメージが10%上昇 強化2 ミラージュレシオが追加で5%加算 強化3 ミラージュレシオが追加で5%加算 強化4 ミラージュレシオが追加で5%加算 強化5 ダメージが10%上昇 高所から敵陣に矢の雨を降らせた後、ジャンプからの急降下キックでとどめを刺す。 カットイン演出はストーム・フォートレスと同じ。 台詞 「正義執行、致しますわ! とうっ! ナタリア・ルツ・キムラスカ・ランバルディア・キーック!」 解説 ※アビスグリーンのお面(正面)をつけている時に確率で発生。通常ボイスと同時に流れる。 「説明しよう! アビスグリーンが繰り出すお仕置きキックはどんな悪も改心させてしまうのだ!」 + 魔鏡イラスト 「見てください、アッシュ!かわいいですわ」 ▲ 関連リンク 派生技 ▲ 関連技 ▲ ネタ 特撮ヒーローにありがちな解説を読み上げている声はヴェイグ。 ▲
https://w.atwiki.jp/kituneko0523com/pages/21.html
一時的狂気(1d10分): 一度に5ポイント以上SANが減り アイデア が成功 1 .殺害癖 :自分の脅威となる存在をひたすら殺そうとする。 2 .失語症 :喋れなくなる。 会話、喋る必要のある技能使用不可 3 .身体の不調:体の強張り、嘔吐など。SAN値-1 全技能成功値-5 4 .気絶 :その場で倒れる。 応急処置 医学 かCON×5で復帰 5 .偏執症 :何か特定のことに激しく執着するようになる。 6 .偏食症 :変なものを食べたがるようになる/食事ができなくなる 7 .反復 :他の人の行動を真似てしまう 8 .視界遮断 :恐怖のあまり目を閉じてしまう。視界が関わる技能成功値-50 9 .多弁症 :ひたすらぶつぶつと喋り続ける。集中力を必要とする技能成功値-20 10.自殺癖 :SAN値チェック時に自殺を試みようとする 11.自傷癖 :自分の身を傷つけてしまう。SANチェック時ダメージ1d2 12.逃走 :その場から逃げようとする 13.幼児退行 :子供のような言動しか取れなくなる 14.呆然 :誰かに促されないと何もできなくなる 15.暴力 :すぐ力に訴えようとする。交渉系技能-30 16.不信 :誰も信じれなくなる 交渉系技能不可 単独行動をとりたがる 17.幻聴 :聞こえない音が聞こえる SANチェック時マイナス値に2加算 18.幻覚 :見えないものが見える SANチェック時マイナス値に3加算 19.感情噴出 :大笑い、大泣きなど。魔法の使用不可、その他の全技能成功率半減等 20.記憶喪失 :1d20時間内の出来事を忘れてしまう。 不定の狂気(セッション中治癒不可):一定期間のうちに現在SAN値の20%が減った場合 1. 睡眠障害 :眠れなくなる。一日寝なかった場合技能成功-5 2. 破壊衝動 :自分の脅威/障壁となる存在をひたすら破壊しようとする。 3. 幻覚 :見えないものが見える SANチェック時マイナス値に3加算 4. 幻聴 :聞こえない音が聞こえる SANチェック時マイナス値に2加算 5. 偏執症 :何か特定のことに激しく執着するようになる。 6. 暴力 :すぐ力に訴えようとする。交渉系技能-30 7. 悪夢 :寝るたびに悪夢を見、そのたびにSANチェック1/1d2 8. 偏食症 :変なものを食べたがるようになる 9. 不信 :誰も信じれなくなる。交渉系技能不可 単独行動をとりたがる 10.達観 :全てを受け入れてしまう。SAN値マイナス値が倍。
https://w.atwiki.jp/msonb/pages/259.html
属性系 アビリティ効果 必要熟練度 職 取得可能な職業 属性 自属性の装備の場合、威力が+20% 6000 剣 風水師,陰陽師,忍者頭,忍者マスター風魔の首領,魔風忍者 意合 自属性の装備の場合、威力が+50% 12000 剣 拳聖,チャンピオン,忍者頭,忍者マスター風魔の首領,魔風忍者 装備威力の%分加算される 元々属性が合致した場合20%加算の為、属性の場合計40%、意合の場合計70%となる 魔法剣と併用しても魔法剣分が乗算される訳ではない
https://w.atwiki.jp/talesoftherays0228/pages/150.html
フィッツガルドの田舎者 blankimgプラグインエラー:ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 殺劇舞荒剣 説明:灼熱の乱舞剣を叩き込む魔鏡技 特殊効果 なし 属性 火 MG 100 ステータス 最大CC 5 最大威力 779 最大物攻 56 最大術攻 44 強化内容 強化1 ミラージュレシオが追加で5%加算 強化2 自身のHPが10%回復する 強化3 敵ののけぞり時間+0.1秒 強化4 自身のHPが10%回復する 強化5 ミラージュレシオが追加で5%加算 魔鏡技動画
https://w.atwiki.jp/nika/pages/17.html
キャラクター情報資金 鉱石 ステータス(統率力・技巧力・使役力)運用値 SP AP パッシブ能力 規模 魔力 施設 撤退先指定 キャラクター情報 Nikaの能力や成長要素を解説します。99期時点での内容です 資金 現在の資金量(+次回支給日にもらえる資金) 鉱石(+次回支給日にもらえる鉱石) 統率力 ステータス。AP3を使って任意の能力値を1段階成長させられる他の三国志NETの能力値と異なり、戦闘への補正は少ないが立ち回りに大きな差が生まれる 技巧力 使役力 赤運用 各属性モンスターの運用値。モンスターの攻撃力、防御力が上がる属性による竦み:赤>緑>青>赤 緑運用 青運用 白運用 ゴーレムの運用値。ゴーレムの攻撃力、防御力と、対ゴーレム戦での攻撃力、防御力が上がる SP スキルポイント。スキルを使うのに必要なもの AP アビリティポイント。能力値(使役力・技巧力・統率力)を上げるのに使う 規模 施設レベルみたいなもの。規模が大きいほど建てられる施設が増えるし魔力も上がる 魔力 モンスターを使役するために必要な力。強いモンスターを使うのに必要 施設 所持している施設 撤退 設定しておくと、滞在地が敵国に支配されたりしてスケジュールが失敗したら指定した都市まで撤退してくれる 資金 資金は施設を建てたり規模を上昇させたりする際に消費する、主により強いモンスターを使うためのステータスです。 毎年1月に支給されます。国家の状態や無所属であるか関係なく必ずもらえます。 使役や技巧を上げると多くもらえるようになります[毎年貰える資金] 1000 + (年数-1)×100 + ステ補正 ステ補正=使役×50 + 技巧×150 また途中で使役や技巧を上げた際にそれまでの年数分もらえます。そのため、同じステータスのプレイヤーであれば使役を先に振っていても後から振っていても資金の総支給額は同じになります。 鉱石 部隊の編成・回復、ゴーレムの練成、装備の購入に使います。通常の三国志NETでの「金」に相当するのはこちらです。 毎年1月に支給されます。その国の給与上限によって左右されます。都市が減ったりして収入が低いと割れます。 [毎年貰える鉱石]詳しい計算確認中。【基礎2500 + (年数-1)×100 + 技巧×200 + 施設Lvより得られる鉱石】→ 国の給与上限と比較し低い方。給与上限が最大収入の1/3以下の場合は最大収入/3を代入 → その後統率×200を追加 統率補正は給与上限でキャップされた後に入るため、統率は技巧より給与割れに対して耐性があります。 資金と違って後から統率や技巧を上げてもそれまでの差額はもらえません。 そのため統率6→使役6と使役6→統率6では前者のほうが貰えた鉱石総額は大きくなります。 村落に拡張後は採掘を使って増やすこともできます。 給与割れにより入手できなかった鉱石収入はその戦争が終戦した際に入手出来ます。これにより、給与が少ない国で粘って戦ってもその後の成長が不利になりません。 ステータス(統率力・技巧力・使役力) AP3を使って3つの内から任意の能力を1成長させる 使役・技巧・統率の三種です。詳細はステータス 毎年1月に振り込まれるAPを3消費し上昇させます。(3年に1点上がる)途中参加であっても最初から登録しているのと同じAPが与えられます。 通常の三国志NETの武力や知力と比較し戦闘補正はほぼ入りませんが、可能なコマンドや持てる編成数が変わるため、立ち回りに大きな影響を与えます。 統率 部隊数増加、鉱石収入増加、スケジュール短縮。手数重視。戦線を維持するためにずっと出撃をし続けるのが役割です。ONが少なくても戦線に影響が出来て管理することも少ない初心者向け 技巧 ゴーレム錬成設置、対壁火力上昇、鉱石収入増加、資金増量内政官ではありません。対人戦闘、対壁、ゴーレム錬成設置と役割が多いです。時間管理が難しいが、戦線へ与える影響も一番大きい上級者向け 使役 最大HPアップ、戦闘用スキル習得強化、資金補正、魔力補正。ガス欠は早いですが緊急時の切り札として瞬発力を発揮出来ます。ONの多さと鉱石管理が求められる中級者向け。 基本的にどれか一つの特化より武官であれば統率と使役、技巧であれば技巧と統率か使役、とバランス良く上げたほうが無難です。 運用値 レベルに応じてモンスターの攻撃力・防御力が上昇する運用レベルの補正及び経験値はモンスターごとに適応される 赤モンスターの補正値=赤運用Lv×3+青運用Lv+緑運用Lv 敵部隊にダメージを与えた時、自部隊が被弾した時それぞれ経験値が入る。自部隊が被弾した時:自部隊の色の運用値に加算(自部隊がなら赤運用に加算) 敵部隊にダメージを与えた時:敵部隊の色の竦み上位の属性に加算(敵部隊が赤なら青運用に加算) 経験値の量はダメージ量と部隊のコストで決まるので、高級モンスターを使用するほど運用値の伸びは速いらしいしかし年数が経つと取得できる経験値量は同じコストの部隊でも悪くなっていくとのこと 運用差により取得経験値に補正がつくようになった 白運用はゴーレムを破壊するかされるかしないと上がらないため能動的に上げ難い。特定の色のモンスターに補正がかかる訳ではなく、ゴーレム戦でのみ全色のモンスターに大きな補正がかかるという特殊な仕様 SP スキルを使用するのに必要なもの 通常MAX値は120だが、統率力を9まで上げると最大値140に増加 毎年1月1日に回復するほか、内政系スケジュール実行でも回復する。回復量は以下の通り。 タイミング 回復量 毎年1月1日 50(※統率力7-8で60、9-12で70商店街の効果でも増える ) 巡察実行時 10(※施設:町の中心所持で最大18) 休憩15日 7(※16日で8。以降2日ごとに+1) AP 毎年1月1日に1ポイント支給される 平時の期間が一定期間経過後に1ポイント支給される終戦から2年経過で平時期間の加算が開始される(終戦後の仕官の場合は2回1月を迎える条件がある) その後40か月経過ごとに1ポイント増加する (例)5年9月に終戦 → 7年9月から平時期間の加算が始まる → 11年1月に1P付与 → そのまま非戦期間が続けば14年7月にさらに1P 一度戦時に入ると平時期間の加算はストップするが、0にリセットされるわけではなく、また終戦後2年を迎えれば続けて加算が始まる 停戦した場合は平時期間の加算は止まり、再び2年経過しないと加算されないようになる パッシブ能力 ステータス(使役、統率)を1上げるごとにパッシブポイント(PP)を3取得、技巧を1上げるごとにPPを2取得します。 PPを消費することで攻撃力、防御力、速度、クリティカル率を上昇させることが出来ます。 攻撃力、防御力、速度は1上げるごとにPPを3消費します。11以降は4PPが必要です。それぞれ1上げるごとに戦闘時に攻撃力・防御力が1.2%、速度が1%上昇します。最大は20までです。 クリティカル率は1上げるごとにPPを3消費します。1上げるごとに戦闘時にクリティカル率が1.5%上昇します。最大は5までです。 128期以前まで実装されていた統率の防御力上昇・使役の速度上昇、技巧のクリティカルダメージ上昇は無くなりました。 規模 拡張スケジュールで集落、村落、宿場町、街の4段階で成長する 成長するほど建設できる施設が増えたり、高級モンスターが使えるようになる 魔力 モンスターを使役するのに必要、魔力以上のコストの部隊は編成不可 能力値の成長や拡張で増加する。また、施設:魔法陣で増やすこともできる。 施設 収入が増えたり、モンスターの編成・回復が可能になったりする施設 拡張の際に規模に見合った施設の建設が必要となる。拡張した後なら取り壊し可 途中登録者への施設ボーナス5年以降:施設1に町の中心 以降4年起きにランク+1 10年以降:施設2に採掘所、以降4年ごとにランク+1 15年以降:施設3に魔法陣、以降4年ごとにランク+1 20年以降:施設4に採掘所、以降4年ごとにランク+1 30年以降:施設5に採掘所、以降4年ごとにランク+1 撤退先指定 あらかじめ設定しておくと、他国領内でスケジュール失敗時に設定した都市まで撤退してくれる。 その後、失敗時の行動を改めて実行する。撤退先も他国領だった場合など、これでも失敗すると休憩に入る。 SPが10以上あれば自動的に加速移動になり、通常の半分の時間で撤退ができる。
https://w.atwiki.jp/fsharpmaster/pages/15.html
もう一山登るぞcalculatorActions展開編 Add関数の正体が分かったところで、残ったcalculatorActionsの征服にかかりましょう。「Programming F#」ではもう少し式が加えられていますが、何行並んでいても本質的には同じなので、returnを入れて3行の式とします。これをVisualStudioに載せてコンパイルが通り、 let res, stat = Run calculatorActions (0, []) の実行結果を確認するところから始めましょう。 let calculatorActions = state { do! Add 2 do! Multiply 3 return "完了!" } 1.Add、Multiplyの展開 まず小手調べに、AddとMultiplyを「Add展開編」で出来上がった最後の式を使い展開します。 let calculatorActions = state { do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, (sprintf "%dを加算" 2) history)) do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, (sprintf "%dを積算" 3) history)) return "完了!" } ついでに、行の横幅が若干短くなるので、sprintfも適用してしまいましょう。 let calculatorActions = state { do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history)) do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) return "完了!" } 2.ワークフロー展開 どんどん進めましょう。次は、do!やreturnをstate.Bindやstate.Returnに置き換えていく作業です。変換ルールは以下のようなものでしたね。 return exp ⇒ b.Return(exp) do! expr in expr2 ⇒ b.Bind(expr, fun() - expr2) この変換を施したものが下のソースです。次の変換が楽になるよう、Bindの二つの引数は字下げしてその下に縦に並べるようにしました。 let calculatorActions = state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history)), (fun () - state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - state.Return("完了!")) ) ) ) ここまでできたら、実行して動きが変わらないことを確認してください。 3.ワークフロー定義展開 さて、後半のヤマ場です。ここで式の大きさが最大になります。 まずstate.Returnの展開から手をつけましょう。 member this.Return(x a) = StatefulFunc(fun initialState - x, initialState) ですから、xは"完了"という文字列になりますね。 let calculatorActions = state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history)), (fun () - state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - StatefulFunc(fun initialState - "完了!", initialState)) ) ) ) 次に、内側のstate.Bindを展開します。Bindの定義は以下のようなものでした。 member this.Bind( result StatefulFunc state, a , restOfComputation a - StatefulFunc state, b ) = StatefulFunc(fun initialState - let result, updatedState = Run result initialState Run (restOfComputation result) updatedState ) Bindの二つの引数を、StatefulFuncの中のresult(1行目の後ろに出てくる方)とrestOfComputationの代わりに置き換える作業を注意深く行います。 let calculatorActions = state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history)), (fun () - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - "完了!", initialState)) result) updatedState ) ) ) 横に長くなったので、行の途中に改行を入れました。 さらに、最初のstate.Bindを置き換えます。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - "完了!", initialState)) result) updatedState ) ) result ) updatedState ) 横幅を詰めるため改行を入れていますが、関数の構造を見失わないように注意してください。 これで、StateBuilderとはオサラバです。 4.戻りは下り坂を駆け下りるように簡約(1段目) ここで使用できる簡約のテクニックは、Add展開編で使用したものと全く同じです。簡約も内側から、前からが基本ですので、一番内側のStatefulFuncの1行目、"3を積算"がある行のRunをはずすところから始めます。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun initialState - let result, updatedState = (fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) initialState Run ((fun () - StatefulFunc(fun initialState - "完了!", initialState)) result) updatedState ) ) result ) updatedState ) ここまで進めると、その行のinitialStateは(currentTotal, history)という何かのタプルであることがはっきりするので、仮引数のinitialStateもろとも(currentTotal, history)で置き換えられます。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun (currentTotal, history) - let result, updatedState = (fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) (currentTotal, history) Run ((fun () - StatefulFunc(fun initialState - "完了!", initialState)) result) updatedState ) ) result ) updatedState ) ちなみに、このように、仮引数もろとも束縛変数の名前を都合のいい名前に一気に置き換えてしまうことを「α-変換(アルファへんかん)」と言います。文系の大学行ってた僕は、なんかこの響きを「かっこいい・・(萌)」などと感じてしまうのですが、同時に世代的にどうしても「ドラエ問題」を思い出してしまいます。蛇足ですが。 こうして名前を変えた(currentTotal, history)(元initialState)を、その前の関数に適用します。同じ名前の変数を適用しているので、中身を変える必要はありません。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun (currentTotal, history) - let result, updatedState = (), (currentTotal * 3, "3を積算" history) Run ((fun () - StatefulFunc(fun initialState - "完了!", initialState)) result) updatedState ) ) result ) updatedState ) もう一つ、関数を特定の値に適用して式を整理することを「β-簡約(ベータかんやく)」と言います(萌)。こんな当たり前のことにわざわざこんな小難しい名前がついているのは、α-変換とβ-簡約の二つでほとんどの式変形ができてしまうからなのですが、その辺の理屈は「ラムダ計算」というキーワードで色々調べてみてください。 さて、今のβ-簡約でその行の右にあったresult、updateStateが何であるかが分かりましたので、それを2行目のresult、updatedStateと置き換えます。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun (currentTotal, history) - Run ( (fun () - StatefulFunc(fun initialState - "完了!", initialState)) () ) (currentTotal * 3, "3を積算" history) ) ) result ) updatedState ) 2行目のfun ()を()に適用したのち、RunでStatefulFuncの中身を取り出して元updatedStateだった値に適用するところまで一気にいきます。 let calculatorActions = StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + 2, "2を加算" history))) initialState Run ( (fun () - StatefulFunc(fun (currentTotal, history) - "完了!", (currentTotal * 3, "3を積算" history)) ) result ) updatedState ) 5.そろそろフィニッシュ(2段目) 同じような「Run適用(実は端折ってますがこれはRunの展開+β-簡約です)⇒α-変換(currentTotal, history)⇒β-簡約」の操作は、"2を加算"の行にもできます。もうあんまり頭を使わなくなってきませんか?そもそもこれはコンピュータがやっている作業ですので、機械的な作業になるのは当たり前なのです。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - let result, updatedState = (), (currentTotal + 2, "2を加算" history) Run ( (fun () - StatefulFunc(fun (currentTotal, history) - "完了!", (currentTotal * 3, "3を積算" history)) ) result ) updatedState ) これによってまたresultとupdatedStateが確定しましたので、後に出てくるresultとupdatedStateを置き換えます。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - Run ( (fun () - StatefulFunc(fun (currentTotal, history) - "完了!", (currentTotal * 3, "3を積算" history)) ) () ) (currentTotal + 2, "2を加算" history) ) fun ()- の関数をβ-簡約します。2行削除するだけです。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - Run ( StatefulFunc(fun (currentTotal, history) - "完了!", (currentTotal * 3, "3を積算" history)) ) (currentTotal + 2, "2を加算" history) ) Runを展開してβ-簡約します。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - (fun (currentTotal, history) - "完了!", (currentTotal * 3, "3を積算" history) ) (currentTotal + 2, "2を加算" history) ) 勢いよく走っていたのにここで止めたのは、ちょっと注意が必要だからです。残った式にはcurrentTotal、historyという変数が出てきていますが、2行目のfunの束縛変数である(currentTotal, history)と、3行目のfunの束縛変数(currentTotal, history)とは別物ですのでごっちゃにしないようにしてください。必要はないのですが、違いが分かりやすいように一度α-変換(萌)をしておきましょう。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - (fun (currentTotal2, history2) - "完了!", (currentTotal2 * 3, "3を積算" history2) ) (currentTotal + 2, "2を加算" history) ) 内側の束縛変数の名前を変えました。これでもう混ざりませんね。最後のβ-簡約をしましょう。 let calculatorActions = StatefulFunc(fun (currentTotal, history) - "完了!", ((currentTotal + 2) * 3, "3を積算" ("2を加算" history))) お疲れ様でした。これがcalculatorActionsの正体です。 6.実行 サンプルプログラムの実行では、以下のようなコードを実行していました。 let res, stat = Run calculatorActions (0, []) もうわかると思いますが、これは先ほどできた式を使ってこのように展開されます。 let res, stat = Run ( StatefulFunc(fun (currentTotal, history) - "完了!", ((currentTotal + 2) * 3, "3を積算" ("2を加算" history))) ) (0, []) ここからRunとStatefulFunをはずします。 let res, stat = (fun (currentTotal, history) - "完了!", ((currentTotal + 2) * 3, "3を積算" ("2を加算" history))) (0, []) β-簡約します。 let res, stat = "完了!", ((0 + 2) * 3, "3を積算" ("2を加算" [])) どのように実行結果が確定したかが、ここからそのまま読み取れると思います。 val stat int * string list = (6, ["3を積算"; "2を加算"]) val res string = "完了!" 7.結局StateBuilderとは何なのか このような面倒な式変形の結果、劇的にソースが短くなるなら、「最初からそう書けばいいじゃないか」という気持ちが沸々と湧き上がってくるかもしれません。僕は少なくとも最初そんな風に感じていました。 ワークフローのルールに従って簡単だった式を一度煩雑な式に展開したあと、それをわざわざまた簡約して、それなら最初から簡約したものを書いておけば済むことです。なぜそうしないでワークフローを使うのでしょうか。 プログラムソースの清濁分離 一つの目的は、ソースから見かけ上煩雑な処理を振るいにかけ、本質的なことだけを記述できるようにすることです。通常プログラムには、業務のために行っていることと、そのコンピュータ自身が業務を続けるために行っていることがあり、多くの場合その両方が交互に出てきます。業務処理とエラー処理などがそれにあたります。こうしたプログラムでは、大切な業務処理が、ひどいときはそれよりずっと長いエラー処理のコードの隙間に入っているような状態になり、本質的な処理を見抜きにくいプログラムになりがちです。ワークフローは、そのような本質的な処理の間に混じる瑣末な汚れ仕事をビルダークラスの中に閉じ込めてしまうことができます。こうすることで、業務を記述する人は、業務内容をすっきりとソースに記述できるようになるのです。このあたりは、オブジェクト指向のフレームワークと似たところがありますが、そのような要求に対し、ワークフローは異なるアプローチを提供していると考えていいと思います。 そもそもそれはコンピュータの仕事だ 関数型言語では、上でやっているような関数の適用と簡約こそが「演算」そのものであって、それを人間でなくコンピュータにやらせるのは自然なことです。それなのに、多少処理が早いなどといった理由で「前もって人間が展開した式を書いておけばよい」というのは、ソースの中の「PI * 2」という記述を6.28...とわざわざ人間が計算した値を書いておいたほうがいいという主張と同じです。ソースの書き方で実行速度が変わるのは事実ですが、そもそも人間にとって分かりやすく書かれたものを、翻訳の手間をかけて実行するのはコンピュータの仕事ですし、それに耐えるだけの性能を今のコンピュータは十分持っているのです。犬ぞりを人間が押してやることに意味はあるかもしれませんが、ガソリンの入ったフェラーリは乗って運転してこそ意味を発揮するのです。 実行順の保障 StatefulFuncのような関数ではあまり恩恵を感じませんが、ワークフローというのはその名前の通り、実行順を保障する重要な機能があります。展開の途中で(fun () - ~)という関数をunit値()に適用する処理がありましたが、一見意味のなさそうなこういう処理が、プログラムの実行順を保障してくれています。 ワークフロー(モナド)とどう付き合っていくか 人が書いたワークフローの動きを追っていくだけでもこれほど大変なのですから、自分でビルダークラスを書き、その上で動く関数を設計して業務を記述できるよううになるところまで行くことはなかなか並大抵ではなさそうです。 ただ一つ言える事は、これからもし関数型言語が普及していくなら、プログラマには「自分でワークフロー(モナド)が設計できる」プログラマと「人が作ったワークフローを使うだけ」のプログラマに分かれていくことになります。オブジェクト指向言語で言うなら、フレームワークを作れるプログラマと、フレームワークを使うだけのプログラマの違いです。 どうせ今関数型言語を勉強するなら、ワークフロー(モナド)が設計できるプログラマを目指すべきではないかと思うのです。 (文責:片山 功士 2011/12/29) 今日: - 人 昨日: - 人 トータル: - 人
https://w.atwiki.jp/daace/pages/17.html
応援システム 応援 ダンゲロス流血少女に関係するSS・イラストなどを応援スレッドへ投稿することで、1~5ポイントの「応援ボーナス」を得ることができます。 この応援ボーナスは、特殊能力の使用に必要となり、クラスごとに設定されたコストに応じて支払います。 本キャンペーンのトップイラストを作成してくださった方へ、20ポイントを進呈します。 他参加者の試合の審判を務めてくださった方へ、20ポイントを進呈します。 試合終了後、応援スレッドへの申告をお願いします。 チームの敗退時には応援ボーナスはすべて消滅します。 応援ボーナスを直接譲渡することはできませんが、作品の投稿時に「これで得られるポイントは○○陣営のものとして加算してください」と要望いただいた場合はそのように処理します(審判への報酬20ポイントも同様とします)。 キャンペーン非参加者の応援投稿も受け付けております。どの陣営に対する応援なのか明記していただければ、応援ボーナスはその陣営に加算します。 試合が二日以上にまたがる場合 封じ手中断中の応援点いったん対戦を開始し、封じ手で翌日以降へ戦闘繰り越しとなった場合、開戦から再開までの期間で稼いだ応援点については、当該対戦中は使用できないものとします。当該対戦中は開戦までに貯めた応援点のみで戦ってください。 採点・加算自体はおこなわれ、次戦以降では使用することができます。 対戦が二日以上にまたがった場合の審判点審判点の配布については適宜対応するものとします。 使い方詳細 特殊能力の使用にあたって使用します。 コスト0のキャラクターは応援ボーナスを使用せずに特殊能力の使用ができます。