-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
184 lines (146 loc) · 4.23 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <stdlib.h>
#include <time.h>
#include "mouse.h"
#include "common.h"
#include "process.h"
#include "dxfunc.h" /////
#include "image.h" /////
#include "sound.h"
#pragma comment(lib, "d3d9")
#pragma comment(lib, "d3dx9")
#pragma comment(lib, "winmm")
#pragma comment (lib, "dxguid")
#pragma comment (lib, "dinput8")
//void KeyInput();
void GameLoop();
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR cmdLine, int nCmdShow){
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(hInstance, IDC_ARROW);
WndClass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = "Quoridor+";
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
srand((unsigned)time(NULL));
if (!RegisterClass(&WndClass)){
MessageBox(0, "RegisterClass() - FAILED", 0, 0);
return false;
}
hWnd = CreateWindow(WndClass.lpszClassName, WndClass.lpszClassName, WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, NULL, NULL, WindowWidth + 6, WindowHeight + 32, NULL, NULL, WndClass.hInstance, NULL);
if (!hWnd){
MessageBox(0, "CreateWindow() - FAILED", 0, 0);
return false;
}
InitializeDevice();
image->LoadTextures();
//sound->InitializeSound(); // Sound() Initializer include initializeSound()
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);
Process** processList;
Process* curProcess;
Process().InitList(&processList, &curProcess);
while (Message.message != WM_QUIT){
if (PeekMessage(&Message, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&Message);
DispatchMessage(&Message);
}
curProcess->Loop();
}
// TO DELETE/Free/Release LIST
// Board::board[9][9]
// _board
// characters + vector moveableList
// players + barList
// IDirect3DTexture** square, character
// etc.
image->ReleaseTextures();
ReleaseDevice();
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
switch (iMessage){
case WM_LBUTTONDOWN:
g_mouse->Click(g_turn);
break;
/*
case WM_LBUTTONUP:
break;
*/
case WM_RBUTTONDOWN:
g_mouse->R_Click();
break;
case WM_MOUSEMOVE:
g_mouse->__set_loc(LOWORD(lParam), HIWORD(lParam));
g_mouse->CheckOnButton();
g_mouse->CheckOnBar(*g_turn);
g_mouse->CheckAroundPoint(*g_turn);
break;
case WM_MOUSEWHEEL:
g_mouse->Wheel(((SHORT)HIWORD(wParam) > 0)? true: false); // up(+), down(-)
break;
case WM_KEYDOWN:
/*
if(wParam == VK_ESCAPE) {
DestroyWindow(hWnd);
return 0;
}
*/
if(wParam == 'P') {
// pause?
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
/*
void KeyInput() {
//키입력을 받고 받은 키입력에 따라 처리를 결정하는 함수
//여기서 간단한 winapi에서 쓰기 쉬운 함수인 GetAsyncKeyState를 씀
//리턴값을 살펴보면
//GetAsyncKeyState는 키가 눌렸을 때 GetAsyncKeyState의 0x8000 bit가 1이된다.
//GetAsyncKeyState가 호출되었을 때부터 다음 GetAsyncKeyState가 호출될 때까지
//키가 계속 눌려 있는 상태라면 0x0001 bit는 0, 그렇지 않은 경우는 1이 된다.
//간단하게 비트연산자를 이용해서 리턴값을 확인하는데 자주쓰이는 2가지 경우를 예로 들면
//if((GetAsyncKeyState(원하는키) & 0x8001) == 0x8001) <-키가 막 눌린 상태(누른 순간만 true)
//if(GetAsyncKeyState(원하는키) & 0x8000) <- 키가 눌린 상태(눌리고 있는 동안 계속 true)
//같이 사용할 수 있다. 복잡해보이면 위의 2경우만 사용하면 됨
//인자값은 눌린 키를 뜻하는데 아스키코드를 원하면
//GetAsyncKeyState('a') , GetAsyncKeyState('b') 이렇게 작은따옴표를 이용해서
//특수한 키를 원하면
//GetAsyncKeyState(VK_ESC), GetAsyncKeyState(VK_RETURN) //순서대로 esc와 엔터
//이렇게 미리 정의되어있는 상수를 슨다.
if((GetAsyncKeyState(VK_SPACE) & 0x8001) == 0x8001) {
//스페이스가 눌린 순간을 뜻한다.
}
if(GetAsyncKeyState(VK_LEFT) & 0x8000) {
}
if(GetAsyncKeyState(VK_RIGHT) & 0x8000) {
}
}
*/
void GameLoop() {
// impl.
}
// 벽 파괴
// bar 생성
// 이동 + 1
// 벽 2개 설치
// ...
/*
// 값 확인
char testtest[128];
sprintf(testtest, "%d", pn);
MessageBox(hWnd, testtest, 0, MB_OK);
*/
// check reachable값을 debug text로 출력, 확인?