FC2ブログ

チラシの裏

 

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
    --:--  Top

2009.09.19[土] How to 団体戦 4回目

最初にイメージを張っておきます。

まずEIDの合計ですがこのような数式を使っています。
=SUM(INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+2,1),INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+3,1),INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+4,1))

Sheet2には前回の奴が入っています。
並び変え後←Sheet2
ROW関数を使って1行下がるごとに3ずつ上がる値を作り、それを利用してINDEX関数でエントリーナンバーを参照しSUMで足しています。
EID^2の合計は
=SUM(INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+2,1)^2,INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+3,1)^2,INDEX(Sheet2!A$1:A$52,(ROW(A2)-2)*3+4,1)^2)
です。チーム名1~3は以下のよな数式です。
=INDEX(Sheet2!$A$1:$D$52,(ROW(B2)-2)*3+COLUMN(B2),4)
ROW関数とCOLUMN関数を利用し、一列右に行くごとに1、一行下がるごとに3上昇する値を作り、横一列にそれぞれのチームに所属する機体のチーム名を表示しています。
チーム名は左のチーム名1~3を見ながら適当につけます。ここでも半角文字を使わないように注意しましょう。上にあげたものではアルファベット3文字で代用しています。
オーナー名は以下のようになっています。
=MID(INDEX(Sheet2!A$1:C$52,(ROW(B2)-2)*3+2,3),1,3)&"&"&MID(INDEX(Sheet2!A$1:C$52,(ROW(B2)-2)*3+3,3),1,3)&"&"&MID(INDEX(Sheet2!A$1:C$52,(ROW(B2)-2)*3+4,3),1,3)
基本的にはEIDの合計と同じです。INDEX関数で引っ張ってきた文字列から、MID関数で最初の3文字を抽出し、それを&でくっつけています。ここで注意する点はダブルコーテーションマークで囲まれた&は全角という点です。もちろんオーナー名の中に半角の文字を混ぜないためです。配置はこのようになっています。
=IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+2,5)="前","2,",IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+2,5)="中","5,","8,"))&IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+3,5)="前","1,",IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+3,5)="中","4,","7,"))&IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+4,5)="前","3",IF(INDEX(Sheet2!A$1:F$52,(ROW(I2)-2)*3+4,5)="中","6","9"))
やっていることは基本的に同じです。INDEX関数で引っ張ってきた文字に対し、IF関数でそれぞれ数字を割り当てます。もちろん上記のものは従来の指定方法に対応したものなので、上にあげたイメージではすべて後列配置となっています。(前でも中でもない文字は後としているから)
コピペ用は以下のようになっています。
=G2&","&H2&","&I2
つまり前3つをカンマを入れつつ繋げただけです。ここはCHXのチーム編集コマンド形式での出力です。後は確認用です。
初めの3つは
="【"&INDEX(Sheet2!$A$1:$A$52,(ROW(B2)-2)*3+COLUMN(B2),1)&"】"&INDEX(Sheet2!$A$1:$B$52,(ROW(B2)-2)*3+COLUMN(B2),2)
後の3つは
=INDEX(Sheet2!$A$1:$E$52,(ROW(B2)-2)*3+COLUMN(B2),5)
という感じです。ここまで済んだらコピーし、別のシートに値のみ貼り付け、A列>B列の優先度で昇順に並び変えます。これでチームがエントリーナンバー順に並びます。
あとちょっと

チームデータ作成に入ります。確認のエントリーナンバーとファイルネームを参考に、順番通りにCHXに3ファイル読ませて、チーム編集コマンドにコピペ用をコピペします。新しいファイルネームはチームのエントリーナンバーにするといいでしょう。補充チームの入ったチーム以外の作成が完了したらJupiterをチェックします。追加エントリーを確認し、なければスレで追加エントリーを閉め切る旨を書きこみましょう。前回団体戦の機体を使う場合RANDBETWEEN関数を使って補充チームを決定します。補充チームが入ったチームのデータも作成し、エクセルのデータをスレへ貼り付けるために成形します。
完成

成形したらテキストエディタへコピペし、タブを半角スペースに置換してスレに書き込みます。
団体戦特有の処理はここまでです。ということで一応これで終わり。続きはまた気が向いたら
スポンサーサイト

