1. Лучший говнокод

    В номинации:
    За время:
  2. Си / Говнокод #29278

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    // Глобальные переменные
    
    uint8_t *map = NULL;
    int map_width = 0;
    int map_height = 0;
    
    bool load_level(const char *filename) {
        FILE *file = fopen(filename, "r");
        if (!file) {
            printf("Ошибка: Не удалось открыть файл %s\n", filename);
            return false;
        }
    
        char lines[512][512];
        int h = 0;
        char buffer[512];
    
        while (fgets(buffer, sizeof(buffer), file)) {
            buffer[strcspn(buffer, "\r\n")] = 0;
            if (buffer[0] == '\0' || buffer[0] == ';') continue;
    
            bool contains_map_char = false;
            for(int i=0; buffer[i]; i++) {
                if (strchr("#$@.*+ ", buffer[i])) {
                    contains_map_char = true;
                    break;
                }
            }
            
            if (contains_map_char) {
                strncpy(lines[h], buffer, 511);
                h++;
                if (h >= 512) break;
            }
            if (h > 0 && buffer[0] == '\0') break;
        }
        fclose(file);
    
        if (h == 0) return false;
    
        int w = 0;
        for (int i = 0; i < h; i++) {
            int len = strlen(lines[i]);
            if (len > w) w = len;
        }
    
        map = malloc(w * h * sizeof(uint8_t));
        map_width = w;
        map_height = h;
        memset(map, CELL_EMPTY, w * h);
    
        for (int y = 0; y < h; y++) {
            for (int x = 0; x < w; x++) {
                char c = (x < (int)strlen(lines[y])) ? lines[y][x] : ' ';
                if (c == '#') map[y * w + x] = CELL_WALL;
                else if (c == '$') map[y * w + x] = CELL_CUBE;
                else if (c == '.') map[y * w + x] = CELL_TARGET;
                else if (c == '*') map[y * w + x] = CELL_CUBE_ON_TARGET;
                else if (c == '@') { map[y * w + x] = CELL_EMPTY; playerX = x; playerY = y; }
                else if (c == '+') { map[y * w + x] = CELL_TARGET; playerX = x; playerY = y; }
                else map[y * w + x] = CELL_EMPTY;
            }
        }
        return true;
    }

    Загружалка уровня сокобана, сгенерированная нейронкой

    j123123, 24 Августа 2026

    Комментарии (10)