mirror of
https://github.com/Kaehvaman/OAIP.git
synced 2025-01-18 16:49:11 +04:00
Added inventory control
This commit is contained in:
parent
fc61facbb1
commit
cf9f47b172
@ -86,8 +86,8 @@ ATOM MyRegisterClass(HINSTANCE hInstance)
|
||||
|
||||
#define M 10
|
||||
#define N 15
|
||||
#define WIDTH 40
|
||||
#define HEIGHT 40
|
||||
#define WIDTH 50
|
||||
#define HEIGHT 50
|
||||
|
||||
//
|
||||
// ФУНКЦИЯ: InitInstance(HINSTANCE, int)
|
||||
@ -131,10 +131,6 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int player_x = 1;
|
||||
int player_y = 1;
|
||||
int gold = 0;
|
||||
|
||||
// Коды ячеек:
|
||||
// 0 - свободна
|
||||
// 1 -
|
||||
@ -154,6 +150,12 @@ int map[M][N] = {
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
int player_x = 1;
|
||||
int player_y = 1;
|
||||
|
||||
enum obj_enum {empty = 0, wall = 2, gold = 3};
|
||||
int inventory[4] = { 0, 0, 0, 0 };
|
||||
|
||||
enum enum_ways { left, right, up, down };
|
||||
void movePlayer(enum_ways move) {
|
||||
switch (move) {
|
||||
@ -172,27 +174,45 @@ void movePlayer(enum_ways move) {
|
||||
}
|
||||
if (map[player_y][player_x] == 3) {
|
||||
map[player_y][player_x] = 0;
|
||||
gold++;
|
||||
inventory[gold]++;
|
||||
}
|
||||
}
|
||||
|
||||
void putElement(enum_ways way, int element) {
|
||||
void putElement(enum_ways way, obj_enum element) {
|
||||
if (inventory[element] == 0) return;
|
||||
|
||||
switch (way) {
|
||||
case left:
|
||||
if ((player_x > 0) and map[player_y][player_x - 1] == 0) map[player_y][player_x - 1] = element;
|
||||
if ((player_x > 0) and map[player_y][player_x - 1] == 0){
|
||||
map[player_y][player_x - 1] = element;
|
||||
inventory[element]--;
|
||||
}
|
||||
break;
|
||||
case right:
|
||||
if ((player_x < N - 1) and map[player_y][player_x + 1] == 0) map[player_y][player_x + 1] = element;
|
||||
if ((player_x < N - 1) and map[player_y][player_x + 1] == 0) {
|
||||
map[player_y][player_x + 1] = element;
|
||||
inventory[element]--;
|
||||
}
|
||||
break;
|
||||
case up:
|
||||
if ((player_y > 0) and map[player_y - 1][player_x] == 0) map[player_y - 1][player_x] = element;
|
||||
if ((player_y > 0) and map[player_y - 1][player_x] == 0) {
|
||||
map[player_y - 1][player_x] = element;
|
||||
inventory[element]--;
|
||||
}
|
||||
break;
|
||||
case down:
|
||||
if ((player_y < M - 1) and map[player_y + 1][player_x] == 0) map[player_y + 1][player_x] = element;
|
||||
if ((player_y < M - 1) and map[player_y + 1][player_x] == 0) {
|
||||
map[player_y + 1][player_x] = element;
|
||||
inventory[element]--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void beam(enum_ways way) {
|
||||
|
||||
}
|
||||
|
||||
void drawNet(HDC hdc) {
|
||||
for (int i = 0; i <= N * WIDTH; i = i + WIDTH) {
|
||||
MoveToEx(hdc, i, 0, NULL);
|
||||
@ -265,7 +285,7 @@ void save() {
|
||||
fprintf(fout, "\n");
|
||||
}
|
||||
|
||||
fprintf(fout, "%d %d %d\n", player_x, player_y, gold);
|
||||
fprintf(fout, "%d %d %d\n", player_x, player_y, inventory[gold]);
|
||||
|
||||
fclose(fout);
|
||||
}
|
||||
@ -288,11 +308,17 @@ void load() {
|
||||
}
|
||||
}
|
||||
|
||||
fscanf_s(fin, "%d%d%d", &player_x, &player_y, &gold);
|
||||
fscanf_s(fin, "%d%d%d", &player_x, &player_y, &inventory[gold]);
|
||||
|
||||
fclose(fin);
|
||||
}
|
||||
|
||||
int clip(int n, int lower, int upper) {
|
||||
return max(lower, min(n, upper));
|
||||
}
|
||||
|
||||
char count_string[30];
|
||||
|
||||
bool netToggle = false;
|
||||
|
||||
enum keyboard {
|
||||
@ -338,9 +364,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
HDC hdc = BeginPaint(hWnd, &ps);
|
||||
// TODO: Добавьте сюда любой код прорисовки, использующий HDC...
|
||||
|
||||
/*RECT textrect = {
|
||||
(player_x - 1) * WIDTH, (player_y + 1) * HEIGHT,
|
||||
(player_x + 2) * WIDTH, (player_y + 2) * HEIGHT
|
||||
};*/
|
||||
|
||||
RECT textrect = { 0, 0, 100, 50 };
|
||||
|
||||
drawMap(hdc);
|
||||
drawPlayer(hdc);
|
||||
if (netToggle) drawNet(hdc);
|
||||
|
||||
sprintf(count_string, "gold = %d", inventory[gold]);
|
||||
//SetBkMode(hdc, TRANSPARENT);
|
||||
DrawTextA(hdc, count_string, -1, &textrect, (DT_SINGLELINE | DT_TOP | DT_CENTER));
|
||||
|
||||
EndPaint(hWnd, &ps);
|
||||
}
|
||||
@ -369,8 +406,18 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
case VK_A:
|
||||
movePlayer(left);
|
||||
break;
|
||||
case VK_L:
|
||||
putElement(right, 2);
|
||||
case VK_LEFT:
|
||||
putElement(left, gold);
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
putElement(right, gold);
|
||||
break;
|
||||
case VK_UP:
|
||||
putElement(up, gold);
|
||||
break;
|
||||
case VK_DOWN:
|
||||
putElement(down, gold);
|
||||
break;
|
||||
}
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
break;
|
||||
|
@ -1,12 +1,12 @@
|
||||
10 15
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 3 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 3 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 3 3 3 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 2 0 0 2 0
|
||||
0 0 0 0 0 0 0 2 0 0 2 0 0 2 0
|
||||
0 0 0 0 0 0 2 2 2 2 2 2 2 2 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9 4 10
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
|
||||
0 0 0 0 0 0 3 3 3 3 2 3 3 2 3
|
||||
0 0 0 0 0 0 3 2 3 3 2 3 3 2 3
|
||||
0 0 0 0 0 0 2 2 2 2 2 2 2 2 3
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2 5 0
|
||||
|
Loading…
Reference in New Issue
Block a user