fork download
  1. #include <SDL.h>
  2.  
  3. // กำหนดขนาดหน้าจอและขนาดของแต่ละ "ช่อง" บนแผนที่
  4. #define SCREEN_WIDTH 800
  5. #define SCREEN_HEIGHT 600
  6. #define TILE_SIZE 32 // ขนาดของแต่ละช่องสี่เหลี่ยมในแผนที่ (เช่น 32x32 พิกเซล)
  7.  
  8. // ข้อมูลแผนที่ (ตัวอย่างง่ายๆ)
  9. int map[10][10] = {
  10. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  11. {0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
  12. {0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
  13. {0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
  14. {0, 0, 0, 0, 0, 0, 2, 2, 0, 0},
  15. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  16. {0, 0, 3, 3, 3, 3, 3, 0, 0, 0},
  17. {0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
  18. {0, 0, 0, 0, 0, 0, 3, 0, 0, 0},
  19. {0, 0, 0, 0, 0, 0, 3, 0, 0, 0}
  20. };
  21.  
  22. int main(int argc, char* args[]) {
  23. SDL_Window* window = NULL;
  24. SDL_Renderer* renderer = NULL;
  25.  
  26. // 1. เริ่มต้น SDL
  27. if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  28. printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
  29. return 1;
  30. }
  31.  
  32. // 2. สร้างหน้าต่าง
  33. window = SDL_CreateWindow("2D Map", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
  34. if (window == NULL) {
  35. printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
  36. SDL_Quit();
  37. return 1;
  38. }
  39.  
  40. // 3. สร้าง Renderer (สำหรับวาดภาพ)
  41. renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  42. if (renderer == NULL) {
  43. printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
  44. SDL_DestroyWindow(window);
  45. SDL_Quit();
  46. return 1;
  47. }
  48.  
  49. // ลูปหลักของโปรแกรม
  50. int quit = 0;
  51. SDL_Event e;
  52. while (!quit) {
  53. // จัดการอีเวนต์ (เช่น กดปิดหน้าต่าง)
  54. while (SDL_PollEvent(&e) != 0) {
  55. if (e.type == SDL_QUIT) {
  56. quit = 1;
  57. }
  58. }
  59.  
  60. // 4. ล้างหน้าจอด้วยสีดำ
  61. SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
  62. SDL_RenderClear(renderer);
  63.  
  64. // 5. วาดแผนที่
  65. for (int y = 0; y < 10; y++) {
  66. for (int x = 0; x < 10; x++) {
  67. SDL_Rect fillRect = { x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE };
  68.  
  69. switch (map[y][x]) {
  70. case 0: // พื้นดิน (สีเขียว)
  71. SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
  72. break;
  73. case 1: // น้ำ (สีฟ้า)
  74. SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF);
  75. break;
  76. case 2: // ต้นไม้ (สีน้ำตาลเข้ม)
  77. SDL_SetRenderDrawColor(renderer, 0x65, 0x43, 0x21, 0xFF);
  78. break;
  79. case 3: // ถนน (สีเทา)
  80. SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF);
  81. break;
  82. default: // ค่าเริ่มต้น (สีดำ)
  83. SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
  84. break;
  85. }
  86. SDL_RenderFillRect(renderer, &fillRect);
  87. }
  88. }
  89.  
  90. // 6. อัปเดตหน้าจอ
  91. SDL_RenderPresent(renderer);
  92. }
  93.  
  94. // 7. ล้างข้อมูลและปิด SDL
  95. SDL_DestroyRenderer(renderer);
  96. SDL_DestroyWindow(window);
  97. SDL_Quit();
  98.  
  99. return 0;
  100. }
Success #stdin #stdout 0.03s 25464KB
stdin
Standard input is empty
stdout
#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;
}