-
Notifications
You must be signed in to change notification settings - Fork 0
/
InitCloseSDL.cpp
200 lines (177 loc) · 4.86 KB
/
InitCloseSDL.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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#include "InitCloseSDL.h"
#include "externVariables.h"
bool init()
{
//Initialization flag
bool success = true;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 )
{
printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Initialize SDL_mixer
if( Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT, 2, 2048 ) < 0 )
{
printf( "SDL_mixer could not initialize! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
//Set texture filtering to linear
if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) )
{
printf( "Warning: Linear texture filtering not enabled!" );
}
//Create window
gWindow = SDL_CreateWindow( "Pacman", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( gWindow == NULL )
{
printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Create vsynced renderer for window
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );
if( gRenderer == NULL )
{
printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Initialize renderer color
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
//Initialize PNG loading
int imgFlags = IMG_INIT_PNG;
if( !( IMG_Init( imgFlags ) & imgFlags ) )
{
printf( "SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
success = false;
}
//Initialize SDL_ttf
if( TTF_Init() == -1 )
{
printf( "SDL_ttf could not initialize! SDL_ttf Error: %s\n", TTF_GetError() );
success = false;
}
}
}
}
return success;
}
bool loadMedia()
{
//Loading success flag
bool success = true;
//Open the font
gFont = TTF_OpenFont( "Fonts/pixel2.ttf", 28 );
if( gFont == NULL )
{
printf( "Failed to load font! SDL_ttf Error: %s\n", TTF_GetError() );
success = false;
}
//Load texture pacman and ghost
if( !sprites.loadFromFile( "Images/sprites2.png" ) )
{
printf( "Failed to load sprites texture!\n" );
success = false;
}
//Load Background
if( !background.loadFromFile("Images/background.jpg") )
{
printf( "Failed to load background texture!\n" );
success = false;
}
//Load Game Over
if (!gameOver.loadFromFile("Images/gameover.jpg"))
{
printf( "Failed to load background texture!\n" );
success = false;
}
return success;
}
//The music that will be played
Mix_Music *theme = NULL;
//The sound effects that will be used
Mix_Chunk *die = NULL;
Mix_Chunk *eatghost = NULL;
Mix_Chunk *eatpoint = NULL;
Mix_Chunk *opening = NULL;
Mix_Chunk *pacmaneatcherry = NULL;
bool loadSound()
{
//Loading success flag
bool success = true;
//Load music
theme = Mix_LoadMUS( "Sounds/theme1.mp3" );
if( theme == NULL )
{
printf( "Failed to load beat music! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
//Load sound effects
opening = Mix_LoadWAV( "Sounds/opening.ogg" );
if( opening == NULL )
{
printf( "Failed to load scratch sound effect! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
die = Mix_LoadWAV( "Sounds/die.ogg" );
if( die == NULL )
{
printf( "Failed to load high sound effect! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
eatghost = Mix_LoadWAV( "Sounds/eatghost.ogg" );
if( eatghost == NULL )
{
printf( "Failed to load medium sound effect! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
eatpoint = Mix_LoadWAV( "Sounds/eatcherry.mp3" );
if( eatpoint == NULL )
{
printf( "Failed to load low sound effect! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
pacmaneatcherry = Mix_LoadWAV("Sounds/ghost-turn-to-blue.mp3");
if( pacmaneatcherry == NULL )
{
printf( "Failed to load low sound effect! SDL_mixer Error: %s\n", Mix_GetError() );
success = false;
}
return success;
}
void close()
{
//Free loaded images
sprites.free();
background.free();
//Free global font
TTF_CloseFont( gFont );
gFont = NULL;
//Free the music
Mix_FreeMusic( theme );
theme = NULL;
//Free the sound effects
Mix_FreeChunk(die);
Mix_FreeChunk(eatghost);
Mix_FreeChunk(eatpoint);
Mix_FreeChunk(opening);
Mix_FreeChunk(pacmaneatcherry);
eatghost = NULL;
eatpoint = NULL;
opening = NULL;
pacmaneatcherry = NULL;
//Destroy window
SDL_DestroyRenderer( gRenderer );
SDL_DestroyWindow( gWindow );
gWindow = NULL;
gRenderer = NULL;
//Quit SDL subsystems
TTF_Quit();
IMG_Quit();
SDL_Quit();
}