You are on page 1of 3

#include <SDL.

h>

const int SCREEN_WIDTH = 640;


const int SCREEN_HEIGHT = 480;
const int BOARD_SIZE = 8;
const int TILE_SIZE = 60;

SDL_Window* gWindow = nullptr;


SDL_Renderer* gRenderer = nullptr;

// Cấu trúc lưu trữ thông tin về mỗi quân cờ cá ngựa


struct HorsePiece {
int posX;
int posY;
};

// Cấu trúc lưu trữ thông tin về bàn cờ và các quân cờ


struct Board {
HorsePiece horses[4];
};

// Khởi tạo SDL và cửa sổ


bool init() {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
return false;
}

gWindow = SDL_CreateWindow("Chess Horse Game", SDL_WINDOWPOS_UNDEFINED,


SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (gWindow == nullptr) {
return false;
}

gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);


if (gRenderer == nullptr) {
return false;
}

return true;
}

// Tải nền và quân cờ


bool loadMedia() {
// TODO: Tải tài nguyên nền và quân cờ
return true;
}

// Giải phóng tài nguyên và thoát SDL


void close() {
SDL_DestroyRenderer(gRenderer);
SDL_DestroyWindow(gWindow);
SDL_Quit();
}

// Vẽ bàn cờ và các quân cờ


void renderBoard(const Board& board) {
// Xóa màn hình
SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(gRenderer);
// Vẽ bàn cờ
for (int row = 0; row < BOARD_SIZE; row++) {
for (int col = 0; col < BOARD_SIZE; col++) {
int x = col * TILE_SIZE;
int y = row * TILE_SIZE;

// Chọn màu cho ô đen và ô trắng xen kẽ


if ((row + col) % 2 == 0) {
SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
} else {
SDL_SetRenderDrawColor(gRenderer, 0x00, 0x00, 0x00, 0xFF);
}

// Vẽ ô
SDL_Rect tileRect = { x, y, TILE_SIZE, TILE_SIZE };
SDL_RenderFillRect(gRenderer, &tileRect);
}
}

// Vẽ các quân cờ cá ngựa


for (int i = 0; i < 4; i++) {
int x = board.horses[i].posX * TILE_SIZE;
int y = board.horses[i].posY * TILE_SIZE;

SDL_SetRenderDrawColor(gRenderer, 0xFF, 0x00, 0x00, 0xFF);


SDL_Rect horseRect = { x, y, TILE_SIZE, TILE_SIZE };
SDL_RenderFillRect(gRenderer, &horseRect);
}

// Hiển thị lên màn hình


SDL_RenderPresent(gRenderer);
}

// Xử lý sự kiện từ bàn phím


void handleEvents(Board& board) {
SDL_Event e;
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
board.horses[0].posX = -1; // Thoát khỏi vòng lặp chính
} else if (e.type == SDL_KEYDOWN) {
switch (e.key.keysym.sym) {
case SDLK_UP:
board.horses[0].posY--;
break;
case SDLK_DOWN:
board.horses[0].posY++;
break;
case SDLK_LEFT:
board.horses[0].posX--;
break;
case SDLK_RIGHT:
board.horses[0].posX++;
break;
}
}
}
}
int main(int argc, char* args[]) {
Board board;
board.horses[0].posX = 0; // Khởi tạo vị trí ban đầu của quân cờ

if (!init()) {
printf("Failed to initialize SDL!\n");
return -1;
}

if (!loadMedia()) {
printf("Failed to load media!\n");
return -1;
}

bool quit = false;


while (!quit) {
handleEvents(board);

if (board.horses[0].posX == -1) {
quit = true; // Thoát khỏi vòng lặp chính
}

renderBoard(board);
}

close();

return 0;

You might also like