|
@@ -2,6 +2,33 @@
|
|
|
#include <iostream>
|
|
|
#include <SDL/SDL.h>
|
|
|
|
|
|
+#define BLOC_SIZE 16
|
|
|
+#define WIDTH 100
|
|
|
+#define HEIGHT 50
|
|
|
+#define BLOC_TOTAL 4
|
|
|
+
|
|
|
+enum blocType {WATER, MOUNTAIN, GRASS, DESERT};
|
|
|
+
|
|
|
+void drawWorld(float world[HEIGHT][WIDTH][BLOC_TOTAL], SDL_Surface* tileSet[], SDL_Surface* out) {
|
|
|
+ SDL_Rect pos({0, 0, 0, 0});
|
|
|
+ SDL_Surface* select; // Current surface selected ! DO NOT FREE !
|
|
|
+
|
|
|
+ for (int y(0); y < HEIGHT; y++)
|
|
|
+ for (int x(0); x < WIDTH; x++) {
|
|
|
+ select = tileSet[0];
|
|
|
+ pos.x = x * BLOC_SIZE;
|
|
|
+ pos.y = y * BLOC_SIZE;
|
|
|
+
|
|
|
+ // Select the tile with highest level
|
|
|
+ for (int k(1); k < BLOC_TOTAL; k++)
|
|
|
+ if (world[y][x][k] > world[y][x][k - 1])
|
|
|
+ select = tileSet[k];
|
|
|
+
|
|
|
+ SDL_BlitSurface(select, NULL, out, &pos);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
int main()
|
|
|
{
|
|
|
/// [1] Start
|
|
@@ -20,12 +47,10 @@ int main()
|
|
|
|
|
|
/// [2] Create components
|
|
|
// [2.1] Create window
|
|
|
- const int blocSize(16);
|
|
|
- const int width(100), height(50);
|
|
|
- SDL_Surface* screen = SDL_SetVideoMode(width * blocSize, height * blocSize, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
|
|
+ SDL_Surface* screen = SDL_SetVideoMode(WIDTH * BLOC_SIZE, HEIGHT * BLOC_SIZE, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
|
|
if ( !screen )
|
|
|
{
|
|
|
- std::cout << "Unable to set " << width << "x" << height << " video: " << SDL_GetError() << std::endl;
|
|
|
+ std::cout << "Unable to set " << WIDTH << "x" << HEIGHT << " video: " << SDL_GetError() << std::endl;
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -37,35 +62,31 @@ int main()
|
|
|
SDL_Surface* pawn = SDL_LoadBMP("textures/pawn.bmp");
|
|
|
|
|
|
// [2.3] Create variables
|
|
|
- SDL_Rect pos({0, 0, 0, 0});
|
|
|
SDL_Rect pawnPos({0, 0, 0, 0});
|
|
|
|
|
|
// [2.4] Create world
|
|
|
- const int blocTotal = 4;
|
|
|
- enum blocType {WATER, MOUNTAIN, GRASS, DESERT};
|
|
|
- float world[height][width][blocTotal];
|
|
|
+ float world[HEIGHT][WIDTH][BLOC_TOTAL];
|
|
|
|
|
|
// Clear world
|
|
|
- for (int j(0); j < height; j++)
|
|
|
- for (int i(0); i < width; i++)
|
|
|
- for (int t(0); t < blocTotal; t++)
|
|
|
+ for (int j(0); j < HEIGHT; j++)
|
|
|
+ for (int i(0); i < WIDTH; i++)
|
|
|
+ for (int t(0); t < BLOC_TOTAL; t++)
|
|
|
world[j][i][t] = 0.0f;
|
|
|
|
|
|
// Basic water
|
|
|
const int waterLevel = 0.01f;
|
|
|
- for (int j(0); j < height; j++)
|
|
|
- for (int i(0); i < width; i++)
|
|
|
+ for (int j(0); j < HEIGHT; j++)
|
|
|
+ for (int i(0); i < WIDTH; i++)
|
|
|
world[j][i][WATER] = waterLevel;
|
|
|
|
|
|
// Top mountain line
|
|
|
const int mountainLevel = 10.0f;
|
|
|
- for (int j(0); j < height; j++)
|
|
|
- for (int i(0); i < width; i++)
|
|
|
+ for (int j(0); j < HEIGHT; j++)
|
|
|
+ for (int i(0); i < WIDTH; i++)
|
|
|
world[j][i][MOUNTAIN] = mountainLevel / (1 + j);
|
|
|
|
|
|
// [2.5] Surface containers
|
|
|
- SDL_Surface* select; // Current surface selected ! DO NOT FREE !
|
|
|
- SDL_Surface* tileSet[blocTotal] = {water, mountain, grass, desert};
|
|
|
+ SDL_Surface* tileSet[BLOC_TOTAL] = {water, mountain, grass, desert};
|
|
|
|
|
|
/// [3] Main loop
|
|
|
bool done(false);
|
|
@@ -97,19 +118,7 @@ int main()
|
|
|
// [3.3] Draw phase
|
|
|
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 255, 255));
|
|
|
|
|
|
- for (int y(0); y < height; y++)
|
|
|
- for (int x(0); x < width; x++) {
|
|
|
- select = tileSet[0];
|
|
|
- pos.x = x * blocSize;
|
|
|
- pos.y = y * blocSize;
|
|
|
-
|
|
|
- // Select the tile with highest level
|
|
|
- for (int k(1); k < blocTotal; k++)
|
|
|
- if (world[y][x][k] > world[y][x][k - 1])
|
|
|
- select = tileSet[k];
|
|
|
-
|
|
|
- SDL_BlitSurface(select, NULL, screen, &pos);
|
|
|
- }
|
|
|
+ drawWorld(world, tileSet, screen);
|
|
|
|
|
|
SDL_BlitSurface(pawn, NULL, screen, &pawnPos);
|
|
|
|