xswazegooodness Привет! Я видел, что некоторые люди писали игры на C++ с использованием SDL2. Твоя игра выглядит как классическое минное поле. У тебя возникли вопросы или проблемы, с которыми ты столкнулся в процессе разработки? Я могу попытаться помочь.
xswazegooodness Понял, хотя я не могу предоставить конкретный код от кого-то другого, я могу дать тебе пример кода для создания базовой версии игры "Минное поле" на C++ с использованием SDL2. Вот пример структуры кода: #include <SDL2/SDL.h> #include <iostream> #include <vector> #include <ctime> #include <cstdlib> // Константы для размера окна и количества мин const int WINDOW_WIDTH = 800; const int WINDOW_HEIGHT = 600; const int NUM_MINES = 10; // Структура для ячейки struct Cell { bool isMine; bool isRevealed; bool isFlagged; int adjacentMines; }; // Функции для инициализации, обновления и рендеринга игры void initGame(std::vector<std::vector<Cell>> &grid); void updateGame(std::vector<std::vector<Cell>> &grid, int x, int y); void renderGame(SDL_Renderer *renderer, const std::vector<std::vector<Cell>> &grid); int main(int argc, char *argv[]) { // Инициализация SDL2 if (SDL_Init(SDL_INIT_VIDEO) < 0) { std::cerr << "Ошибка инициализации SDL2: " << SDL_GetError() << std::endl; return 1; } // Создание окна и рендерера SDL_Window *window = SDL_CreateWindow("Минное поле", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN); if (!window) { std::cerr << "Ошибка создания окна: " << SDL_GetError() << std::endl; return 1; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { std::cerr << "Ошибка создания рендерера: " << SDL_GetError() << std::endl; return 1; } // Создание сетки и инициализация игры std::vector<std::vector<Cell>> grid(WINDOW_WIDTH / 32, std::vector<Cell>(WINDOW_HEIGHT / 32)); initGame(grid); // Главный цикл игры bool running = true; while (running) { SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { running = false; } else if (event.type == SDL_MOUSEBUTTONDOWN) { int x, y; SDL_GetMouseState(&x, &y); updateGame(grid, x / 32, y / 32); } } // Очистка экрана и рендеринг сетки SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderClear(renderer); renderGame(renderer, grid); SDL_RenderPresent(renderer); } // Очистка ресурсов и выход SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } // Реализация функций для инициализации, обновления и рендеринга игры // ... CPP #include <SDL2/SDL.h> #include <iostream> #include <vector> #include <ctime> #include <cstdlib> // Константы для размера окна и количества мин const int WINDOW_WIDTH = 800; const int WINDOW_HEIGHT = 600; const int NUM_MINES = 10; // Структура для ячейки struct Cell { bool isMine; bool isRevealed; bool isFlagged; int adjacentMines; }; // Функции для инициализации, обновления и рендеринга игры void initGame(std::vector<std::vector<Cell>> &grid); void updateGame(std::vector<std::vector<Cell>> &grid, int x, int y); void renderGame(SDL_Renderer *renderer, const std::vector<std::vector<Cell>> &grid); int main(int argc, char *argv[]) { // Инициализация SDL2 if (SDL_Init(SDL_INIT_VIDEO) < 0) { std::cerr << "Ошибка инициализации SDL2: " << SDL_GetError() << std::endl; return 1; } // Создание окна и рендерера SDL_Window *window = SDL_CreateWindow("Минное поле", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN); if (!window) { std::cerr << "Ошибка создания окна: " << SDL_GetError() << std::endl; return 1; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { std::cerr << "Ошибка создания рендерера: " << SDL_GetError() << std::endl; return 1; } // Создание сетки и инициализация игры std::vector<std::vector<Cell>> grid(WINDOW_WIDTH / 32, std::vector<Cell>(WINDOW_HEIGHT / 32)); initGame(grid); // Главный цикл игры bool running = true; while (running) { SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { running = false; } else if (event.type == SDL_MOUSEBUTTONDOWN) { int x, y; SDL_GetMouseState(&x, &y); updateGame(grid, x / 32, y / 32); } } // Очистка экрана и рендеринг сетки SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderClear(renderer); renderGame(renderer, grid); SDL_RenderPresent(renderer); } // Очистка ресурсов и выход SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } // Реализация функций для инициализации, обновления и рендеринга игры // ... Это только каркас кода, и тебе нужно будет реализовать функции `initGame`, `updateGame` и `renderGame` для полноценной игры. Надеюсь, это поможет тебе начать разработку своей версии игры "Минное поле" с использованием SDL2. Если у тебя возникнут вопросы, не стесняйся задавать!