2009.09.18[金] How to 団体戦 3回目

予告通り正規表現の説明から。といってもググればいくらでも出てくるので、例示するだけにとどめます。
まず"■.*?\r\n\S*?:(半角スペース)*"と"■.*?\r\n\S*?:(全角スペース)*"ですが、これは

■第8回団体戦
ファイル名:

この部分を表しています。上記の2つでコロンの後に全角または半角スペースがあっても対応可能になっています。"\r\n\S*?:(半角スペース)*"と"\r\n\S*?:(全角スペース)*"ですが、これは

(改行)
XXXXX:

というパターンを表しています。つまり前回あげた2つの置換で

■第8回団体戦
ファイル名:MOA.CHP
オーナー名:MOA
チーム名:べいびーベイビーBABY
機体名:拠点強襲Mis†rÅL§
希望位置:789
コメント:
対空ルーチンを改良した感じです。
あんまり変わらないのですが、手持ちの中で一番足引っ張らなそうなので…。

これが

MOA.CHP(タブ)MOA(タブ)べいびーベイビーBABY(タブ)拠点強襲Mis†rÅL§(タブ)789(タブ)
対空ルーチンを改良した感じです。
あんまり変わらないのですが、手持ちの中で一番足引っ張らなそうなので…。

こうなります。これをタブが存在する行だけ抜き出すので、

MOA.CHP(タブ)MOA(タブ)べいびーベイビーBABY(タブ)拠点強襲Mis†rÅL§(タブ)789(タブ)

となるわけです。ここから前回の続きに入ります。前回の終了時点では以下のような感じでした。
VLOOKUPで検索したところ
ここまで来たら後は手作業です。「オーナー名がプレイヤーになっている」、「チーム名がチームXXになっている」、「希望位置がうまく抽出できていない」。このような所をCHPJupiterSearchを見ながら手で入力していきます。ここで気をつけるべきことはCHPのオーナー名、チーム名はすべて全角という点です。ここで半角で入力してしまうと、今回のように全角の中に半角が混ざり不格好に見えます。
ここまで終了したらブラウザでJupiterを開き、もう一度駆け込みエントリーを確認します。いなければテキストエディタにコピペして、タブを半角スペースに置換すればエントリー表の完成です。スレに張り付け追加エントリーを募集しましょう。

ここからチームの編成に入ります。まず適当な名前で補充チームのを仮置きをします。次にRAND関数を使ってそれぞれのチームに乱数を割り振ります。
RAND
次にRANK関数を使って割り当てた乱数の降順で並び変えた時の位置を求め、その数値を3で割りROUNDUPで小数点以下を切り上げます。
ROUNDUP
この数値がそれぞれの機体が所属するチームのIDです。
ここで30回ほど再計算をさせ乱数を変更します。これがチームを決めるので、あまり画面を見ないようにしましょう。適当なところで止め、別のシートにコピペします。このとき通常のペーストではなく値の貼り付けを使います。
値の貼り付け
これで、関数としてではなく数値として貼り付けられるので乱数が固定されます。貼り付けたらすべてのデータを選択し、並び変えとフィルタ>ユーザー設定の並び替えからH列>A列の優先度で昇順に並び変えます。
H列>A列

並び変え後
並び変え後

次はチームデータの作成準備です。

2009.09.18[金] 0f回避

とりあえず下の表を見てください。
ネグローニ
ジェイラー
エッグノッグ
綾影
ラスティ
ジャンプ
29
20
23
22
22
ジャンプ射撃
28
19
22
19
22
 
ノーランダー
トリンカー
月影
セメタリー
 
ジャンプ
25
25
24
25
 
ジャンプ射撃
25
23
23
24
 
 
パークドッグ
グラス
アラクネー
冥界
 
ジャンプ
24
27
26
24
 
ジャンプ射撃
22
27
25
22
 


これはそれぞれの機種の積載率130%,水平な場所という条件下での、ジャンプおよびジャンプ射撃時のジャンプ開始から硬直解除までの時間です。注目すべきはアラクネーと冥界の差です。この2機種は硬直時間は2~3fしか変わりませんが、カノンによる着地点予測射撃に対する耐性は大きく異なります。これは着地点予測射撃が基本的にアラクネーに対し最適化されていることに起因します。以前示した通り、着地点予測射撃は基本的に射撃間隔の長いほうが射程も長くなります。しかしアラクネーに対し最長の射程を誇る射撃間隔は、アラクネーより硬直時間の短い機種にとっては再ジャンプによる回避が可能な射撃間隔となります。もちろんこれは1対1に限定した机上の空論です。実際にはいろいろなノイズが入るのでこの通りにはいきません。しかし実戦でも着地点予測射撃の多くは、ぎりぎり回避できるかどうかというタイミングで飛んできます。そしてその回避できるタイミングで飛んできた弾を実際に回避できる確率を大きく上げるのが0f回避です。

実装面での話に入ります。まず回避に用いるジャンプチップはサブ内にあるということを前提とします。この場合、「別動作の実行による硬直解除の監視」という方法で0fジャンプを行う場合、硬直解除の確認ルーチンもサブ内へ置く必要があります。しかしサブ内(=回避ルーチン内)にこういったルーチンを組み込むのは、領域的にまた初弾に対する反応速度的に若干きついものがあります。
この欠点を克服したのがZ位置の監視による0fジャンプです。実装方法についてはほかのサイトを参考にしてもらうとして、ここではそのメリットに焦点を当てます。まず1つ目のメリットとしてあげられるのは、上記のとおりローカルループをサブ内へ組み込む必要がないという点です。もう1点あげられるのは、回避以外のルーチンを通す余裕が増えるということです。
自身の周囲に常に高速飛翔体があるような場合、別動作実行による硬直解除判断を使った0fジャンプではプログラムは以下のように流れます。

ジャンプ

ルーチンA
↓サブへ
硬直解除待ち

再ジャンプ

これに対しz軸監視での0fジャンプは以下のようになります。

ジャンプ

ルーチンA

z位置監視ルーチン

ルーチンB

再ジャンプ

たとえば次回ジャンプ方向などをカウンタで判断する機体の場合、前者の方法を使うとジャンプ直後に判断することになります。しかし後者の方法を使えば着地後に判断することも可能です。

しかしz位置監視による再ジャンプでも、連続してジャンプ射撃を行う場合前回の動作をキャンセルする必要はあります。ジャンプ射撃の場合、再ジャンプ可能になるタイミングではまだジャンプ動作中だからです。

 

注:実際に0fジャンプ機体を作ったことはないので、この記事は6割の受け売りと4割の想像で書かれています。

2009.09.18[金] 団体戦反省など

前回の団体戦からの変更点とその意図の説明および反省
まず最大の変更点はリーグ運営の変更。従来の3段式だと1リーグ5チームまでの団体戦では対戦回数はかなり少ない。せっかくのお祭りがこれでは少しさびしい。そこで対戦回数を増やすために最も手っ取り早い方法として並列1次リーグを採用した。理想的にはある程度ランダム性を残しつつ、なるべく同じチームと戦わないような分け方をするべきだが、そのようにわける方法を思いつかなかったので完全ランダムとした。自分としてはこれは十分に目的を達成することができたと思う。ただ時間がかかるという欠点はあるが。

もう1点の大きな変更は開始位置指定方法の変更。左右位置は固定、前後位置は指定可能から全9カ所から第3希望まで指定可能に変更した。この意図は2つある。1つは自由度の上昇。これは言わずもがな、左右位置が固定されていた以前に比べより自由に開始位置が選べるようになる。もう1点は無難な陣形をとりにくくするということ。以前は左右位置が固定されていたので基本的に無難な陣形になる。しかし今回の方法では無難とは言い難い陣形になることも多い。それによって見方機体とのハード、ソフト的相性のほかに初期位置による相性も楽しんでもらえる、と考えた。しかしこれは再考の余地があるようだ。今回横一列以外の希望位置を出したのは15%ほど。つまり大部分のひとは前後位置を指定できればそれでよいと考えている。不自由さを増す変更は改悪とされることが多く、この変更についてもそうとらえる人のほうが多いと予想できる。無難な陣形をとりやすい以前の方法を採用すべきだったのだろう。

次の変更点はチーム作成時の機体選びを完全ランダムに戻した点。前回の方法だと、自分のような弱小オーナーは多脚や車両が使いにくくなる。それが嫌だったので完全ランダムに戻した。

最後の変更点はエントリーナンバー決定方法。前回まではランダムだったが今回は所属機体のうち最もエントリーの遅い機体を基準に決定とした。基準としてチームの機体のエントリーナンバーの和も考えたが、一機でも戦況をひっくりかえせるので最も遅い機体基準とした。しかしこの決定方法は駆け込みエントリーがしづらくなるので、今はエントリーナンバーの和を基準としたほうがよかったと考えている。

また、最初に目的を達成できたと書いた並列1次リーグだが問題もある。勝率が等しかった時の処理だ。Wikiにある通り今回は合計順位/(対戦数+リーグ数)つまり合計順位/自分を含めた所属リーグの人数の和で決めたが、これは正確な基準ではない。何を基準にすればいいのか分からないのでこれを基準にしたが、正確な基準でないのならエントリーナンバーで比較すべきだったかもしれない。しかしこれも、団体戦は並列1次リーグでも対戦数が少なく同勝率になりやすい、つまりエントリーナンバーの影響が大きいという問題がある。不公平な基準での比較に比べればましではあるが、不満に思う人がいる可能性も否定できない。

2009.09.17[木] How to 団体戦 2回目

いきなり飛びますが、データのダウンロードから。
ウィキにある通り、まずスレにこれからエントリー表の作成に入るということを書きます。
次にCHPJupiterSearchを使って適当なページ数を取得します。1ページ10ファイルなので15ページも取得すれば十分でしょう。取得したらコメントに"団体戦"を含むファイルを抽出します。告知の通り"■第X回団体戦"で抽出してもいいのですが、団体戦とだけ書かれる方もいるのでこちらを推奨します。
抽出したらアップロードされた順に、つまり下からダウンロードしていきます。後のことを考えると10ファイルごとぐらいでフォルダ分けすることをお勧めします。こんな感じ↓フォルダ
ダウンロード中に同じファイルが連続してあったら、ページ取得中にファイルの修正が入ったということなので取得しなおします。

データのダウンロードが終了したらそれぞれのフォルダで更新日時昇順でソートします。
更新日時昇順でソート

更新日時=ダウンロード日時なので、これでダウンロード順(=エントリー順)にソートできます。ダウンロード中に何らかのアクシデントがあった場合は手作業でエントリー順に並び替えてください。
これがすんだらCHPJupiterSearchでページを取得しなおします。取得が終了したら下から1ファイルずつファイル名を突き合わせて、ダウンロード漏れがないか、順番はあっているかを確認します。もちろん駆け込みのエントリーも確認します。

これが終了したらエントリーデータの作成に入ります。ここではCHXを使った方法を紹介します。
まずCarListのロングモードで適当に全体の様子をながめます。
01-30
No1~30のチームです。シルバー・ライオットさんのファイルに余分なチームが入っているのがわかります。浸透襲撃さんのファイルにも空チームが入っていますが、CHXは空チームを認識しないので問題ありません。
31-50
No31~50のチームです。DM3さんのファイルには3機入ったチームが入っていることがわかります。こういった例外的処理を行わなければならないチームのことを頭の片隅に入れておきましょう。

ざっと把握したらCHXにCHPファイルを取り込ませます。ソートした状態ですべて選択し、D&Dすればその並び順を保ったまま読んでくれます。しかし一応確認しておきましょう。CarListで確認した余分なチームは削除します。

CHX1
すべてのチームを選択し、ファイル名、チーム名、オーナー名、機体名称を表示させた状態ですべて選択しコピーします。
テキストエディタ(ここではEmEditorですが、メモ帳でも出来ます。が、後のことを考えれば多機能なテキストエディタがあったほうがいいです。)にペーストし、半角スペースをタブに置換。タブはコピペで持ってくるか、正規表現をオンにして\t

置換前
置換前
置換後
置換後

ここで押さえておくべきことはチーム名、オーナー名、機体名称に使われる文字はすべて全角ということです。つまりこれ以降もデータ同士の区切りを半角スペースとすることで、チーム名などに含まれる全角スペースと区別できます。

置換したら表計算ソフトへコピペします。以降エクセルで説明します。
ペーストしたらまずNoが入っている列(普通はA列)を選択し、書式設定→ユーザー定義から表示形式を00にします。
00と入力する←00と入力
これで、1,2,3から01,02,03という表示に変わります。

表示形式を変更したら不要な列("("が入っている列など)を削除し、並び順も都合がいいように変更します。
前before
後after

ここまで終わったら希望位置の収集をします。
まず、スレから■第X回団体戦でレスを抽出します。
レス抽出

抽出したらテキストエディタにコピペし、適当な名前を付けて保存してください。
このテキストファイルに対して、あらかじめ保存しておいた計画に沿って段階的置換を自動で行ってくれる「Repl-Ace」のようなソフトで複数の置換を行います。Repl-Aceを使用する場合、Microsoft .NET Frameworkを使用することでUnicodeに完全対応した「Repl-Ace on .NET」もありますが、Unicodeは使わないので動作が軽い旧型のほうがお薦めです。
まず、正規表現をオンにして"■.*?\r\n\S*?:(半角スペース)*"と"■.*?\r\n\S*?:(全角スペース)*"を""に置換(つまり削除)します。次に"\r\n\S*?:(半角スペース)*"と"\r\n\S*?:(全角スペース)*"を"\t"に置換します。置換が完了したらgrepperなどでタブを含む行を抽出します。

抽出が完了したら先ほどの表計算ソフトに数列開けてコピペします。ペーストしたらVLOOKUP関数を使いCHXからの出力に合わせます。

VLOOKUPで検索したところ
ここまで終えるとこんな感じです。左がCHXからのデータ、右がスレからのデータです。エラーが出ているのはスレでエントリー表明をしてない方か、書式がこちらの想定した通りではなかった方です。

とりあえずここまで。
次は置換する際の正規表現の説明からの予定

2009.09.16[水] オタワ\(^o^)/

Wikiの編集も一通り終わり。
まだ直すべきところがありますが、見る人も対していないのでとりあえず結果が分かればいいということにします。

団体戦を主催してみて思ったのは大会運営のノウハウが蓄積されていないということ。
もちろん補助ツールを作成してくださっている方がいますが、自分でやらなければいけないこともそれなりにあります。ということでハウツー的なことをまとめてみます。

これからいくつかのフリーソフトの名前が出てきますが、これは自分が使ったものです。同じことができるソフトなら違うソフトでもかまいません。

まず主催するにあたってしなければいけないのはトリップの決定です。
2ch専用ブラウザ(ここではJane Style)の書き込みウィンドウを開いて適当にトリップキーを入れます。(ここでは1234)
トリップ#1234
そしてプレビュータブで実際に表示される文字列を確認します。(ここではtr.t4dJfuU)
トリップ#1234プレビュー
この文字列をコピペしてググります。
トリップ#1234google
20700件ヒットします。つまりこのトリップキーは既に使われているので不適切です。
他のトリップキーを試します。(画像略)
#I5bS7rfcだとトリップは◆klKfHvaNqsになります。
これをググると
トリップ4
何も出ません。これは使えます。トリップを決定したら忘れないように保存しておきましょう。
トリップ5
もちろんこれはあまり好ましい行為ではありませんが、マイナーなゲームなのでそこまで気を使う必要はないでしょう。

告知についてはウィキにまとめがありますので割愛します。

次にリプレイデータ保存用の場所を作ります(団体戦のみ)。特別な理由がなければ先達にならってdrop.ioを使いましょう。
dropio1
drop nameも特別な理由がない限りchpdantai(番号)としましょう。
この状態でCreate A Dropをクリックすると空のdropを作成することができます。
パスワードの入力を求められるので適当に設定します。これも忘れないように保存します。面倒ならトリップキーと同じにしましょう。また、スムーズにリプレイデータをアップロードできるようにブックマークしておくとよいでしょう。
dropio2
右上にあるAdmin log inからログインします。(作成直後は初めからログインしているかもしれません。どちらだったか忘れてしまいました。)

dropio3
ログインしたら同じ場所にあるSettingsから設定画面に行きます。


dropio4
Guest Permissionsから一般ユーザーのアクセス権設定画面に行き


dropio5
guests can deleteのチェックをはずしSave Settingsをクリックします。
これで一般ユーザーにはデータの消去ができなくなりました。
これを行うのは、あらし対策のためです。

とりあえず今日はここまで。
Pagetop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。