Esempio n. 1
0
File: main.c Progetto: ta2000/c_game
int main(int argc, char *argv[])
{
	
	//printf("Sizeof struct game is %zu bytes.\n", sizeof(game));

    Game_init(&game);

	if (Game_deserializeData(&game) == 1)
	{
		Game_run(&game);
	}

    return 0;
}
Esempio n. 2
0
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

	MSG msg;
	HACCEL hAccelTable;

	// グローバル文字列を初期化しています。
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_TETRIS, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// アプリケーションの初期化を実行します:
	if (!InitInstance (hInstance, nCmdShow))
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TETRIS));

	// メイン メッセージ ループ:
	::timeBeginPeriod(1);
	
	double host_timescale = 1;
	double view_max_fps = VIEW_SPEED_FPS; // 描画のFPS制限
	// 上のがいわゆるnet_graphのFPSだと思う
	double game_max_fps = GAME_SPEED_FPS * host_timescale; // ゲームスピードのFPS制限
	// こっちが一般的にはtick??

	DWORD dwTime = ::timeGetTime();
	DWORD fps_after = dwTime;
	DWORD fps_before = fps_after;
	DWORD frame = 0;
	DWORD currentTime = dwTime;
	double gameSpeedWaitTime = (1.0 / game_max_fps * 1000.0);
	double gameSpeedNextTime = dwTime + gameSpeedWaitTime;
	
	double viewSpeedWaitTime = (1.0 / view_max_fps * 1000.0);
	double viewSpeedNextTime = dwTime + gameSpeedWaitTime;

	Game_init();

	while(true){
		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
			if(!GetMessage(&msg, NULL, 0, 0))
				return msg.wParam;
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}else{
			// FPS測定(1000ms秒あたりのframe数を計測)
			currentTime = ::timeGetTime();
			if(currentTime - fps_before >= 1000){ // 前回から1秒間(1000ms)経過していた場合
				fps_before = currentTime;
				g_frameRate = g_frame;
				g_frame = 0;	// フレーム数を次秒の計測のためにリセット
			}
	
			// FPS制限(1/60おきにコードが実行されるようにする)
			if(currentTime >= gameSpeedNextTime ){ // 次回の予定実行時を過ぎていた場合
				gameSpeedNextTime += gameSpeedWaitTime;

				// メイン処理
				if( GameMain(msg.hwnd) == false ){
					break; // 終了処理へ
				}
			}else{
				// 表示上のFPS描画しなければならないかチェックする
				if(currentTime >= viewSpeedNextTime ){
					viewSpeedNextTime += viewSpeedWaitTime;

					onPaint(g_hWnd, g_mDC);
					::InvalidateRect(g_hWnd, NULL, FALSE);
					g_frame++;
				}else{
					Sleep(1);
				}
			}
		}
	}

	// いろいろ後片付けを書く
	trace(L"終了処理\n");
	GameMain_quit();

	::timeEndPeriod(1);
	return (int) msg.wParam;
}