#include <SDL.h>
#include <fstream>
const int W = 800;
const int H = 600;
const int TILE = 32;
const int GW = W / TILE;
const int GH = H / TILE;
int grid[100][100];
bool playMode = false;
// сохранение
void saveLevel()
{
std::ofstream f("level.lvl");
for (int y = 0; y < GH; y++)
{
for (int x = 0; x < GW; x++)
{
f << grid[x][y] << " ";
}
f << "\n";
}
f.close();
}
// загрузка
void loadLevel()
{
std::ifstream f("level.lvl");
for (int y = 0; y < GH; y++)
{
for (int x = 0; x < GW; x++)
{
f >> grid[x][y];
}
}
f.close();
}
int main(int argc, char* argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow(
"2D Hammer++",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
W, H,
0
);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
bool running = true;
while (running)
{
SDL_Event e;
while (SDL_PollEvent(&e))
{
if (e.type == SDL_QUIT)
running = false;
// клавиши
if (e.type == SDL_KEYDOWN)
{
if (e.key.keysym.sym == SDLK_p)
playMode = !playMode;
if (e.key.keysym.sym == SDLK_s)
saveLevel();
if (e.key.keysym.sym == SDLK_l)
loadLevel();
}
// мышь (только в редакторе)
if (!playMode && e.type == SDL_MOUSEBUTTONDOWN)
{
int x = e.button.x / TILE;
int y = e.button.y / TILE;
if (e.button.button == SDL_BUTTON_LEFT)
grid[x][y] = 1;
if (e.button.button == SDL_BUTTON_RIGHT)
grid[x][y] = 0;
if (e.button.button == SDL_BUTTON_MIDDLE)
grid[x][y] = 2; // шип
}
}
SDL_SetRenderDrawColor(renderer, 30, 30, 30, 255);
SDL_RenderClear(renderer);
// рендер сетки
for (int y = 0; y < GH; y++)
for (int x = 0; x < GW; x++)
{
SDL_Rect r = { x*TILE, y*TILE, TILE, TILE };
if (grid[x][y] == 1)
SDL_SetRenderDrawColor(renderer, 200, 200, 200, 255);
else if (grid[x][y] == 2)
SDL_SetRenderDrawColor(renderer, 255, 50, 50, 255);
else
SDL_SetRenderDrawColor(renderer, 50, 50, 50, 255);
SDL_RenderFillRect(renderer, &r);
SDL_SetRenderDrawColor(renderer, 70, 70, 70, 255);
SDL_RenderDrawRect(renderer, &r);
}
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}