▲前のページへ
次のページへ▼

マッチングアルゴリズム(1) サンプルの仕組み


【目次】
概要
「値」を鍵としたマッチング制御


概要

 一言で「プレイヤーマッチング」と言っても、マッチング方法には様々な手法があります。
 例えば「レベルやポイントなどの近い人を探し出してマッチングさせる」とか、
 「マッチングさせる人数をルームごとに変化させる」などです。

 prefork_battle_matching_lite のサンプル概要については前述のページ触れていますが、
 ここでは、そこで触れなかった「マッチングルームの管理制御」について触れていきます。

 なお、現在サンプルとして提供している
 以下のようなシンプルなアルゴリズムを元に実行しています。
・マッチングルームの鍵となる「値」を設定する。
・サーバ上で管理しているマッチングルームのうち、「値」の一致する、かつ空いているルームを一次元リスト的に探し出し、
 空いていれば入室させ、空いていなければ次のマッチングルームを探す。
・どのマッチングルームも空いていなければ(もしくは「値」の一致するマッチングルームが存在しなければ)
 新規にマッチングルームを作成する。
・マッチングルームを検索(あるいは新規作成)できたら、そのルームに入室する。
・バトルサーバに移動する際、マッチングサーバから離れる。


「値」を鍵としたマッチング制御

 現在提供されているサーバでのマッチングについて実際に触れて確認してみましょう。
   ※ ここで動作させるサンプルは prefork_battle_matching_lite / prefork_battle_matching_lite_demo の
     いずれでも構いません。

■ マッチングルームの収容人数を変更する
  マッチングアルゴリズムを体感してもらうために、まずルームの収容人数を変更しましょう。
  Linux 側のサーバプログラムを開き、server/matching/src/sample/RPC_BTL_Matching.hpp の 28行目に定義している
  m_RoomCharaMax の値を変更します。今回の場合「3」に設定し、3人まで同一ルームに入れるようにしておきましょう。
protected:
	uint64			m_AutoRoomId;			// 自動ルームID
	static const uint64 m_RoomCharaMax = 3;		// TODO マッチング規定人数

■ サーバプログラムを再度 make し実行する。
  プログラムを修正したら、サーバプログラムを再度 make し直して実行させます。
  Linux 上で以下のコマンドを入力して実行してください。
$ ./server.sh stop
$ ./server.sh debug
$ ./server.sh start

■ クライアントを3台起動し、マッチングサーバへアクセスしてみる。
  続けて、クライアントを3台起動し、マッチングリスト登録 > マッチングサーバリスト選択 まで
  前回と同様に設定していきます。
  
  

■ 3台ともマッチング値を違う値に設定し、マッチングをスタートする。
 この後、「マッチングルール」と「マッチング値」を入力する必要がありますが、
 その時にクライアントごとにマッチング値を変更(1台目は 0, 2台目は 1, 3台目は 2 )して
 「マッチングスタート」ボタンをクリックしてみましょう。
  

 すると、同一のマッチングサーバに接続しているにも関わらず、それぞれのクライアントが
 別々のマッチングルームに入ってしまい、ゲームをスタートさせることが出来なくなります。
   ※ 別々のマッチングルームに入っているかどうかは、Unity の Game 画面上で
     "Entry MatchingRoom Success roomId = " の後に表示されるルームIDで判別できます。
  
  
  


■ 更にクライアントを立ち上げ、マッチングサーバへアクセスしてみる。
  この状態で、更にクライアントを立ち上げてみましょう。
  上述と同様に、マッチングリスト登録 > マッチングサーバリスト選択 を行い、
  マッチング値には「0」「1」「2」のいずれかの数値を入れてみます。

  すると、以下のような結果が得られます。
    ・マッチング値「0」でマッチングスタートすると、マッチング値0のルームID(上記の例では
     roomId = 2594073385365405697)に入室する。
    ・マッチング値「1」でマッチングスタートすると、マッチング値1のルームID(上記の例では
     roomId = 2594073385365405698)に入室する。
    ・マッチング値「2」でマッチングスタートすると、マッチング値1のルームID(上記の例では
     roomId = 2594073385365405699)に入室する。

  もちろん、マッチング値に「0」を選んでマッチングスタートボタンを押下したクライアントが3台あれば
  マッチング値「0」のバトルが開始されますし、マッチング値「1」「2」についてもそれぞれ
  クライアント3台の入室でバトルが開始されます。

  つまり、マッチング値を入室キーにしたルーム管理ができることが分かります。


▲前のページへ
次のページへ▼