GetCharABCWidths
2006-02-28
参考リンク:
MSDN
http://www.topposystem.co.jp/prog/dl/Win32API/Font/memo.htm
DrawText
2006-02-25
矩形内で文字列を折り返して描画出来る。
描画をせずに、折り返した文字列の高さを求める方法がある。
フォント
2006-02-24
概要:
主にチャット文字の描画に使用
アルゴリズム:
1. DrawTextを使う方法
2. GetGlyphOutlineを使う方法--より細かい要求に応えることが出来る
DirectX8.1でフォントキャッシュ。
ID3DXFont
GetGlyphOutline
フォントキャッシュ機構が必要。
参考リンク:
文字にアンチエイリアスをかける
文字にアンチェリ
GetGlyphOutline(...)を使用したアンチエイリアスつきフォントの描画方法
CDIB
2006-02-10
CDIB -- src\2006\dibtest
mud_dx9進捗
2006-02-23
- WinMain 060223
- メッセージループ MessageLoop 060222
- ウィンドウ表示 Win 060222
- メッセージフック WinHook 060223
- スレッド Main 060223
開発手順
2006-02-21
グラフィックを付加する前に、文字ベースでプロトタイピングを十分にやっておく。
システム的に無理が無いか、十分検証する。
DirectX9.0cを使用した、mud_dx9 を作る。
可能なら、プロジェクトのソースコードをマージする。
移動
2006-02-21
移動単位はセル(升目)単位とする。(ドット単位の移動は不可。クライアント側で補完して表示します)
複数のセルが集まって、1セクターを構成する。
サーバーでの同期処理は3x3セクターを一塊とする。
内部的には、セルが1つのチャットルームに対応します。セクターはセルの集合体であり、
サーバーは、3x3セクター全部のチャットルーム(セル)にメッセージを配送して同期をとります。
このようにMMORPGはMUDから進化したものであり、MOやFPSとは根本的に内部構造が異なります。
開発手順
2006-02-20
- テスト用のエコーサーバーを作る。開発済み
- テスト用クライアントを作る。
- エコーサーバーを使って、パケットの送受信テストをする。←今ココ
- フォント描画ルーチンの開発。
- チャットログ表示ルーチンの開発。
- 16進ダンプルーチンの開発。
- IME入力ルーチンの開発。
- チャットルームを作る。
- テスト用チャットサーバーを作る。
- ログイン機構を作る。
- データベース
- フォント描画の高速化
エコーサーバー
2006-02-20
200408\server
200408\common
CClient
2006-02-20
テスト用のエコーサーバーを使って、パケットの送受信テストをした。
#include
class CClient : public IWinHook {
public:
bool Open( LPCSTR host, int port, HWND hWnd );
bool Close();
protected:
int m_soc;
HWND m_hWnd;
HRESULT WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
};
#include "Client.h"
#define FM_TCPSOCKET WM_USER+1
bool CClient::Open( LPCSTR pszHost, int nPort, HWND hWnd )
{
m_hWnd = hWnd;
int nErrorStatus;
// WSAStartup
WSADATA wsaData;
WORD wVerReq = MAKEWORD(2, 0);
nErrorStatus = ::WSAStartup( wVerReq, &wsaData );
// socket
m_soc = ::socket(PF_INET, SOCK_STREAM, 0);
// WSAAsyncSelect
nErrorStatus = ::WSAAsyncSelect( m_soc, m_hWnd, FM_TCPSOCKET,
FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE );
//
LPHOSTENT lphostinfo;
lphostinfo = ::gethostbyname( pszHost );
// connect
SOCKADDR_IN clsa;
clsa.sin_family = AF_INET;
clsa.sin_port = ::htons( nPort );
clsa.sin_addr = *((LPIN_ADDR) *lphostinfo->h_addr_list);
nErrorStatus = ::connect( m_soc, (LPSOCKADDR)&clsa, sizeof(SOCKADDR_IN) );
}
bool CClient::Close()
{
::WSAAsyncSelect( m_soc, m_hWnd, 0, 0 );
::shutdown( m_soc, 2 );
::closesocket( m_soc );
::WSACleanup();
}
HRESULT CClient::WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg ) {
case FM_TCPSOCKET:
switch( lParam ){
case FD_CONNECT:
::MessageBox( hWnd,"サーバに接続しました。","info",MB_OK | MB_ICONINFORMATION );
break;
case FD_READ:
char szRecvMsg[1024];
int nrc = ::recv( (SOCKET)wParam, (LPTSTR)szRecvMsg, sizeof( szRecvMsg ), 0 );
break;
case FD_CLOSE:
::MessageBox( hWnd,"サーバから切断しました。","info",MB_OK | MB_ICONINFORMATION );
::closesocket( m_soc );
break;
}
}
return 0; // 書き忘れないように
}
通信モジュール::クライアント
051115
CClient
スレッドのデバッグ。期待通りの動作に。
先日作ったハッシュ関数でIDとPASSをハッシュ化。これでインターネット上には生のIDとPASSは流れない筈だが…
パケットバッファーはrecv関数でサイズを指定している為、バッファーアンダーランは起こさない筈。
051102
CClient
051101
CClient
Sys::Win
2006-02-19
シングルトンでウィンドウクラスにアクセス出来るようにした。こうするとメッセージフックを掛けやすくなると思う。
Sys::Win->Hook( this );
Sys::Win->Unhook( this );
TTY
2006-02-19
PuTTY
Socket
2006-02-19
2005-10-30
参考リンク:
VisualC++6.0を使用してTCP/IP通信を実装する
Internet Programming
Winsock Programmer's FAQ
Winsock
2006-02-19
No. | Server | Client |
1. | WSAStartup | WSAStartup |
2. | socket | socket |
3. | WSAAsyncSelect | WSAAsyncSelect |
4. | bind | |
5. | listen | connect |
6. | FD_ACCEPT | FD_CONNECT |
7. | FD_READ | send |
8. | send | FD_READ recv |
| | |
mud_easy3d
2006-02-19
- メッセージループ MessageLoop
- WinHook
- ウィンドウ表示 Window
- スレッド App
- D3Dデバイス D3DDev
- Easy3D初期化
- フォント テクスチャキャッシュ
- IME
- FPSTimer
CWindow
2006-02-19
WinHookを組み込み。
2006-01-19
Window.h
CriticalSection
2006-02-19
050807\Windows_2_1 からコピペ。
2006-01-17
UNIX
2006-02-18
UNIXの部屋
Cygwin
2006-02-18
Cygwinを使って、UNIXのソケットプログラムをコンパイルすることが出来る。
MUD
2006-02-18
MMOの前身であるMUDから開発していった方が、
スムースに開発できるような気がしてきた…
構想
移動システムはUOや、それ以前のMUDのような古い技術を使い、
表示はEasy3Dで3D化を考慮。
ライブラリ(Easy3D)を使っていても、文字の表示・入力は自前で書く必要あり。
DirectX D3Dデバイス D3DDev
2006-02-18
Easy3Dを使うために、DirectX8バージョンを作成。
終了時に少し待ってやらないと落ちる現象が発生(謎
2006-01-15
3Dレイヤーと2Dスプライトレイヤーの2層構造化。
2006-01-
D3Dオブジェクトに参照カウンタを設け、自動で解体されるようにした。
それにより、D3Dデバイスは複数作ることが可能になった。
参考リンク:
t-pot 『Direct X8.0 入門:Direct Xの初期化』
プロジェクトSO
2006-02-17
- メッセージループ MessageLoop
- ウィンドウ表示 Window
- スレッド
- D3Dデバイス D3DDev
- Font
- IME
- ビルボード
完成させる気が失せたので、以前書いたコードを整理して公開しようと思う。未完成なコードで参考にはならないだろうけどね…
マップエディタ
2006-02-17
- メッセージループ MessageLoop
- ウィンドウ表示 Window
- マップ表示
- スクロールバー
Makefile
2006-02-17
LIBS= cw32mt import32
.cpp.obj:
bcc32 -tW -WM -5 -c $<
run.exe: $(OBJS)
ilink32 -aa -Tpe -x -Gn C0W32.OBJ $**, $* , , $(LIBS) , ,
CApp
2006-02-17
#include "MessageLoop.h"
#include "Window.h"
/// アプリケーションクラス
class CApp {
public:
CApp();
~CApp();
int Run();
CWindow* GetWin() { return &m_Win; }
protected:
CWindow m_Win;
CMessageLoop m_Msg;
};
int CApp::Run()
{
m_Win.Create();
int ret = m_Msg.Run();
return ret;
}
Win32API
2006-02-16
D3DDev
Window
MessageLoop
DirectX8
2006-02-15
最新版のSDK(DirectX 9.0c)には、ヘッダが一部入っていない。MSは無いものにしたいようだ。
DirectX 9.0c December 2005
2006-01-13
ID3DXSpriteのテスト。
CMessageLoop
2006-02-14
CMessageLoop -- src\2006\MapEdit
コピペすれば済む程度の処理だが、クラス化して部品化することにする。
COLLADA
2006-02-14
COLLADA Document Object Model (DOM)
COLLADA仕様ドキュメント日本語版公開
COLLADA仕様書とCOLLADA DOMのドキュメントの日本語版
オートアップデーター
1. 始めにインターネットに繋がっているかチェック。繋がっていなければエラー出力。
2. 次にlist.xmlをダウンロード。そして、ダウンロードしたlist.xmlをTinyXmlを使い、オープン。
3. list.xmlに記載されているファイルのハッシュ値を計算。
4. 記載されているハッシュ値と計算されたハッシュ値が違っていれば、パッチファイルをダウンロード。
5. 終了条件:list.xmlに記述されているファイルを全て比較したら終了。
そうでなければ3-4を繰り返す。
6. 必要があれば圧縮ファイルを解凍(zlib)しゲームのフォルダにコピー。
2006-02-13
ダウンロード処理をクラス化。CDownload
基本メソッドはOpen、Close、Download。
2006-01-22
オートアップデーターの基礎実験。
wininetを使い、HTTPからバイナリファイルをダウンロードすることに成功。アスキーとバイナリの違いで少しハマったorz
参考リンク:
WinInetによるインターネット上ファイルの読み込み
インターネット上にあるファイルを読込む
自動アップデーター作ろうぜ
autoUpdater_Free
tora3aux
インストーラー
2006-02-13
優先度:低
インストーラーは、解凍先を選べるように
2006-01-26
必要なし。フォルダを削除すればいいようにする。
仕様
2006-01-15現在
C++
Direct X 9.0c December 2005
Winsock 2.0
wininet
TinyXml
ライブラリ
2006-01-19
TinyXml
Lua
Ayame
Mersenne Twister
デバッグ用関数 Utility::Debug
2006-01-23
バッファオーバーフロー防止に_snprintfを使用するように変更。
2006-01-22
コマンドプロンプトを独自に開き、ログ出力するように改良。
AllocConsoleするまではログファイルに出力する仕様。
いつの間にか、デバッグ用の機能が充実してきてしまっているw
/// コマンドプロンプト開く
void OpenConsole();
/// コマンドプロンプト閉じる
void CloseConsole();
2006-01-15
Debugoutと関数名を改称。
void Debugout( std::string s );
void Debugout( const char* s );
void Debugoutf( const char* s, ... );
2006-01-14
デバッグ用文字列出力関数のフォーマットを微調整。(ゲームの本質とは関係無いorz)
000000:84347692:(0) WinMain
2006-01-12
エラーメッセージボックス
//テストコード
Error( "$ エラーが発生しました" );
2006-01-11
バッファオーバーフロー防止に_vsnprintfを使用するように変更。
//テストコード
Debugf( "$ Debugf %d", 999 );
2005-11-14
パケットバッファーの16進ダンプ関数作成。
CClientクラスをオーバーライドし、ダンプするようにした。
エコーサーバーにSendするとパケットバッファをダンプするテスト。
タスクシステム
2006-01-19
GameObject.*
CGameObject
CGameObjectManager
乱数
Mersenne Twister
Doxygen
2006-01-16
Doxygenを導入した。
http://www.doxygen.org/
Thread
2006-01-16
CThread
Config
2006-01-14
config.xml
チャット
着せ替え
テクスチャキャッシュ GSDK::CBinaryLoader
2006-01-13〜2006-01-15
以前作った試作コードをリファクタリング中〜
キャッシュ評価アルゴリズムが重いのを軽くしたい…
2005-03-28
CBinaryLoader
DirectX
ここからランタイムをダウンロードして下さい。
BBX
スプライト
2006-01-13
DirectX 9.0c の ID3DXSprite のテスト。
DXライブラリ置き場
IME
アバター
040911
hokou.bmp
文字列コピー関数
051123
strcpy
strlen
sprintf
バッファーアンダーランを引き起こす可能性がある。
ストリーム
051122
使ってみると、凄く便利。止み付きになりそう…
basic_streambufのデストラクタが呼ばれないのは何故?
|