diff --git a/Game_Lab_16/Game_Lab_16.cpp b/Game_Lab_16/Game_Lab_16.cpp new file mode 100644 index 0000000..8521fe8 --- /dev/null +++ b/Game_Lab_16/Game_Lab_16.cpp @@ -0,0 +1,493 @@ + +#include +#include "framework.h" +#include "Game_Lab_16.h" + +#define MAX_LOADSTRING 100 +#define N 10 +#define M 15 +#define WIDTH 30 +#define HEIGHT 20 + +int steps = 0; +int gold = 100; + + +int map[N][M] = { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2}, + {0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0}, + {0, 2, 2, 2, 0, 2, 2, 2, 0, 2, 3, 2, 0, 2, 0}, + {0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 2, 2, 0, 2, 0}, + + {0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 2, 0}, + {0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0}, + {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0} +}; + +void drawMap(HDC hdc) { + + HBRUSH hBrushEmptyCell = CreateSolidBrush(RGB(200, 200, 200)); + + HBRUSH hBrushGold = CreateSolidBrush(RGB(255, 255, 0)); + + HBRUSH hBrushWall = CreateSolidBrush(RGB(0, 0, 0)); + + HBRUSH hBrushMan = CreateSolidBrush(RGB(120, 120, 255)); + + + HBRUSH brush[4] = { hBrushEmptyCell, hBrushMan, hBrushWall, hBrushGold }; + + + int i; + int j; + + for (i = 0; i < N; i++) { + for (j = 0; j < M; j++) { + + int x1 = j * WIDTH; + int x2 = (j + 1) * WIDTH; + int y1 = i * HEIGHT; + int y2 = (i + 1) * HEIGHT; + + RECT r = { x1, y1, x2, y2 }; + FillRect(hdc, &r, brush[map[i][j]]); + } + } + + + + for (i = 0; i < 4; i++) + DeleteObject(brush[i]); + + +} +void Left() { + int i, j; + + for (i = 0; i < N; i++) { + for (j = 1; j < M; j++) { + if (map[i][j] == 1) { + if (map[i][j - 1] == 0) { + map[i][j - 1] = 1; + map[i][j] = 0; + steps++; + } + else if (map[i][j - 1] == 3) { + map[i][j - 1] = 1; + map[i][j] = 0; + steps++; + gold++; + } + } + } + } +} +void del() { + int i, j; + for (i = 0; i < N; i++) { + for (j = 0; j < M; j++) { + if (map[i][j] == 1) { + map[i][j] = 0; + + } + } + } +} +void Right() { + int i, j; + + for (i = 0; i < N; i++) { + + for (j = M - 2; j >= 0; j--) { + + if (map[i][j] == 1) { + if (map[i][j + 1] == 0) { + map[i][j + 1] = 1; + map[i][j] = 0; + steps++; + } + else if (map[i][j + 1] == 3) { + map[i][j + 1] = 1; + map[i][j] = 0; + steps++; + gold++; + } + } + } + } +} +void Up() { + int i, j; + + for (i = 1; i < N; i++) { + + for (j = 0; j < M; j++) { + + if (map[i][j] == 1) { + if (map[i - 1][j] == 0) { + map[i - 1][j] = 1; + map[i][j] = 0; + steps++; + } + else if (map[i - 1][j] == 3) { + map[i - 1][j] = 1; + map[i][j] = 0; + steps++; + gold++; + } + } + } + } +} +void Down() { + int i, j; + for (i = N - 2; i >= 0; i--) { + for (j = 0; j < M; j++) { + if (map[i][j] == 1) { + if (map[i + 1][j] == 0) { + map[i + 1][j] = 1; + map[i][j] = 0; + steps++; + } + else if (map[i + 1][j] == 3) { + map[i + 1][j] = 1; + map[i][j] = 0; + steps++; + gold++; + } + } + } + } +} +void wall() { + int i, j; + for (i = 1; i < N - 1; i++) { + for (j = 1; j < M - 1; j++) { + if (map[i][j] == 1) { + //if (map[i][j + 1] == 2 || map[i][j - 1] == 2 || map[i + 1][j] == 2 || map[i - 1][j] == 2) { + + map[i][j + 1] = 3; + map[i][j - 1] = 3; + map[i + 1][j] = 3; + map[i - 1][j] = 3; + /*}*/ + } + } + } +} +void golden() { + int i, j; + for (i = 0; i < N; i++) { + for (j = 1; j < M - 1; j++) { + if (map[i][j] == 1) { + + + map[i][j + 1] = 3; + + } + } + } +} +void g(int i, int j) { + if (map[i][j] == 2) { + map[i][j] = 3; + if (i > 0) { + g(i - 1, j); + } + if (i < N - 1) { + g(i + 1, j); + } + if (j > 0) { + g(i, j - 1); + } + if (j > M - 1) { + g(i, j + 1); + } + + } + + +} +void goldenMidas() { + int i, j; + for (i = 0; i < N; i++) { + for (j = 1; j < M - 1; j++) { + if (map[i][j] == 1 && map[i][j + 1] == 2) { + + + g(i, j + 1); + + } + } + } +} +void destroyWall() { + int i, j; + for (i = 0; i < N; i++) { + for (j = 0; j < M; j++) { + if (map[i][j] == 1) { + for (int k = j + 1; k < M; k++) { + if (map[i][k] == 2) { + map[i][k] = 0; + } + + } + + } + } + } +} + +void Save() { + + FILE* file1; + errno_t error_code; + error_code = fopen_s(&file1, "D:\\C\\gamedata.txt", "w+"); + if (error_code != 0) { + printf("Error! Failed to open file in r mode!"); + return; + } + fprintf(file1, "%d ", N); + fprintf(file1, "%d\n", M); + int i, j; + + for (i = 0; i < N; i++) { + for (j = 0; j < M; j++) { + if (!(map[i][j] == 1)) { + fprintf(file1, "%d ", map[i][j]); + } + else { + fprintf(file1, "%d ", 1); + } + + } + fprintf(file1, "\n"); + } + fprintf(file1, "%d ", steps); + fprintf(file1, "%d", gold); + + fclose(file1); + +} +void Load() { + FILE* fin; + errno_t error_code; + error_code = fopen_s(&fin, "D:\\C\\gamedata.txt", "r"); + if (error_code != 0) { + printf("Error! Failed to open file in r mode!"); + return; + } + int n, m; + fscanf_s(fin, "%d", &n); + fscanf_s(fin, "%d", &m); + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + + fscanf_s(fin, "%d", &map[i][j]); + } + } + fscanf_s(fin, "%d ", &steps); + fscanf_s(fin, "%d", &gold); + + fclose(fin); + +} + + +HINSTANCE hInst; +WCHAR szTitle[MAX_LOADSTRING]; +WCHAR szWindowClass[MAX_LOADSTRING]; + + +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + + + + LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadStringW(hInstance, IDC_GAMELAB16, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + + if (!InitInstance(hInstance, nCmdShow)) + { + return FALSE; + } + + HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GAMELAB16)); + + MSG msg; + + + while (GetMessage(&msg, nullptr, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int)msg.wParam; +} + + + +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEXW wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAMELAB16)); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_GAMELAB16); + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); + + return RegisterClassExW(&wcex); +} + + + +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + hInst = hInstance; + + HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); + + if (!hWnd) + { + return FALSE; + } + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_COMMAND: + { + int wmId = LOWORD(wParam); + + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + } + break; + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + drawMap(hdc); + + + EndPaint(hWnd, &ps); + } + break; + case WM_KEYDOWN: + switch (wParam) { + case VK_DOWN: + Down(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case VK_LEFT: + Left(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case VK_UP: + Up(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case VK_RIGHT: + Right(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 0x53: + Save(); + break; + case 0x4c: + Load(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 0x44: + wall(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 0x55: + golden(); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 0x5A: + goldenMidas(); + InvalidateRect(hWnd, NULL, TRUE); + break; + } + break; + + + + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + + +INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + return (INT_PTR)TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; + } + return (INT_PTR)FALSE; +} diff --git a/Game_Lab_16/Game_Lab_16.h b/Game_Lab_16/Game_Lab_16.h new file mode 100644 index 0000000..d00d47e --- /dev/null +++ b/Game_Lab_16/Game_Lab_16.h @@ -0,0 +1,3 @@ +#pragma once + +#include "resource.h" diff --git a/Game_Lab_16/Game_Lab_16.ico b/Game_Lab_16/Game_Lab_16.ico new file mode 100644 index 0000000..b3ec03b Binary files /dev/null and b/Game_Lab_16/Game_Lab_16.ico differ diff --git a/Game_Lab_16/Game_Lab_16.rc b/Game_Lab_16/Game_Lab_16.rc new file mode 100644 index 0000000..fe47716 Binary files /dev/null and b/Game_Lab_16/Game_Lab_16.rc differ diff --git a/Game_Lab_16/Game_Lab_16.sln b/Game_Lab_16/Game_Lab_16.sln new file mode 100644 index 0000000..d46712b --- /dev/null +++ b/Game_Lab_16/Game_Lab_16.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34616.47 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game_Lab_16", "Game_Lab_16.vcxproj", "{C335B687-8918-4427-B47D-A42BC179F312}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C335B687-8918-4427-B47D-A42BC179F312}.Debug|x64.ActiveCfg = Debug|x64 + {C335B687-8918-4427-B47D-A42BC179F312}.Debug|x64.Build.0 = Debug|x64 + {C335B687-8918-4427-B47D-A42BC179F312}.Debug|x86.ActiveCfg = Debug|Win32 + {C335B687-8918-4427-B47D-A42BC179F312}.Debug|x86.Build.0 = Debug|Win32 + {C335B687-8918-4427-B47D-A42BC179F312}.Release|x64.ActiveCfg = Release|x64 + {C335B687-8918-4427-B47D-A42BC179F312}.Release|x64.Build.0 = Release|x64 + {C335B687-8918-4427-B47D-A42BC179F312}.Release|x86.ActiveCfg = Release|Win32 + {C335B687-8918-4427-B47D-A42BC179F312}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A62A4BCD-DF1A-438E-8D8D-EA6496BCBEA1} + EndGlobalSection +EndGlobal diff --git a/Game_Lab_16/Game_Lab_16.vcxproj b/Game_Lab_16/Game_Lab_16.vcxproj new file mode 100644 index 0000000..05d3bc1 --- /dev/null +++ b/Game_Lab_16/Game_Lab_16.vcxproj @@ -0,0 +1,148 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {c335b687-8918-4427-b47d-a42bc179f312} + GameLab16 + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Game_Lab_16/Game_Lab_16.vcxproj.filters b/Game_Lab_16/Game_Lab_16.vcxproj.filters new file mode 100644 index 0000000..1061159 --- /dev/null +++ b/Game_Lab_16/Game_Lab_16.vcxproj.filters @@ -0,0 +1,49 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Файлы заголовков + + + Файлы заголовков + + + Файлы заголовков + + + Файлы заголовков + + + + + Исходные файлы + + + + + Файлы ресурсов + + + + + Файлы ресурсов + + + Файлы ресурсов + + + \ No newline at end of file diff --git a/Game_Lab_16/Resource.h b/Game_Lab_16/Resource.h new file mode 100644 index 0000000..b829d39 --- /dev/null +++ b/Game_Lab_16/Resource.h @@ -0,0 +1,30 @@ +//{{NO_DEPENDENCIES}} +// Включаемый файл, созданный в Microsoft Visual C++. +// Используется Game_Lab_16.rc + +#define IDS_APP_TITLE 103 + +#define IDR_MAINFRAME 128 +#define IDD_GAMELAB16_DIALOG 102 +#define IDD_ABOUTBOX 103 +#define IDM_ABOUT 104 +#define IDM_EXIT 105 +#define IDI_GAMELAB16 107 +#define IDI_SMALL 108 +#define IDC_GAMELAB16 109 +#define IDC_MYICON 2 +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif +// Следующие стандартные значения для новых объектов +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NO_MFC 130 +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/Game_Lab_16/framework.h b/Game_Lab_16/framework.h new file mode 100644 index 0000000..a8f6dc8 --- /dev/null +++ b/Game_Lab_16/framework.h @@ -0,0 +1,15 @@ +// header.h: включаемый файл для стандартных системных включаемых файлов +// или включаемые файлы для конкретного проекта +// + +#pragma once + +#include "targetver.h" +#define WIN32_LEAN_AND_MEAN // Исключите редко используемые компоненты из заголовков Windows +// Файлы заголовков Windows +#include +// Файлы заголовков среды выполнения C +#include +#include +#include +#include diff --git a/Game_Lab_16/small.ico b/Game_Lab_16/small.ico new file mode 100644 index 0000000..b3ec03b Binary files /dev/null and b/Game_Lab_16/small.ico differ diff --git a/Game_Lab_16/targetver.h b/Game_Lab_16/targetver.h new file mode 100644 index 0000000..d90003d --- /dev/null +++ b/Game_Lab_16/targetver.h @@ -0,0 +1,6 @@ +#pragma once + +// // При включении SDKDDKVer.h будет задана самая новая из доступных платформ Windows. +// Если вы планируете сборку приложения для предыдущей версии платформы Windows, включите WinSDKVer.h и +// задайте желаемую платформу в макросе _WIN32_WINNT, прежде чем включать SDKDDKVer.h. +#include