-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
123 lines (106 loc) · 3.92 KB
/
main.c
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
// 需要的函式庫
#include "./include/basicSetting.h" //請把header都寫在 include 資料夾中!
#include "./include/SDL_StartAndEnd.h"
#include "./include/texture.h"
#include "./include/ui.h"
#include "./include/map.h"
#include "./include/render.h"
#include "./SDL2/SDL_Main.h"
#undef main
// main函式
int main(int argc, char*argv[])
{
// 創立所有 SDL 需要的東西
SDL_Window* window;
SDL_Renderer* renderer;
SDL_InitializeAll(&window, &renderer);
// 資料庫初始化
TextureBase_Init(renderer);
HotBar_Init();
Map_Init();
Render_Init(renderer);
// 偵測輸入(主迴圈)
SDL_Event event;
while (true)
{
// get 輸入
SDL_PollEvent(&event); // 無論有沒有都輸入都執行 loop ,似真正遊戲
// 按叉叉,結束
if (event.type == SDL_QUIT)
break;
// 按 esc,切換是否暫停 (在最後才暫停,確保暫停時所有畫面都被保留)
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
SDL_SwitchPause();
// 暫停中,不執行以下功能
if(SDL_GetPauseBool() == true)
continue;
// 清除畫面 + 畫背景
SDL_RenderClear(renderer);
Render_RenderBackground();
// 畫出地圖、地圖cursor
Render_RenderMap();
Render_RenderMapCursor();
// 開關背包
Backpack_Switch(event);
// 是否有開背包:有
if(Backpack_isOpen() == true)
{
// 畫背包到 render
Render_RenderBackpack();
// 移動背包的 cursor、是否有輸入
Backpack_MoveCursor();
// 有輸入、再執行背包輸入部分
if(Backpack_isInput(event) == true)
{
// 在方塊區域、更新選到的方塊到快捷欄
if(Backpack_GetCursorOnArea() == blockArea)
Backpack_UpdateBlockToHotbar(event);
// 在搜尋區域
if(Backpack_GetCursorOnArea() == searchArea)
{
// 輸入搜尋文字
SearchWords_GetInputWord(event);
// 按 enter,依目前的字去搜尋
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
{
// 搜尋方塊(找到回傳 true),把 cursor 移到那個方塊上,印 找到了 文字
if(TextureBase_isFindBlockBySearchWords() == true)
{
Backpack_FindBlockAndMoveCursor(window, event);
Render_EnableSearchNotify(true);
}
// 沒找到,印 提醒沒找到文字
else
Render_EnableSearchNotify(false);
}
}
}
// 畫背包的 cursor、搜尋文字 到 renderer
Render_RenderSearchNotify();
Render_RenderSearchWords();
Render_RenderBackpackCursor();
}
// 是否有開背包:沒有
else
{
// 編輯、移動地圖部分
Map_EditBlock(event); // 依輸入放置、刪除方塊
Render_MoveCamera(); // 依輸入移動 camera
Map_UpdateMaps(); // 依移動結果更新地圖
// 依輸入移動 cursor 不斷更新 cursor 位置
Map_MoveCursor(event);
}
// 移動、顯示快捷欄
HotBar_MoveCursor(event);
Render_RenderHotbar();
Render_RenderHotbarCursor();
// 畫出畫面,迴圈結束
SDL_RenderPresent(renderer);
}
// 結束程式
Render_Clear();
Map_Clear();
HotBar_Clear();
TextureBase_Clear();
SDL_EndAll_StopProgram(true);
}