Advertisement
ResistanceJke

lab9

Dec 2nd, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.72 KB | None | 0 0
  1. // lab9l.cpp : Определяет точку входа для приложения.
  2. //
  3.  
  4. #include "framework.h"
  5. #include "lab9l.h"
  6. #include <stdio.h>
  7. int w, h, px, py;
  8. int arr[20][20];
  9.  
  10.  
  11. void LoadLab()
  12. {
  13.     FILE* f;
  14.     fopen_s(&f, "D:\\temp\\inputx.txt", "rt");
  15.     fscanf_s(f, "%d%d%d%d", &w, &h, &px, &py);
  16.     for (int y = 0; y < h; y++)
  17.     {
  18.         for (int x = 0; x < w; x++)
  19.         {
  20.             fscanf_s(f, "%d", &arr[x][y]);
  21.         }
  22.     }
  23.     fclose(f);
  24. }
  25.  
  26.  
  27. #define MAX_LOADSTRING 100
  28.  
  29. // Глобальные переменные:
  30. HINSTANCE hInst;                                // текущий экземпляр
  31. WCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
  32. WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
  33.  
  34. // Отправить объявления функций, включенных в этот модуль кода:
  35. ATOM                MyRegisterClass(HINSTANCE hInstance);
  36. BOOL                InitInstance(HINSTANCE, int);
  37. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  38. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  39.  
  40. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  41.                      _In_opt_ HINSTANCE hPrevInstance,
  42.                      _In_ LPWSTR    lpCmdLine,
  43.                      _In_ int       nCmdShow)
  44. {
  45.     UNREFERENCED_PARAMETER(hPrevInstance);
  46.     UNREFERENCED_PARAMETER(lpCmdLine);
  47.  
  48.     // TODO: Разместите код здесь.
  49.  
  50.     // Инициализация глобальных строк
  51.     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  52.     LoadStringW(hInstance, IDC_LAB9L, szWindowClass, MAX_LOADSTRING);
  53.     MyRegisterClass(hInstance);
  54.  
  55.     // Выполнить инициализацию приложения:
  56.     if (!InitInstance (hInstance, nCmdShow))
  57.     {
  58.         return FALSE;
  59.     }
  60.  
  61.     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LAB9L));
  62.  
  63.     MSG msg;
  64.  
  65.     // Цикл основного сообщения:
  66.     while (GetMessage(&msg, nullptr, 0, 0))
  67.     {
  68.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  69.         {
  70.             TranslateMessage(&msg);
  71.             DispatchMessage(&msg);
  72.         }
  73.     }
  74.  
  75.     return (int) msg.wParam;
  76. }
  77.  
  78.  
  79.  
  80. //
  81. //  ФУНКЦИЯ: MyRegisterClass()
  82. //
  83. //  ЦЕЛЬ: Регистрирует класс окна.
  84. //
  85. ATOM MyRegisterClass(HINSTANCE hInstance)
  86. {
  87.     WNDCLASSEXW wcex;
  88.  
  89.     wcex.cbSize = sizeof(WNDCLASSEX);
  90.  
  91.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  92.     wcex.lpfnWndProc    = WndProc;
  93.     wcex.cbClsExtra     = 0;
  94.     wcex.cbWndExtra     = 0;
  95.     wcex.hInstance      = hInstance;
  96.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LAB9L));
  97.     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  98.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  99.     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_LAB9L);
  100.     wcex.lpszClassName  = szWindowClass;
  101.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  102.  
  103.     return RegisterClassExW(&wcex);
  104. }
  105.  
  106. //
  107. //   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
  108. //
  109. //   ЦЕЛЬ: Сохраняет маркер экземпляра и создает главное окно
  110. //
  111. //   КОММЕНТАРИИ:
  112. //
  113. //        В этой функции маркер экземпляра сохраняется в глобальной переменной, а также
  114. //        создается и выводится главное окно программы.
  115. //
  116. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  117. {
  118.    hInst = hInstance; // Сохранить маркер экземпляра в глобальной переменной
  119.  
  120.    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  121.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  122.  
  123.    if (!hWnd)
  124.    {
  125.       return FALSE;
  126.    }
  127.    LoadLab();
  128.    ShowWindow(hWnd, nCmdShow);
  129.    UpdateWindow(hWnd);
  130.  
  131.    return TRUE;
  132. }
  133.  
  134. //
  135. //  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
  136. //
  137. //  ЦЕЛЬ: Обрабатывает сообщения в главном окне.
  138. //
  139. //  WM_COMMAND  - обработать меню приложения
  140. //  WM_PAINT    - Отрисовка главного окна
  141. //  WM_DESTROY  - отправить сообщение о выходе и вернуться
  142. //
  143. //
  144. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  145. {
  146.     HBRUSH Brush1 = CreateSolidBrush(RGB(0, 255, 0));
  147.     HBRUSH Brush2 = CreateSolidBrush(RGB(0, 0, 0));
  148.     HBRUSH Brush3 = CreateSolidBrush(RGB(0, 0, 255));
  149.     HBRUSH Brush4 = CreateSolidBrush(RGB(249, 166, 2));
  150.     HBRUSH Brush5 = CreateSolidBrush(RGB(139, 0, 255));
  151.     HBRUSH Lock = CreateSolidBrush(RGB(227, 16, 16));
  152.     int key;
  153.     switch (message)
  154.     {
  155.     case WM_COMMAND:
  156.         {
  157.             int wmId = LOWORD(wParam);
  158.             // Разобрать выбор в меню:
  159.             switch (wmId)
  160.             {
  161.             case IDM_ABOUT:
  162.                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  163.                 break;
  164.             case IDM_EXIT:
  165.                 DestroyWindow(hWnd);
  166.                 break;
  167.             default:
  168.                 return DefWindowProc(hWnd, message, wParam, lParam);
  169.             }
  170.         }
  171.         break;
  172.     case WM_PAINT:
  173.         {
  174.             PAINTSTRUCT ps;
  175.             HDC hdc = BeginPaint(hWnd, &ps);
  176.            
  177.             for (int y = 0; y < h; y++)
  178.             {
  179.                 for (int x = 0; x < w; x++)
  180.                 {
  181.                     if (arr[x][y] == 1)
  182.                         SelectObject(hdc, Brush1); //местность
  183.                     if (arr[x][y] == 2)
  184.                         SelectObject(hdc, Brush2); //стена
  185.                     if (arr[x][y] == 4)
  186.                         SelectObject(hdc, Brush4); //голда
  187.                     if (arr[x][y] == 3)
  188.                         SelectObject(hdc, Brush3);
  189.                     if (arr[x][y] == 5)
  190.                         SelectObject(hdc, Lock); //ловушка
  191.                     Rectangle(hdc, 20 + x * 40, 20 + y * 40, 20 + (x + 1) * 40, 20 + (y + 1) * 40);
  192.                 }
  193.             }
  194.  
  195.  
  196.             EndPaint(hWnd, &ps);
  197.         }
  198.         break;
  199.     case WM_DESTROY:
  200.         PostQuitMessage(0);
  201.         break;
  202.     default:
  203.         return DefWindowProc(hWnd, message, wParam, lParam);
  204.     }
  205.     return 0;
  206. }
  207.  
  208. // Обработчик сообщений для окна "О программе".
  209. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  210. {
  211.     UNREFERENCED_PARAMETER(lParam);
  212.     switch (message)
  213.     {
  214.     case WM_INITDIALOG:
  215.         return (INT_PTR)TRUE;
  216.  
  217.     case WM_COMMAND:
  218.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  219.         {
  220.             EndDialog(hDlg, LOWORD(wParam));
  221.             return (INT_PTR)TRUE;
  222.         }
  223.         break;
  224.     }
  225.     return (INT_PTR)FALSE;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement