-
-
Save dertst/baed662c30ee8938b31d793e03fffdb9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "stdafx.h" | |
#include "WindowsProject5.h" | |
#include "stdio.h" | |
#include <Windows.h> | |
#define MAX_LOADSTRING 100 | |
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_WINDOWSPROJECT5, szWindowClass, MAX_LOADSTRING); | |
MyRegisterClass(hInstance); | |
if (!InitInstance (hInstance, nCmdShow)) | |
{ | |
return FALSE; | |
} | |
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT5)); | |
MSG msg; | |
while (GetMessage(&msg, nullptr, 0, 0)) | |
{ | |
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) | |
{ | |
TranslateMessage(&msg); | |
DispatchMessage(&msg); | |
} | |
} | |
return (int) msg.wParam; | |
} | |
int hero; | |
int a[100][100]; | |
int n; | |
int m; | |
void Read() | |
{ | |
FILE *f; | |
fopen_s(&f, "C:\\temp\\game.txt", "rt"); | |
fscanf_s(f, "%d ", &n); | |
fscanf_s(f, "%d ", &m); | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
fscanf_s(f, "%d ", &a[i][j]); | |
} | |
} | |
fclose(f); | |
} | |
void Draw(HDC hdc) | |
{ | |
HBRUSH GrayBrush = CreateSolidBrush(RGB(100, 100, 100)); | |
HBRUSH BlackBrush = CreateSolidBrush(RGB(0, 0, 0)); | |
HBRUSH YellowBrush = CreateSolidBrush(RGB(255, 244, 0)); | |
HBRUSH GreenBrush = CreateSolidBrush(RGB(0, 255, 0)); | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
RECT rect = { j * 20,i * 20,(j + 1) * 20,(i + 1) * 20 }; | |
if (a[i][j] == 0) | |
{ | |
FillRect(hdc, &rect, GrayBrush); | |
} | |
if (a[i][j] == 1) | |
{ | |
FillRect(hdc, &rect, BlackBrush); | |
} | |
if (a[i][j] == 2) | |
{ | |
FillRect(hdc, &rect, YellowBrush); | |
} | |
} | |
} | |
} | |
void movetoleft(int &n, int &m) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
if (a[i][j] == 2) | |
{ | |
if (a[i][j - 1] == 0) | |
{ | |
a[i][j - 1] = 2; | |
a[i][j] = 0; | |
} | |
} | |
} | |
} | |
} | |
void movetoright(int &n, int &m) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
if (a[i][j] == 2) | |
{ | |
if (a[i][j + 1] == 0) | |
{ | |
a[i][j + 1] = 2; | |
a[i][j] = 0; | |
} | |
} | |
} | |
} | |
} | |
void movetoup(int &n, int &m) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
if (a[i][j] == 2) | |
{ | |
if (a[i-1][j] == 0) | |
{ | |
a[i - 1][j] = 2; | |
a[i][j] = 0; | |
} | |
} | |
} | |
} | |
} | |
void movetodown(int &n, int &m) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
for (int j = 0; j < m; j++) | |
{ | |
if (a[i][j] == 2) | |
{ | |
if (a[i + 1][j] == 0) | |
{ | |
a[i + 1][j] = 2; | |
a[i][j] = 0; | |
} | |
} | |
} | |
} | |
} | |
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_WINDOWSPROJECT5)); | |
wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); | |
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); | |
wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT5); | |
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; | |
} | |
HDC hdc; | |
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_KEYDOWN: | |
switch (wParam) | |
{ | |
case VK_DOWN: | |
movetodown(n,m); | |
InvalidateRect(hWnd, NULL, TRUE); | |
break; | |
case VK_UP: | |
movetoup(n, m); | |
InvalidateRect(hWnd, NULL, TRUE); | |
break; | |
case VK_LEFT: | |
movetoleft(n, m); | |
InvalidateRect(hWnd, NULL, TRUE); | |
break; | |
case VK_RIGHT: | |
movetoright(n, m); | |
InvalidateRect(hWnd, NULL, TRUE); | |
break; | |
} | |
break; | |
case WM_PAINT: | |
{ | |
PAINTSTRUCT ps; | |
HDC hdc = BeginPaint(hWnd, &ps); | |
Read(); | |
Draw(hdc); | |
EndPaint(hWnd, &ps); | |
} | |
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment