メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.410) GIBS4 ターン終了処理の流れ  2003/12/26


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第410回 GIBS4 ターン終了処理の流れ
 発行    2003年12月25日(木曜日)
 発行数   約3200

{magclick}
{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンはまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・このメールマガジンは、横60文字で作成しています。
 また、インデントはすべて半角スペース4つで構成しています。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、まぐまぐさんのホームページでお願いします。
・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。
・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した
 内容になっています。最新の技術があれば、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 少し時間が空いてしまいました。

 別に、ガンダムをやっていたわけでは、ないのです。

 え、F-ZEROを。。。

{magclick}
/*========================================================*/
 今回のお題  << GIBS4 ターン終了処理の流れ >>
/*========================================================*/

 前回、改造のデータを考えました。

 さて今回は、ターン終了時の処理についてまとめてみます。

 ターン終了時にやらなければならないことはたくさんあります。

 GIBSでは、プレイヤーがターン終了を宣言したときに、相手の
プレイヤーがまだターンを終了していない場合、自分をターン終了
状態にするだけで、CGIは処理を終了します。

 ただし、プレイヤーがターン終了を宣言したときに、相手の
プレイヤーがすでにターンを終了していた場合、ユニットの移動や
戦闘処理などの戦術フェイズをすべてこなし、次のターンの準備
まで行います。

 この、2つ目のターン終了処理では、非常に処理をこなします。

 しかし、この処理の中で、そのときに行わず、ユーザが次の機会
にアクセスしたときにやってしまえばいい、というものがありま
す。

 たとえば、制圧済みエリアからの資金の調達です。

 この、はしょることのできる処理がどれぐらいあるか、
ストーミングしてみましょう。

/*========================================================*/

資金の調達・・・相手のプレイヤーの資金を見ることができるが、
 この情報はプレイヤーが持っている相手の「古い」情報であり、
 これがリアルタイムで変わる必要はない。この古い情報は、
 ターン終了時に保存する。よって、資金の情報はターン終了時の
 処理に含まれていなければならない。しかし、この情報が調達
 した後の情報である必要はなく、逆にターン開始時の情報を
 もってしまうと、リアルタイム過ぎてしまう。よって、古い情報
 はターン終了処理において、資金を調達する前のデータでよい。

資源の調達・・・同上

ユニットの移動・・・ターン終了時において、ユニットの移動は
 2回行われる。1回目は戦術フェイズに入る前の移動であり、
 2回目は戦術フェイズを終えて撤退や突入などを実行する
 ユニットの移動である。2回目の移動処理はターン終了時に行う
 必要がない。
 ちなみに、1回目のユニットの移動を、最初にターン終了を宣言
 したユーザが自分だけ行ってしまうことはできない。なぜならば
 「ギレンの野望」は「リスク」というゲームのルールにのっとっ
 ており、リスクにおいて「移動が衝突した」場合には確率によっ
 てどちらか一方が押し負ける、という絶対的ルールが伝統として
 存在するためである。よって1回目の移動はお互いのターン終了
 が出揃ってからのみ、処理できる。

開発終了判定・・・開発が終了した、という情報は、相手の
 プレイヤーは見ることができない。よってこれをターン終了処理
 にて行う必要はない。また、この処理は、開発終了までの
 カウントダウンも行う。

イベント終了判定・・・イベントが終了した、という情報は、相手
 のプレイヤーは見ることができない。イベントの中には、マップ
 の構成を変更するダイナミックなものもあるが、マップの有無
 についても、相手が出した(または破壊した)マップを
 プレイヤーが認識する(できる)のは、ターン終了処理を通して
 古い情報が更新された次のターンにおいてのみであり、これが
 リアルタイムで伝わる必要はない。逆に、リアルタイムで
 伝わってしまうと、非同期のネットワークゲームとして成り
 立たない。よって、イベント終了判定はターン終了時に行わず、
 ターン開始後初回アクセス時に実行する。

/*========================================================*/

 他に・・・ないかなぁ。。。ターン終了は忙しいなぁ。。。

/*========================================================*/
 さいごに
/*========================================================*/

 データはテキストで保存されており、それを読み込んで
スプリットします。

# ファイルからデータを全部読み込む
open( IN, $file_name ); # ファイルをオープン
@dt = <IN>; # ファイルの内容をすべて読み込む
close( IN ); # ファイルを閉じる

# データを処理する
foreach $dt2 ( @dt ) # データ量だけループ
{
$d = split( /,/, $dt2 ); # カンマ区切りのデータを分割
print $d[ $index_name ]; # 名前を出力
}

 Perlで書くと、こんな感じです。

 すべての情報をメモリ上に読み込んで、それを必要なときに
スプリットします。

 2種類のデータがリンクしている場合は、こんな感じに
なります。

foreach $dt2 ( @dt ) # データ量だけループ
{
$d = split( /,/, $dt2 ); # カンマ区切りのデータを分割
$d2 = split( /,/, $ndt[ $index_name ] ); # 名前情報1つ取得
print $d2[ $index_name ]; # 名前を出力
}

 なんだかもう、スプリットばかりで飽き飽きです。

 そこであゆしゃは、2次元配列に興味を持ちました。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は12月26日(金曜日)に、第411回を送ります。
 お題は「GIBS5 2次元配列入出力」

 2次元配列の一括入出力処理によって、2003年を終了処理
します。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されます。
 このメールマガジンの内容に文面の引用はありません。
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容は、転用、流用、宣伝、リンク、
現在6巻(遅い) なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

まぐまぐアイディー
0000020674

まぐまぐバックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

登録と解除
http://www.mag2.com/m/0000020674.htm

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

めーらっくす <<過去ログがタイトル別になっています>>
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。