Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "main.h"
- #include "keycheck.h"
- //------------ Screen Initialization ------------
- #define SCREEN_SIZE_X 1600
- #define SCREEN_SIZE_Y 900
- int x, add;
- int WindowFullSize;
- int WindowPosX;
- int WindowPosY;
- int DesktopSizeX;
- int DesktopSizeY;
- int SubScreen;
- int WindowX;
- //udp
- bool hostS;
- bool joinS;
- char StrBuf[256]; //データバッファ
- IPDATA IpUDP; // 送信用IPアドレスデータ
- IPDATA IpTCP; // 送信用IPアドレスデータ
- int NetUDPHandle; // ネットワークハンドル
- //tcp
- int NetHandle, LostHandle; // ネットワークハンドル
- int DataLength; // 受信データ量保存用変数
- //プロトタイプ宣言
- bool SystemInit(void);
- void GameMain(void);
- void NetworkJoin(void);
- void NetworkHost(void);
- // ========= WinMain関数
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
- {
- // システムの初期化
- if (SystemInit() == false)
- {
- return -1;
- }
- // --------ゲームループ
- while (ProcessMessage() == 0)
- {
- KeyCheck();
- ///------------------------------------------------SCREEN SETTING START---------------------------------------
- // Escape Key to change window mode
- if (trgKey[KEY_F5] == true)
- {
- if (WindowFullSize)
- {
- // フルスクリーンモードだった場合は通常モードに変更する
- WindowFullSize = FALSE;
- // ウインドウスタイルを標準に変更
- SetWindowStyleMode(0);
- // ウインドウサイズを 640x480 に変更
- SetWindowSize(SCREEN_SIZE_X, SCREEN_SIZE_Y);
- // ウインドウを最大化前の座標に移動
- SetWindowPosition(WindowPosX, WindowPosY);
- }
- else
- {
- // 通常モードだった場合はフルスクリーンモードに変更する
- WindowFullSize = TRUE;
- // 現在のウインドウの位置を取得しておく
- GetWindowPosition(&WindowPosX, &WindowPosY);
- // ウインドウスタイルを枠なしに変更
- SetWindowStyleMode(4);
- // ウインドウのサイズをデスクトップと同じにする
- SetWindowSize(DesktopSizeX, DesktopSizeY);
- // ウインドウの位置を画面左上に変更
- SetWindowPosition(0, 0);
- // 裏画面をクリア
- SetDrawScreen(DX_SCREEN_BACK);
- ClearDrawScreen();
- }
- }
- // 移動
- x += add;
- if (x < 0 || x > 640) add = -add;
- // フルスクリーンモードかどうかで処理を分岐
- if (WindowFullSize)
- {
- // フルスクリーンモードの場合
- // 描画先を仮画面に変更
- SetDrawScreen(SubScreen);
- }
- else
- {
- // 通常モードの場合
- // 描画先を裏画面に変更
- SetDrawScreen(DX_SCREEN_BACK);
- }
- ///------------------------------------------------SCREEN SETTING END---------------------------------------
- ClsDrawScreen(); //画面消去
- GameMain();
- ///------------------------------------------------SCREEN SETTING START---------------------------------------
- // フルスクリーンモードの場合のみ仮画面を拡大して裏画面に描画する処理を行う
- int DrawSizeX;
- int DrawSizeY;
- if (WindowFullSize)
- {
- // 描画先を裏画面に変更
- SetDrawScreen(DX_SCREEN_BACK);
- // 仮画面をデスクトップ画面の中心に拡大して描画する
- if ((float)SCREEN_SIZE_X / SCREEN_SIZE_Y < (float)DesktopSizeX / DesktopSizeY)
- {
- DrawSizeX = DesktopSizeY * SCREEN_SIZE_X / SCREEN_SIZE_Y;
- DrawSizeY = DesktopSizeY;
- }
- else
- {
- DrawSizeX = DesktopSizeX;
- DrawSizeY = DesktopSizeX * SCREEN_SIZE_Y / SCREEN_SIZE_X;
- }
- DrawExtendGraph(
- (DesktopSizeX - DrawSizeX) / 2,
- (DesktopSizeY - DrawSizeY) / 2,
- DesktopSizeX - (DesktopSizeX - DrawSizeX) / 2,
- DesktopSizeY - (DesktopSizeY - DrawSizeY) / 2,
- SubScreen,
- FALSE
- );
- }
- ///------------------------------------------------SCREEN SETTING END---------------------------------------
- ScreenFlip(); //裏画面を表画面に瞬間コピー
- }
- // UDPソケットハンドルの削除
- DeleteUDPSocket(NetUDPHandle);
- CloseNetWork(NetHandle);
- DxLib_End(); // DXライブラリの終了処理
- return 0; //このプログラムの終了
- }
- //---------------------------------------------
- // システムの初期化
- bool SystemInit(void)
- {
- // ----------システム処理
- SetWindowText("Group Project");
- //システム処理
- SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, 16);
- ChangeWindowMode(true); //true:window false:フルスクリーン
- if (DxLib_Init() == -1) //DXライブラリ初期化処理
- {
- return false;
- }
- SetWindowSizeChangeEnableFlag(true);
- // デスクトップのサイズを取得する
- GetDefaultState(&DesktopSizeX, &DesktopSizeY, NULL);
- // ウインドウのサイズが変化しても拡大しない設定にする
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
- // 画面サイズをデスクトップサイズに設定
- SetGraphMode(DesktopSizeX, DesktopSizeY, 32);
- // ウインドウの初期サイズは実際の処理用のサイズ
- SetWindowSize(SCREEN_SIZE_X, SCREEN_SIZE_Y);
- // DXライブラリの初期化
- if (DxLib_Init() < 0) return -1;
- // フルスクリーンモード時に使用する実際の処理用の解像度を持つ仮画面を作成
- SubScreen = MakeScreen(SCREEN_SIZE_X, SCREEN_SIZE_Y);
- // 通常モードだった場合はフルスクリーンモードに変更する
- WindowFullSize = TRUE;
- // 現在のウインドウの位置を取得しておく
- GetWindowPosition(&WindowPosX, &WindowPosY);
- // ウインドウスタイルを枠なしに変更
- SetWindowStyleMode(4);
- // ウインドウのサイズをデスクトップと同じにする
- SetWindowSize(DesktopSizeX, DesktopSizeY);
- // ウインドウの位置を画面左上に変更
- SetWindowPosition(0, 0);
- // 裏画面をクリア
- SetDrawScreen(DX_SCREEN_BACK);
- ClearDrawScreen();
- // メインループ(何かキーが押されたらループを抜ける)
- x = 0;
- add = 8;
- // ------グラフィックの登録 ---------
- // ------変数初期化 -----------
- return true;
- }
- //---------------------------------------------
- // プレイ中処理
- void GameMain(void)
- {
- //borderline
- DrawLine(0, 0, 0, SCREEN_SIZE_Y, 0xFFFFFF, 1);
- DrawLine(SCREEN_SIZE_X - 1, 0, SCREEN_SIZE_X - 1, SCREEN_SIZE_Y, 0xFFFFFF, 1);
- DrawLine(0, 0, SCREEN_SIZE_X, 0, 0xFFFFFF, 1);
- DrawLine(0, SCREEN_SIZE_Y - 1, SCREEN_SIZE_X, SCREEN_SIZE_Y - 1, 0xFFFFFF, 1);
- if (WindowFullSize)
- {
- DrawString(4, 2, "borderless fullscreen", 0xFFFFFF);
- }
- else
- {
- DrawString(4, 2, "window(border)", 0xFFFFFF);
- }
- //run
- if (hostS == true)
- {
- NetworkHost();
- }
- else if (joinS == true)
- {
- NetworkJoin();
- }
- //tips
- if (joinS != true && hostS != true) DrawString(100, 500, "Z to host server, X to join server", 0xFFFFFF);
- //Keycheck
- if (trgKey[KEY_Z] == true && hostS != true && joinS != true)
- {
- hostS = true;
- joinS = false;
- //----------------------------
- // UDP通信用のソケットハンドルを作成
- NetUDPHandle = MakeUDPSocket(9850);
- //tcp server
- NetHandle = -1;
- }
- if (trgKey[KEY_X] == true && joinS != true && hostS != true)
- {
- joinS = true;
- hostS = false;
- //----------------------------
- NetUDPHandle = MakeUDPSocket(-1);
- IpUDP.d1 = 172;
- IpUDP.d2 = 20;
- IpUDP.d3 = 40;
- IpUDP.d4 = 120;
- // TCP Connection
- NetHandle = ConnectNetWork(IpUDP, 9850);
- }
- }
- //server
- void NetworkHost(void)
- {
- //check connection
- if (CheckNetWorkRecvUDP(NetUDPHandle) == FALSE)
- {
- // ウインドウズメッセージ処理
- DrawString(100, 500, "Nobody connected", 0xFFFFFF);
- return;
- }
- else
- {
- // 受信
- NetWorkRecvUDP(NetUDPHandle, NULL, NULL, StrBuf, 256, FALSE);
- DrawString(100, 600, StrBuf, GetColor(255, 255, 255));
- DrawString(100, 500, "Data Received!", 0xFFFFFF);
- //tcp------------------------------------
- // 接続してくるのを待つ状態にする
- PreparationListenNetWork(9850);
- // 接続されていたら次に進む
- if (NetHandle != -1)
- {
- // 接続の受付を終了する
- StopListenNetWork();
- // Get Connected IP
- GetNetWorkIP(NetHandle, &IpTCP);
- DrawFormatString(200, 550, 0xFFFFFF, "connected by : [%d, %d, %d, %d]", IpTCP.d1, IpTCP.d2, IpTCP.d3, IpTCP.d4);
- // データが送られて来るまで待つ
- // 取得していない受信データ量が0以外のときはループから抜ける
- if (GetNetWorkDataLength(NetHandle) == 0) return;
- // データ受信
- DataLength = GetNetWorkDataLength(NetHandle); // データの量を取得
- NetWorkRecv(NetHandle, StrBuf, DataLength); // データをバッファに取得
- // 受信したデータを描画
- DrawString(0, 0, StrBuf, GetColor(255, 255, 255));
- // 受信成功のデータを送信
- NetWorkSend(NetHandle, "Sent IP Address to Host", 17);
- // Server Disconnected
- // Get Disconnected Ip
- LostHandle = GetLostNetWork();
- //Check if connection lost
- if (LostHandle == NetHandle)
- {
- // 切断確認表示
- DrawString(100, 600, "TCP Disconnected", GetColor(255, 0, 0));
- }
- }
- }
- }
- //server
- void NetworkJoin(void)
- {
- // 文字列の送信
- NetWorkSendUDP(NetUDPHandle, IpUDP, 9850, "THIS MESSAGE RECEIVED FROM BINBIN", 15);
- DrawString(100, 500, "Data Sent!", 0xFFFFFF);
- DrawFormatString(200, 550, 0xFFFFFF, "Client IP (connected to) : [%d, %d, %d, %d]", IpTCP.d1, IpTCP.d2, IpTCP.d3, IpTCP.d4);
- //if tcp connected
- if (NetHandle != -1)
- {
- // データ送信
- NetWorkSend(NetHandle, "繋がったか~!?", 17);
- // tcp: wait for data
- // 取得していない受信データ量を得る
- DataLength = GetNetWorkDataLength(NetHandle);
- // check if data received
- if (DataLength == 0)
- {
- DrawString(100, 600, "No Data Response from Host", GetColor(255, 0, 0));
- }
- else
- {
- // データ受信
- NetWorkRecv(NetHandle, StrBuf, DataLength); // データをバッファに取得
- DrawString(100, 600, StrBuf, GetColor(255, 0, 0));
- }
- }
- else
- {
- DrawString(100, 600, "TCP network not connected", GetColor(255, 0, 0));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement