ネット対戦における考え方・仕組みについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

ネット対戦における考え方・仕組みについて

#1

投稿記事 by プラム » 4年前

現在、C言語とDxライブラリで東方二次創作の3D格ゲーを作っている者です。

ネット対戦を実装しようかと思うのですが、ネット対戦における通信処理のやり方について疑問があったので質問してみました。
まだネットワークプログラミングはしたことがないので、ネットワークに関する専門的な知識は皆無に近いですが、できるだけ安定して処理落ち・エラー落ちの少ないサーバー作りたいです
僕が考えている方法はこんな感じ。
無題1.png
無題1.png (45.64 KiB) 閲覧数: 14551 回
・まず、クライアントがキーの入力情報をサーバーに送ります。
・その情報を頼りにサーバーはゲームを進行していきます。
・そしてサーバーがクライアントに今のゲームの状況を伝えます。
・それをクライアントが受け取ります。

キーの入力状況とゲームの状況情報は、すべて構造体にまとめて、DxLibの通信機能を使って送ろうと思います。
たとえるなら、荷物を全部アマゾンの段ボールの中に入れて送って、それを開封して使って、使い終わったらまた箱に戻して送るみたいなイメージですかね。

こんな感じの設計にしたいと思っているんですが。みなさんどう思いますか?
最後に編集したユーザー プラム on 2016年8月02日(火) 22:26 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ネット対戦における考え方・処理方法について

#2

投稿記事 by softya(ソフト屋) » 4年前

格ゲー系だとサーバーは対戦相手をマッチングするだけで、対戦自体はお互いのクライアントを直結した形が多いと思います。
MMOなど大多数が参加するゲームはサーバー側で色んな処理しますが、対戦格闘だと反応速度優先なのでサーバーを介さないほうが有利です。
それとサーバー側ゲーム処理を作るゲームは規模が大きので開発難易度が上昇しますよ。なので、サーバーはマッチング専用でクライアントを直結する方式を推薦します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: ネット対戦における考え方・仕組みについて

#3

投稿記事 by プラム » 4年前

>>ソフト屋さん

なるほど、確かにServerを介すと速度が遅くなるかもしれませんね。
クライアントを直結しても、複数人対戦(2~4人)なので、誰かホストを作って、メイン処理を作る人を決めなきゃならないと思います。

設計を考えてるんですが、UDPのDxLibだとネットにもあまり参考になるサイトが落ちてないので結構難しいです・・・
まず、接続を確立するという手段がないので、どうやって判断(?)したら良いのでしょうか・・・

またはDxLibの関数を使わず。ほかのネットワークライブラリでも入れた方が良いんでしょうか・・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ネット対戦における考え方・仕組みについて

#4

投稿記事 by softya(ソフト屋) » 4年前

2人ではなく3から4人だと、サーバー役のPCを決める必要があるでしょう。
あるいは、サーバーがクライアント間の全部の配信を受け持つ(通信に倍の時間が必要になります)。

>またはDxLibの関数を使わず。ほかのネットワークライブラリでも入れた方が良いんでしょうか・・・・
そういうライブラリもありますよ。ただ、これも情報は多くないです。
直接Winsockを扱う情報が一番多いでしょうね。

>まず、接続を確立するという手段がないので、どうやって判断(?)したら良いのでしょうか・・・
案としては、マッチングサーバーに接続する対戦相手のクライアントPCとサーバ役のクライアントPCを決めてもらいます。
で、マッチング完了と言うことでクライアントとサーバー役に通信相手のIPアドレスを通知します。
これでマッチングサーバーの役目は終了。
あとは、クライアントPCとサーバ役のクライアントPCだけで通信します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: ネット対戦における考え方・仕組みについて

#5

投稿記事 by プラム » 4年前

>>ソフト屋さん

やっぱりWinsockを直接触るものが一番多いんですよね・・・でもせっかくDxLibがあるのでそちらを使おうかと思います。
マッチングサーバーから通知する方法はいいですね。マッチングサーバーはネット対戦の基礎(クライアントとホストの通信)ができてから作ってみます!

でも、UDPだと順番が入れ替わったりロストする可能性もありますよね。キーフレームを送るだけだと、ロストしたフレームだけキーが入力されてないことになるので、回線が悪いとスムーズにいかないことになりますよね。まあ多少の情報ロストは仕方ないと思うんですが、これでもいいんですかね・・・

あと、サーバー役に4人分の処理をさせると、単純に考えてサーバー役だけ処理負担が4倍になって動作FPSが落ちて通信が不安定になったりすることはないんですかね・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ネット対戦における考え方・仕組みについて

#6

投稿記事 by softya(ソフト屋) » 4年前

> あと、サーバー役に4人分の処理をさせると、単純に考えてサーバー役だけ処理負担が4倍になって動作FPSが落ちて通信が不安定になったりすることはないんですかね・・・

これに関してはクライアントPCからPCの性能を申請してもらって一番性能の良いPCを選別するしか無いでしょうね。
あと通信量とか処理負荷とかの調整はプロでも四苦八苦する部分ですので、苦労してもらうしか無いでしょう。
ネットワークゲームを作る醍醐味は、その部分ですし。
ゲーム化だと性能が固定なのである程度楽ですが、PCやスマホは性能がバラバラですから。

> まあ多少の情報ロストは仕方ないと思うんですが、これでもいいんですかね・・・
そこのノウハウもあまり公開されていない部分ですね。
主に海外の情報を探るしか無いでしょう。
日本でもsideshareslideshareとか公開されているのを調べてみましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: ネット対戦における考え方・仕組みについて

#7

投稿記事 by プラム » 4年前

性能申請とか面倒ですね・・・
面倒なので処理負担を軽減するようにちゃんと作ればいけそうですかね・・・

まあとりあえず試しにプログラム組んでみますね!ありがとうございました!このスレはこれで閉めさせていただきます!ソフト屋さん(´▽`)アリガト!

閉鎖

“C言語何でも質問掲示板” へ戻る