/*!
 * @file Deeangband.cpp
 * @brief D'angbandメインルーチン
 * @date 2014/03/02
 * @author Deskull
 * 2014 Sikabane Works.
 *
 * @mainpage
 * <h1>最初に</h1>
 * <div>
 * 本ソースコードは本来<a href="http://hengband.sourceforge.jp/">変愚蛮怒</a>のバリアントとして、ソースをフォークして開発されていた
 * D'angband（これを以下旧ソースと呼ぶ）が 新仕様の大量追加に際して拡張性に限界があると判断したため、
 * 新しくBSD系ライセンスを予定してフルスクラッチで作成し直すことになった
 * ハックアンドスラッシュ系ローグライクの新ソースコードである。<br>
 * *band系ソースは特にヴァニラのAngbandを筆頭に、ZangbandなどがMoria/Angbandライセンスから、
 * GNUライセンスへの移行を済ませているが、変愚ではそれに必要な全ソースコード寄稿者からの許可を取ることが非常に煩雑で困難であるし、
 * 恐らく今後も移行の予定はないと思われる。<br>
 * 本ソースコードによるゲームシステムは基礎の部分で概ね*band系ローグライクのシステムと踏襲しているが、変更している部分も多く、
 * 人によっては*band系ローグライクそのものとは認められないかも知れない。今後も<a href="http://hengband.sourceforge.jp/">変愚蛮怒</a>や、
 * 個人的に別途政策している<a href="http://sikabane-works.net/bakabakaband">馬鹿馬鹿蛮怒</a>のの更新は重ねられると思うので、
 * そちらと併せて、こちらはこちらの独自路線として楽しんで頂ければ幸いである。<br>
 * </div>
 * <div>
 * 2014/03/02 Deskull
 * </div>
 *
 * @startuml
 * actor プレイヤー
 * プレイヤー->tWinMain : ゲーム開始
 * activate tWinMain
 * tWinMain->GameEngine : GameEngine()
 * activate GameEngine
 * GameEngine->GameWorld : GameWorld()
 * activate GameWorld
 * GameEngine<--GameWorld
 * GameEngine->GameLogger : GameLogger()
 * activate GameLogger
 * GameEngine<--GameLogger

 * loop ゲームループ処理
 * GameEngine->GameSurface : GameCommand()
 * activate GameSurface
 * GameSurface->プレイヤー : キー入力
 * activate プレイヤー
 * GameSurface<--プレイヤー
 * deactivate プレイヤー
 * end

 * tWinMain<--GameEngine
 * deactivate GameLogger
 * deactivate GameSurface
 * deactivate GameWorld
 * deactivate GameEngine
 * tWinMain->プレイヤー : ゲーム終了
 * deactivate tWinMain
 * @enduml
 */

#include "stdafx.h"
#include "Deeangband.h"
#include "GameEngine.h"

#include <iostream>
#include <string>

using namespace Deeangband;

/*!
 * @brief Windows用メインエントリポイント関数
 * @return システムエラーコード
 */
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow)
{
	(void)hInstance;
	(void)hPrevInstance;
	(void)lpCmdLine;
	(void)nCmdShow;

	Deeangband::GameEngine gameEngine;
	gameEngine.PlayLoop();
	return 0;
}

/*!
 * @page KeyWord
 * @brief 用語集
 * @section 用語集
 * <div>
 * このページではゲームシステム中の諸用語に関する汎用的な解説を行っていく。
 * </div>
 */
