Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.17 KB | None | 0 0
  1. #include "main.h"
  2. #include "keycheck.h"
  3.  
  4. //------------ Screen Initialization ------------
  5. #define SCREEN_SIZE_X 1600
  6. #define SCREEN_SIZE_Y 900
  7. int x, add;
  8. int WindowFullSize;
  9. int WindowPosX;
  10. int WindowPosY;
  11. int DesktopSizeX;
  12. int DesktopSizeY;
  13. int SubScreen;
  14. int WindowX;
  15.  
  16. //udp
  17. bool hostS;
  18. bool joinS;
  19. char StrBuf[256]; //データバッファ
  20. IPDATA IpUDP; // 送信用IPアドレスデータ
  21. IPDATA IpTCP; // 送信用IPアドレスデータ
  22. int NetUDPHandle; // ネットワークハンドル
  23.  
  24. //tcp
  25. int NetHandle, LostHandle; // ネットワークハンドル
  26. int DataLength; // 受信データ量保存用変数
  27.  
  28. //プロトタイプ宣言
  29. bool SystemInit(void);
  30. void GameMain(void);
  31. void NetworkJoin(void);
  32. void NetworkHost(void);
  33.  
  34. // ========= WinMain関数
  35. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  36. {
  37. // システムの初期化
  38. if (SystemInit() == false)
  39. {
  40. return -1;
  41. }
  42.  
  43. // --------ゲームループ
  44. while (ProcessMessage() == 0)
  45. {
  46. KeyCheck();
  47.  
  48. ///------------------------------------------------SCREEN SETTING START---------------------------------------
  49. // Escape Key to change window mode
  50. if (trgKey[KEY_F5] == true)
  51. {
  52. if (WindowFullSize)
  53. {
  54. // フルスクリーンモードだった場合は通常モードに変更する
  55. WindowFullSize = FALSE;
  56.  
  57. // ウインドウスタイルを標準に変更
  58. SetWindowStyleMode(0);
  59.  
  60. // ウインドウサイズを 640x480 に変更
  61. SetWindowSize(SCREEN_SIZE_X, SCREEN_SIZE_Y);
  62.  
  63. // ウインドウを最大化前の座標に移動
  64. SetWindowPosition(WindowPosX, WindowPosY);
  65. }
  66. else
  67. {
  68. // 通常モードだった場合はフルスクリーンモードに変更する
  69. WindowFullSize = TRUE;
  70.  
  71. // 現在のウインドウの位置を取得しておく
  72. GetWindowPosition(&WindowPosX, &WindowPosY);
  73.  
  74. // ウインドウスタイルを枠なしに変更
  75. SetWindowStyleMode(4);
  76.  
  77. // ウインドウのサイズをデスクトップと同じにする
  78. SetWindowSize(DesktopSizeX, DesktopSizeY);
  79.  
  80. // ウインドウの位置を画面左上に変更
  81. SetWindowPosition(0, 0);
  82.  
  83. // 裏画面をクリア
  84. SetDrawScreen(DX_SCREEN_BACK);
  85. ClearDrawScreen();
  86. }
  87. }
  88.  
  89. // 移動
  90. x += add;
  91. if (x < 0 || x > 640) add = -add;
  92.  
  93. // フルスクリーンモードかどうかで処理を分岐
  94. if (WindowFullSize)
  95. {
  96. // フルスクリーンモードの場合
  97.  
  98. // 描画先を仮画面に変更
  99. SetDrawScreen(SubScreen);
  100. }
  101. else
  102. {
  103. // 通常モードの場合
  104.  
  105. // 描画先を裏画面に変更
  106. SetDrawScreen(DX_SCREEN_BACK);
  107. }
  108. ///------------------------------------------------SCREEN SETTING END---------------------------------------
  109.  
  110.  
  111. ClsDrawScreen(); //画面消去
  112.  
  113. GameMain();
  114.  
  115.  
  116. ///------------------------------------------------SCREEN SETTING START---------------------------------------
  117.  
  118. // フルスクリーンモードの場合のみ仮画面を拡大して裏画面に描画する処理を行う
  119. int DrawSizeX;
  120. int DrawSizeY;
  121. if (WindowFullSize)
  122. {
  123. // 描画先を裏画面に変更
  124. SetDrawScreen(DX_SCREEN_BACK);
  125.  
  126. // 仮画面をデスクトップ画面の中心に拡大して描画する
  127. if ((float)SCREEN_SIZE_X / SCREEN_SIZE_Y < (float)DesktopSizeX / DesktopSizeY)
  128. {
  129. DrawSizeX = DesktopSizeY * SCREEN_SIZE_X / SCREEN_SIZE_Y;
  130. DrawSizeY = DesktopSizeY;
  131. }
  132. else
  133. {
  134. DrawSizeX = DesktopSizeX;
  135. DrawSizeY = DesktopSizeX * SCREEN_SIZE_Y / SCREEN_SIZE_X;
  136. }
  137.  
  138. DrawExtendGraph(
  139. (DesktopSizeX - DrawSizeX) / 2,
  140. (DesktopSizeY - DrawSizeY) / 2,
  141. DesktopSizeX - (DesktopSizeX - DrawSizeX) / 2,
  142. DesktopSizeY - (DesktopSizeY - DrawSizeY) / 2,
  143. SubScreen,
  144. FALSE
  145. );
  146. }
  147. ///------------------------------------------------SCREEN SETTING END---------------------------------------
  148.  
  149. ScreenFlip(); //裏画面を表画面に瞬間コピー
  150. }
  151.  
  152. // UDPソケットハンドルの削除
  153. DeleteUDPSocket(NetUDPHandle);
  154. CloseNetWork(NetHandle);
  155. DxLib_End(); // DXライブラリの終了処理
  156. return 0; //このプログラムの終了
  157. }
  158.  
  159. //---------------------------------------------
  160. // システムの初期化
  161. bool SystemInit(void)
  162. {
  163. // ----------システム処理
  164. SetWindowText("Group Project");
  165. //システム処理
  166. SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, 16);
  167. ChangeWindowMode(true); //true:window false:フルスクリーン
  168. if (DxLib_Init() == -1) //DXライブラリ初期化処理
  169. {
  170. return false;
  171. }
  172. SetWindowSizeChangeEnableFlag(true);
  173.  
  174. // デスクトップのサイズを取得する
  175. GetDefaultState(&DesktopSizeX, &DesktopSizeY, NULL);
  176.  
  177. // ウインドウのサイズが変化しても拡大しない設定にする
  178. SetWindowSizeChangeEnableFlag(FALSE, FALSE);
  179.  
  180. // 画面サイズをデスクトップサイズに設定
  181. SetGraphMode(DesktopSizeX, DesktopSizeY, 32);
  182.  
  183. // ウインドウの初期サイズは実際の処理用のサイズ
  184. SetWindowSize(SCREEN_SIZE_X, SCREEN_SIZE_Y);
  185.  
  186. // DXライブラリの初期化
  187. if (DxLib_Init() < 0) return -1;
  188.  
  189. // フルスクリーンモード時に使用する実際の処理用の解像度を持つ仮画面を作成
  190. SubScreen = MakeScreen(SCREEN_SIZE_X, SCREEN_SIZE_Y);
  191.  
  192. // 通常モードだった場合はフルスクリーンモードに変更する
  193. WindowFullSize = TRUE;
  194.  
  195. // 現在のウインドウの位置を取得しておく
  196. GetWindowPosition(&WindowPosX, &WindowPosY);
  197.  
  198. // ウインドウスタイルを枠なしに変更
  199. SetWindowStyleMode(4);
  200.  
  201. // ウインドウのサイズをデスクトップと同じにする
  202. SetWindowSize(DesktopSizeX, DesktopSizeY);
  203.  
  204. // ウインドウの位置を画面左上に変更
  205. SetWindowPosition(0, 0);
  206.  
  207. // 裏画面をクリア
  208. SetDrawScreen(DX_SCREEN_BACK);
  209. ClearDrawScreen();
  210.  
  211. // メインループ(何かキーが押されたらループを抜ける)
  212. x = 0;
  213. add = 8;
  214.  
  215. // ------グラフィックの登録 ---------
  216.  
  217. // ------変数初期化 -----------
  218.  
  219. return true;
  220. }
  221.  
  222. //---------------------------------------------
  223. // プレイ中処理
  224. void GameMain(void)
  225. {
  226. //borderline
  227. DrawLine(0, 0, 0, SCREEN_SIZE_Y, 0xFFFFFF, 1);
  228. DrawLine(SCREEN_SIZE_X - 1, 0, SCREEN_SIZE_X - 1, SCREEN_SIZE_Y, 0xFFFFFF, 1);
  229. DrawLine(0, 0, SCREEN_SIZE_X, 0, 0xFFFFFF, 1);
  230. DrawLine(0, SCREEN_SIZE_Y - 1, SCREEN_SIZE_X, SCREEN_SIZE_Y - 1, 0xFFFFFF, 1);
  231.  
  232. if (WindowFullSize)
  233. {
  234. DrawString(4, 2, "borderless fullscreen", 0xFFFFFF);
  235. }
  236. else
  237. {
  238. DrawString(4, 2, "window(border)", 0xFFFFFF);
  239. }
  240.  
  241.  
  242. //run
  243. if (hostS == true)
  244. {
  245. NetworkHost();
  246. }
  247. else if (joinS == true)
  248. {
  249. NetworkJoin();
  250. }
  251. //tips
  252. if (joinS != true && hostS != true) DrawString(100, 500, "Z to host server, X to join server", 0xFFFFFF);
  253. //Keycheck
  254. if (trgKey[KEY_Z] == true && hostS != true && joinS != true)
  255. {
  256. hostS = true;
  257. joinS = false;
  258. //----------------------------
  259. // UDP通信用のソケットハンドルを作成
  260. NetUDPHandle = MakeUDPSocket(9850);
  261.  
  262. //tcp server
  263. NetHandle = -1;
  264. }
  265. if (trgKey[KEY_X] == true && joinS != true && hostS != true)
  266. {
  267. joinS = true;
  268. hostS = false;
  269. //----------------------------
  270. NetUDPHandle = MakeUDPSocket(-1);
  271. IpUDP.d1 = 172;
  272. IpUDP.d2 = 20;
  273. IpUDP.d3 = 40;
  274. IpUDP.d4 = 120;
  275.  
  276. // TCP Connection
  277. NetHandle = ConnectNetWork(IpUDP, 9850);
  278. }
  279. }
  280.  
  281. //server
  282. void NetworkHost(void)
  283. {
  284. //check connection
  285. if (CheckNetWorkRecvUDP(NetUDPHandle) == FALSE)
  286. {
  287. // ウインドウズメッセージ処理
  288. DrawString(100, 500, "Nobody connected", 0xFFFFFF);
  289. return;
  290. }
  291. else
  292. {
  293. // 受信
  294. NetWorkRecvUDP(NetUDPHandle, NULL, NULL, StrBuf, 256, FALSE);
  295. DrawString(100, 600, StrBuf, GetColor(255, 255, 255));
  296.  
  297. DrawString(100, 500, "Data Received!", 0xFFFFFF);
  298.  
  299. //tcp------------------------------------
  300. // 接続してくるのを待つ状態にする
  301. PreparationListenNetWork(9850);
  302.  
  303. // 接続されていたら次に進む
  304. if (NetHandle != -1)
  305. {
  306. // 接続の受付を終了する
  307. StopListenNetWork();
  308.  
  309. // Get Connected IP
  310. GetNetWorkIP(NetHandle, &IpTCP);
  311. DrawFormatString(200, 550, 0xFFFFFF, "connected by : [%d, %d, %d, %d]", IpTCP.d1, IpTCP.d2, IpTCP.d3, IpTCP.d4);
  312.  
  313. // データが送られて来るまで待つ
  314.  
  315. // 取得していない受信データ量が0以外のときはループから抜ける
  316. if (GetNetWorkDataLength(NetHandle) == 0) return;
  317.  
  318. // データ受信
  319. DataLength = GetNetWorkDataLength(NetHandle); // データの量を取得
  320. NetWorkRecv(NetHandle, StrBuf, DataLength); // データをバッファに取得
  321.  
  322. // 受信したデータを描画
  323. DrawString(0, 0, StrBuf, GetColor(255, 255, 255));
  324.  
  325. // 受信成功のデータを送信
  326. NetWorkSend(NetHandle, "Sent IP Address to Host", 17);
  327.  
  328. // Server Disconnected
  329. // Get Disconnected Ip
  330. LostHandle = GetLostNetWork();
  331.  
  332. //Check if connection lost
  333. if (LostHandle == NetHandle)
  334. {
  335. // 切断確認表示
  336. DrawString(100, 600, "TCP Disconnected", GetColor(255, 0, 0));
  337. }
  338. }
  339. }
  340.  
  341. }
  342.  
  343. //server
  344. void NetworkJoin(void)
  345. {
  346. // 文字列の送信
  347. NetWorkSendUDP(NetUDPHandle, IpUDP, 9850, "THIS MESSAGE RECEIVED FROM BINBIN", 15);
  348.  
  349. DrawString(100, 500, "Data Sent!", 0xFFFFFF);
  350.  
  351. DrawFormatString(200, 550, 0xFFFFFF, "Client IP (connected to) : [%d, %d, %d, %d]", IpTCP.d1, IpTCP.d2, IpTCP.d3, IpTCP.d4);
  352.  
  353. //if tcp connected
  354. if (NetHandle != -1)
  355. {
  356. // データ送信
  357. NetWorkSend(NetHandle, "繋がったか~!?", 17);
  358.  
  359. // tcp: wait for data
  360. // 取得していない受信データ量を得る
  361. DataLength = GetNetWorkDataLength(NetHandle);
  362.  
  363. // check if data received
  364. if (DataLength == 0)
  365. {
  366. DrawString(100, 600, "No Data Response from Host", GetColor(255, 0, 0));
  367. }
  368. else
  369. {
  370. // データ受信
  371. NetWorkRecv(NetHandle, StrBuf, DataLength); // データをバッファに取得
  372. DrawString(100, 600, StrBuf, GetColor(255, 0, 0));
  373. }
  374. }
  375. else
  376. {
  377. DrawString(100, 600, "TCP network not connected", GetColor(255, 0, 0));
  378. }
  379. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement