DIARY

簡潔さ


何かを説明しようとすると、兎角長文を書きがちだ。

真に伝えたいことが長い前置きや論述によって埋もれてしまい、
読み手は、その重要な部分を長い文章の中から探し出してこなければいけない。

しかし、今読んでいるこの本、
「C++ Coding Standards」(著ハーブ・サッター/アンドレイ・アレキサンドレスク)
では、簡潔に、より短くということが前置きで明記されており、
事実本編は読みやすく簡潔に纏められている。

はじめに「より短く」ということを読んだとき、驚いた。
それまで、何かを説明するために長文を書くことは、必然で、当然だと思っていたからだ。
読み手に、あることを分からせようとすれば、
それに対しての十分な考察、議論、説明がなされるべきで、
それ無しには十分な結果は得られず、そのためには長い文章が必要だと。

だが、この本を読んでそれらの考えは間違いだったと思い知らされた。
(正確には、まだ読んでいる途中だが)
言語の習得や実際にプログラムを書くためなどに、それなりの数の本を読んだつもりだが、
いままで、これほど文章が短く、これほど内容の理解しやすいものは無かっただろう。
要点を明記し、簡潔にし、十分なメッセージを含めれば、文章の長さは必要ないのだろう。

私もよく長々と文章を書きがちなため、この本を見習わなければならない。
しかし、この日記自体、要点が纏まっておらず、無駄に長い気がするが...orz
2006年03月31日(金) No.56 (雑記)
Comment(0) Trackback(0)

P2Pによるオンラインゲーム1


MMORPGなどで必要になる専用サーバーを使わなくても
多人数でプレイすることができるゲームのシステムを考える。

まずは、通信を行うための基本的なシステムとして、
接続開始、メッセージの送信、接続終了(切断)について考える。
これらのシステムはゲーム内容などにはあまり関係ないので、
単純なチャットが行えるセッションのシステムを題材として考える。

今回のセッションの仕様としては
・セッションの参加には、事前登録は不要とする。
(個人識別用のIDなどは事前に設定することはできない。)
・参加者の名前は同名が複数居ても構わない。
・セッション開催者のIPアドレスは事前に分かっているものとする。
・セッション中は誰もが全員にまた、特定の対象だけにもチャットを送ることができる。
といったところだろう。

では、各システムのアルゴリズムを考える
(サーバー = セッション開催者、クライアント = 参加者)

接続開始
1.セッション開催者がサーバーを宣言する。
2.サーバーのIPアドレスを使って、クライアントが接続する。
3.サーバーはクライアントの接続を許可するかを判断する。
許可しない場合は、理由を送信して終了。
許可する場合は、一意のIDとすでに参加しているクライアントの情報を送信する。
4.許可を受けたクライアントは、自分の情報をサーバーへ送信する。
5.クライアントの情報を受けたサーバーは他参加のクライアントに新参加クライアントの情報を転送する。

接続終了
○クライアントの場合
1.接続を終了したい旨をサーバーへ送信する。
2.それを受けたサーバーは切断許可を送信する。
3.クライアントはそれを受け切断する。
4.サーバーはそのクライアントが切断したことを他のクライアントに送信する。

○サーバーの場合

1.クライアント全員に切断を通達する。
2.切断する。


1.適当なクライアントにサーバー役を引き継がせる。
(引き継がせる相手がいなければAへ)
2.新サーバーが引き継ぎ完了を元サーバーに送信する。
3.クライアントの場合1に移行。

サーバーが接続するときについては、セッションの開催者がいなくなれば、
セッション自体終らしてもいいと言う場合にはAのみでいいだろうし、
残ってる人だけでもセッションを続けたいという場合にはBも必要になるだろう。

メッセージの送信
メッセージに送信者と受信者の情報を付加する。
サーバーが送る場合は、そのままメッセージの受信者情報を見て、送信する。
クライアントの場合は、受信者が誰であれ、サーバーに送る。
メッセージを受け取ったサーバーは、受信者情報を見て、転送する。

基本的に、開催者のIPアドレスは事前に分かっていないと、
どうしようもないということはあるのだが、それはまた別の機会に。
2006年03月30日(木) No.55 (プログラム)
Comment(0) Trackback(0)

日記についての日記


いままで使っていたのはどうも記事の幅とサイドの幅の設定がよろしくなかったので、
他の合いそうなCGIはないかと探してみたら、
以前のCGIの開発者さんが新バージョンを作っておられて、
それがぴったりでしたw

ちなみに下の方にもクレジットが入ってますが、
このCGIは以下のサイトさんから貰ってきました。
http://www.t-okada.com/cgi/

まだ、色の設定等がめんどうなので全部設定しなおして無いですが、
なかなかいいのではないでしょうか。
あとは、下の[Next]がエラーになること以外は結構満足ですね^^;
リファラチェックを外すと、とりあえず、エラーは出なくなるようですね。


しかし、色の設定は面倒ですね。
きこうもりはいちようオリジナルのカラーセレクターを使用してますが、
全体的なデザインの設定はやっぱり難しいですね。
他の人は普通、どうやって色の設定とかしているのでしょうか?
やっぱり一色一色設定しながら更新して見てるのでしょうか。

オリジナルのソフトをもうちょっと改良して見ようかなぁ・・・。
2006年03月29日(水) No.54 (雑記)
Comment(0) Trackback(0)

キラータイトル


なんとあのカルネージハートが、あのカルネージハートがが、
PSPで発売されるっていうじゃないですかΣ(゚ロ゚;)

http://www.genki.co.jp/games/carnage/

世間ではDSがガンガン売れているらしいですが、
きこうもりはまだDSもPSPもどちらも買っていません。
個人的にやりたいソフト、コレをやるためなら本体代を出しても惜しくない、
と思わせるほどのソフトはありませんでした。

しかし、カルネージハートとなると話が変わりますw
プログラミングして遊ぶゲームなんですよ、プログラマがやらなくて誰がやるんでしょう(ぉ
しかも今回のは機体データをPCを通じて配布したりすることができるそうです。
あーどうしましょ、やりたいですねー、やってみたいですねー。
これのためならPSPを買いましょうかねぇ。

しかし、「CarnageHeart PORTABLE」発売は夏の予定らしいです。
(;´Д`)あぁ、長いなぁー。。。
2006年03月25日(土) No.53 (ゲーム)
Comment(0) Trackback(0)

チャット


えー、思った以上に大変そうですね orz

DirectXを使っている中で、チャットをしようとすると、
Win32APIから標準コントロールを貼り付けるだけでは、
DirectXの描画処理とコントロールの描画処理がぶつかって、
うまく表示されないようです(つД`、)

しかし、なにやらDirectX 9.0 SDK Update (Summer 2004)から
DXUTというサンプルフレームワークの中に
UIの面倒を見てくれるクラスなどもあるようです。
その中にはIMEの面倒まで見てくれるエディットボックスまで(゚ロ゚;)
ぅぉ、これはいい!!と思ったらやっぱり落とし穴が;

目的のクラスはどっぷりフレームワークに使っており、
単体だけ切り離して自分のプロジェクトに流用するのは難しそうです;;
ならフレームワーク全体取り込めって話になるんでしょうけど、

こんなもん使えるかぁっーー (ノ`д´)ノ ~┻━┻

はい、サンプルのフレームワークなんて使えません。
というか、C/C++使ってるのにいまさら簡略化された
フレームワークを使う意味ってあるんでしょうか。
いまどき、HSPからでさえDirectXを使用することができます。
最大限の能力を引き出すためにわざわざ面倒な処理が必要なところでやっているのに、
簡単に使えるが、遅いものなんていりませんよ(;´Д`)

というわけで、どうやらDirectX上で日本語入力をするためには、
IME制御をゴリゴリやらなければならないようです;;
ふと、チャットなんていいか・・・と思ったりもしますが、
さすがにネットゲームでチャットの無いゲームなんてOUTだと思うので、
やらなきゃならんですね orz

しかし、巷のネットゲームはどういう処理をしてるんでしょうね。
たしかに、変換候補などの色が違ったりするので、
独自処理をしてるんでしょうかねぇ...
2006年03月24日(金) No.52 (プログラム)
Comment(0) Trackback(0)

ファンデーション


やっと、DirectXを使っての2Dゲームのための基礎的内容を消化しました。
オブジェクトの管理、画像の表示、文字列の表示、FPS制御、
何か実際やってみたことを上げると大して進んでないですねorz
分厚い言語本を読んだのはいいんですが、
結局ゲーム制作解説等をされているサイトさんを回りまくった気がします^^;
まぁ、ゲーム制作は特殊な事が多いのでしかたないですかね;
たぶん、机の上に山積みされている本は
もっと基本的な部分で役に立っているのでしょう。

さて、まだ入力の処理や音楽、効果音の処理等、
ゲームに必要で重要な要素も残ってるのですが、
ちょっとゲーム特化の内容を離れて、Win32APIに行ってみようと思っています。
見て回ったサイトなどでは見られなかったのですが、
エディットボックスなどのコントロール(コンポーネント)も使いたいのです。
MFCを使うのはなんとなく嫌なので、C言語もろくすっぽ習得してないくせに、
APIに逝ってみます。

さてはて、次の日記はいつ書けるでしょうかorz
2006年03月23日(木) No.51 (プログラム)
Comment(0) Trackback(0)

トンネルを抜けると、そこは智の海だった


入門的なところを終え、一歩進んだわけなのですが、
ものすごい壁にぶつかった気がします;;

いままで、Delphiがいかにオブジェクトの受け渡しなど、
ポインタの扱いを隠してくれていたのかをいまさらながら実感しました。
ローカルなオブジェクトがライフタイムを終えるときに、
勝手にデストラクタが呼ばれて、消滅してしまうなんて、
Delphi使いとしては逆に恐ろしいです;;
明示的なデストラクタの呼び出しをさせてくれと叫びたいところです。。

しかし、ローカルでオブジェクトを生成して保管しておくには、
どういう管理をすればいいのでしょうか。
newで動的確保して、どこかでdeleteするしかないんでしょうか、うーん。

関数へのオブジェクトの渡し方、返した方等、
いろいろとしっかりと習得するためには、
600ページのC++詳説本を読破しなければならないのでしょうか。
まだ、C言語の方の本も読んでないのですが orz
2006年03月03日(金) No.50 (プログラム)
Comment(0) Trackback(0)