#include <SDL.h>
// กำหนดขนาดหน้าจอและขนาดของแต่ละ "ช่อง" บนแผนที่
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define TILE_SIZE 32 // ขนาดของแต่ละช่องสี่เหลี่ยมในแผนที่ (เช่น 32x32 พิกเซล)
// ข้อมูลแผนที่ (ตัวอย่างง่ายๆ)
int map[10][10] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
{0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 3, 3, 3, 3, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0}
};
int main(int argc, char* args[]) {
SDL_Window* window = NULL;
SDL_Renderer* renderer = NULL;
// 1. เริ่มต้น SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError
()); return 1;
}
// 2. สร้างหน้าต่าง
window = SDL_CreateWindow("2D Map", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError
()); SDL_Quit();
return 1;
}
// 3. สร้าง Renderer (สำหรับวาดภาพ)
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError
()); SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
// ลูปหลักของโปรแกรม
int quit = 0;
SDL_Event e;
while (!quit) {
// จัดการอีเวนต์ (เช่น กดปิดหน้าต่าง)
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
quit = 1;
}
}
// 4. ล้างหน้าจอด้วยสีดำ
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
SDL_RenderClear(renderer);
// 5. วาดแผนที่
for (int y = 0; y < 10; y++) {
for (int x = 0; x < 10; x++) {
SDL_Rect fillRect = { x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE };
switch (map[y][x]) {
case 0: // พื้นดิน (สีเขียว)
SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
break;
case 1: // น้ำ (สีฟ้า)
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF);
break;
case 2: // ต้นไม้ (สีน้ำตาลเข้ม)
SDL_SetRenderDrawColor(renderer, 0x65, 0x43, 0x21, 0xFF);
break;
case 3: // ถนน (สีเทา)
SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF);
break;
default: // ค่าเริ่มต้น (สีดำ)
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
break;
}
SDL_RenderFillRect(renderer, &fillRect);
}
}
// 6. อัปเดตหน้าจอ
SDL_RenderPresent(renderer);
}
// 7. ล้างข้อมูลและปิด SDL
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
I2luY2x1ZGUgPFNETC5oPgoKLy8g4LiB4Liz4Lir4LiZ4LiU4LiC4LiZ4Liy4LiU4Lir4LiZ4LmJ4Liy4LiI4Lit4LmB4Lil4Liw4LiC4LiZ4Liy4LiU4LiC4Lit4LiH4LmB4LiV4LmI4Lil4LiwICLguIrguYjguK3guIciIOC4muC4meC5geC4nOC4meC4l+C4teC5iAojZGVmaW5lIFNDUkVFTl9XSURUSCA4MDAKI2RlZmluZSBTQ1JFRU5fSEVJR0hUIDYwMAojZGVmaW5lIFRJTEVfU0laRSAzMiAvLyDguILguJnguLLguJTguILguK3guIfguYHguJXguYjguKXguLDguIrguYjguK3guIfguKrguLXguYjguYDguKvguKXguLXguYjguKLguKHguYPguJnguYHguJzguJnguJfguLXguYggKOC5gOC4iuC5iOC4mSAzMngzMiDguJ7guLTguIHguYDguIvguKUpCgovLyDguILguYnguK3guKHguLnguKXguYHguJzguJnguJfguLXguYggKOC4leC4seC4p+C4reC4ouC5iOC4suC4h+C4h+C5iOC4suC4ouC5hikKaW50IG1hcFsxMF1bMTBdID0gewogICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAogICAgezAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDB9LAogICAgezAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDIsIDIsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDIsIDIsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAogICAgezAsIDAsIDMsIDMsIDMsIDMsIDMsIDAsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDB9LAogICAgezAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDB9Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJnc1tdKSB7CiAgICBTRExfV2luZG93KiB3aW5kb3cgPSBOVUxMOwogICAgU0RMX1JlbmRlcmVyKiByZW5kZXJlciA9IE5VTEw7CgogICAgLy8gMS4g4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZIFNETAogICAgaWYgKFNETF9Jbml0KFNETF9JTklUX1ZJREVPKSA8IDApIHsKICAgICAgICBwcmludGYoIlNETCBjb3VsZCBub3QgaW5pdGlhbGl6ZSEgU0RMX0Vycm9yOiAlc1xuIiwgU0RMX0dldEVycm9yKCkpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIDIuIOC4quC4o+C5ieC4suC4h+C4q+C4meC5ieC4suC4leC5iOC4suC4hwogICAgd2luZG93ID0gU0RMX0NyZWF0ZVdpbmRvdygiMkQgTWFwIiwgU0RMX1dJTkRPV1BPU19VTkRFRklORUQsIFNETF9XSU5ET1dQT1NfVU5ERUZJTkVELCBTQ1JFRU5fV0lEVEgsIFNDUkVFTl9IRUlHSFQsIFNETF9XSU5ET1dfU0hPV04pOwogICAgaWYgKHdpbmRvdyA9PSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJXaW5kb3cgY291bGQgbm90IGJlIGNyZWF0ZWQhIFNETF9FcnJvcjogJXNcbiIsIFNETF9HZXRFcnJvcigpKTsKICAgICAgICBTRExfUXVpdCgpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIDMuIOC4quC4o+C5ieC4suC4hyBSZW5kZXJlciAo4Liq4Liz4Lir4Lij4Lix4Lia4Lin4Liy4LiU4Lig4Liy4LieKQogICAgcmVuZGVyZXIgPSBTRExfQ3JlYXRlUmVuZGVyZXIod2luZG93LCAtMSwgU0RMX1JFTkRFUkVSX0FDQ0VMRVJBVEVEKTsKICAgIGlmIChyZW5kZXJlciA9PSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJSZW5kZXJlciBjb3VsZCBub3QgYmUgY3JlYXRlZCEgU0RMX0Vycm9yOiAlc1xuIiwgU0RMX0dldEVycm9yKCkpOwogICAgICAgIFNETF9EZXN0cm95V2luZG93KHdpbmRvdyk7CiAgICAgICAgU0RMX1F1aXQoKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyDguKXguLnguJvguKvguKXguLHguIHguILguK3guIfguYLguJvguKPguYHguIHguKPguKEKICAgIGludCBxdWl0ID0gMDsKICAgIFNETF9FdmVudCBlOwogICAgd2hpbGUgKCFxdWl0KSB7CiAgICAgICAgLy8g4LiI4Lix4LiU4LiB4Liy4Lij4Lit4Li14LmA4Lin4LiZ4LiV4LmMICjguYDguIrguYjguJkg4LiB4LiU4Lib4Li04LiU4Lir4LiZ4LmJ4Liy4LiV4LmI4Liy4LiHKQogICAgICAgIHdoaWxlIChTRExfUG9sbEV2ZW50KCZlKSAhPSAwKSB7CiAgICAgICAgICAgIGlmIChlLnR5cGUgPT0gU0RMX1FVSVQpIHsKICAgICAgICAgICAgICAgIHF1aXQgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyA0LiDguKXguYnguLLguIfguKvguJnguYnguLLguIjguK3guJTguYnguKfguKLguKrguLXguJTguLMKICAgICAgICBTRExfU2V0UmVuZGVyRHJhd0NvbG9yKHJlbmRlcmVyLCAweDAwLCAweDAwLCAweDAwLCAweEZGKTsKICAgICAgICBTRExfUmVuZGVyQ2xlYXIocmVuZGVyZXIpOwoKICAgICAgICAvLyA1LiDguKfguLLguJTguYHguJzguJnguJfguLXguYgKICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDEwOyB5KyspIHsKICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAxMDsgeCsrKSB7CiAgICAgICAgICAgICAgICBTRExfUmVjdCBmaWxsUmVjdCA9IHsgeCAqIFRJTEVfU0laRSwgeSAqIFRJTEVfU0laRSwgVElMRV9TSVpFLCBUSUxFX1NJWkUgfTsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hcFt5XVt4XSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgMDogLy8g4Lie4Li34LmJ4LiZ4LiU4Li04LiZICjguKrguLXguYDguILguLXguKLguKcpCiAgICAgICAgICAgICAgICAgICAgICAgIFNETF9TZXRSZW5kZXJEcmF3Q29sb3IocmVuZGVyZXIsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkYpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIOC4meC5ieC4syAo4Liq4Li14Lif4LmJ4LiyKQogICAgICAgICAgICAgICAgICAgICAgICBTRExfU2V0UmVuZGVyRHJhd0NvbG9yKHJlbmRlcmVyLCAweDAwLCAweDAwLCAweEZGLCAweEZGKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAvLyDguJXguYnguJnguYTguKHguYkgKOC4quC4teC4meC5ieC4s+C4leC4suC4peC5gOC4guC5ieC4oSkKICAgICAgICAgICAgICAgICAgICAgICAgU0RMX1NldFJlbmRlckRyYXdDb2xvcihyZW5kZXJlciwgMHg2NSwgMHg0MywgMHgyMSwgMHhGRik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMzogLy8g4LiW4LiZ4LiZICjguKrguLXguYDguJfguLIpCiAgICAgICAgICAgICAgICAgICAgICAgIFNETF9TZXRSZW5kZXJEcmF3Q29sb3IocmVuZGVyZXIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4RkYpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyDguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJkgKOC4quC4teC4lOC4sykKICAgICAgICAgICAgICAgICAgICAgICAgU0RMX1NldFJlbmRlckRyYXdDb2xvcihyZW5kZXJlciwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgU0RMX1JlbmRlckZpbGxSZWN0KHJlbmRlcmVyLCAmZmlsbFJlY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyA2LiDguK3guLHguJvguYDguJTguJXguKvguJnguYnguLLguIjguK0KICAgICAgICBTRExfUmVuZGVyUHJlc2VudChyZW5kZXJlcik7CiAgICB9CgogICAgLy8gNy4g4Lil4LmJ4Liy4LiH4LiC4LmJ4Lit4Lih4Li54Lil4LmB4Lil4Liw4Lib4Li04LiUIFNETAogICAgU0RMX0Rlc3Ryb3lSZW5kZXJlcihyZW5kZXJlcik7CiAgICBTRExfRGVzdHJveVdpbmRvdyh3aW5kb3cpOwogICAgU0RMX1F1aXQoKTsKCiAgICByZXR1cm4gMDsKfQ==
#include <SDL.h>
// กำหนดขนาดหน้าจอและขนาดของแต่ละ "ช่อง" บนแผนที่
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define TILE_SIZE 32 // ขนาดของแต่ละช่องสี่เหลี่ยมในแผนที่ (เช่น 32x32 พิกเซล)
// ข้อมูลแผนที่ (ตัวอย่างง่ายๆ)
int map[10][10] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
{0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 3, 3, 3, 3, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0, 0}
};
int main(int argc, char* args[]) {
SDL_Window* window = NULL;
SDL_Renderer* renderer = NULL;
// 1. เริ่มต้น SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
return 1;
}
// 2. สร้างหน้าต่าง
window = SDL_CreateWindow("2D Map", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
SDL_Quit();
return 1;
}
// 3. สร้าง Renderer (สำหรับวาดภาพ)
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
// ลูปหลักของโปรแกรม
int quit = 0;
SDL_Event e;
while (!quit) {
// จัดการอีเวนต์ (เช่น กดปิดหน้าต่าง)
while (SDL_PollEvent(&e) != 0) {
if (e.type == SDL_QUIT) {
quit = 1;
}
}
// 4. ล้างหน้าจอด้วยสีดำ
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
SDL_RenderClear(renderer);
// 5. วาดแผนที่
for (int y = 0; y < 10; y++) {
for (int x = 0; x < 10; x++) {
SDL_Rect fillRect = { x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE };
switch (map[y][x]) {
case 0: // พื้นดิน (สีเขียว)
SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
break;
case 1: // น้ำ (สีฟ้า)
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF);
break;
case 2: // ต้นไม้ (สีน้ำตาลเข้ม)
SDL_SetRenderDrawColor(renderer, 0x65, 0x43, 0x21, 0xFF);
break;
case 3: // ถนน (สีเทา)
SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF);
break;
default: // ค่าเริ่มต้น (สีดำ)
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
break;
}
SDL_RenderFillRect(renderer, &fillRect);
}
}
// 6. อัปเดตหน้าจอ
SDL_RenderPresent(renderer);
}
// 7. ล้างข้อมูลและปิด SDL
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}