1. C# / Говнокод #27375

    +1

    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
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    //Генерация уровня из файла
        void mapGenerate()
        {
            
            float x = 0.72f, y = -0.72f; //Координаты игрового объекта
            byte i = 0, j = 0; //Цифровые координаты игрвоого объекта
    
            while (y >= -5.76f)
            {
                while (x <= 5.76f)
                {
                    
                        
                    if (map[i, j] % 8 == 1) //Если игровой объект - точка спавна игрока
                    {
                        player.transform.position = new Vector3(x, y, 0);
                        playerX = j;
                        playerY = i;
                    }
                    else if (map[i, j] % 8 == 5) //Если игровой объект - точка спавна врага
                    {
                        enemy.transform.position = new Vector3(x, y, 0);
                        enemyX = j;
                        enemyY = i;
                        //print("Enemy: " + enemyX + " " + enemyY);
                    } else if(map[i, j] % 8 == 6) //Если игровой объект - собираемый предмет
                    {
                        EventManager.Instance.colls[0]++; //Увеличивается количество собираемых монет на уровне
                        mapObj[i, j] = Instantiate(entities[map[i, j] % 8], new Vector3(x, y, 0), Quaternion.identity);
                    }
    
                    else if (map[i,j] % 8 != 0) { //Для остальных игровых объектов
                        mapObj[i,j] = Instantiate(entities[map[i, j] % 8], new Vector3(x, y, 0), Quaternion.identity);
                    }
                    x += 0.72f;
                    j++;
                }
                y -= 0.72f;
                x = 0.72f;
                j = 0;
                i++;
            }
        } 
    
        //Считывание данных об уровне
        void readLevelFile()
        {
            string path = "";
            FileStream fs = null;
            BinaryReader br = null;
            
            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                path = Application.dataPath;
                path = Path.Combine(path, "Levels");
                path = Path.Combine(path, levelFile);
                fs = new FileStream(path, FileMode.Open);
                br = new BinaryReader(fs);
                head = br.ReadBytes(8); //Чтение заголовка файла
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        map[i, j] = br.ReadByte(); //Чтение кода игрового объекта
                    }
                }
    
    
    
                br.Close();
                fs.Close();
            } else if (Application.platform == RuntimePlatform.Android)
            {
                
                byte[] file = null;
                
                    path = "jar:file://"+ Application.dataPath + "!/assets/Levels/"+levelFile;
                    www = new WWW(path);
                while (!www.isDone) { }
                    if (!string.IsNullOrEmpty(www.error))
                    {
                        Debug.LogError("Can't read");
                    }
                    file = www.bytes;
    
                    for (int i = 0; i < 8; i++)
                    {
                        head[i] = file[i];
                    }
                    for (int i = 0; i < 8; i++)
                    {
                        for (int j = 0; j < 8; j++)
                        {
                            map[i, j] = file[j + i * 8 + 8]; //Чтение кода игрового объекта
                        }
                    }
    
                www.Dispose();
            }

    Из кода собственной аркады на Unity 2017-ого года. Неоправданные байто*бские оптимизации, взаимодействие между модулями через десяток глобалов, магические константы не зафиксированные в именах кода, куча хардкода. И ето из модуля для генерации уровня. В модуле для управления событиями код страшнее.

    Запостил: JaneBurt, 24 Апреля 2021

    Комментарии (4) RSS

    • Во время дебага, тестирования этого г-на словил кучу гемороя. Настолько что захотел закопать проект и забыть про второй релиз.
      Ответить
    • Именно поэтому я за «Oni»‎. Уже там всё описывалось текстовыми скриптами, и потому умелые рукоделы напилили своих уровней. Другое дело что вроде как свой уровень в меню не добавишь, поэтому приходилось заменять существующие. Хз почему, я туда так глубоко не лез.
      Ответить
      • Ну, существующий framework для реализации своей игры я не находил. Да и не особо интересно уже было просто шлепать карты под существующие конструкторы. Хотелось чего-то со своей логикой
        Ответить
    • Rebuilt the city database, using city names in ASCII format instead of UTF format. That makes it easier to search for cities in some Asian countries like Turkey or Vietnam on a western keyboard
      Ответить

    Добавить комментарий