1. PHP / Говнокод #16144

    +159

    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
    <?
    function flevel($exp)
    {
    include_once "config/mysql.php";
    
    	$querylevel = "SELECT maxexp FROM level";
    	$levelquery = mysql_query($querylevel);
    	while($rowslvl = mysql_fetch_row($levelquery))
    	{
    	$levelarr[] = $rowslvl[0];
    	}
    	
    	
    	
    	switch(TRUE)
        {
    		
        case ($exp <= $levelarr[0]):
        return $level = "1";
        break;
    
        case ($exp <= $levelarr[1]):
        return $level = "2";
        break;
    
        case ($exp <= $levelarr[2]):
        return $level = "3";
        break;
    
        case ($exp <= $levelarr[3]):
        return $level = "4";
        break;
    	
    	case ($exp <= $levelarr[4]):
        return $level = "5";
        break;
    	
    	case ($exp <= $levelarr[5]):
        return $level = "6";
        break;
    	
    	case ($exp <= $levelarr[6]):
        return $level = "7";
        break;
    	
    	case ($exp <= $levelarr[7]):
        return $level = "8";
        break;
    	
    	case ($exp <= $levelarr[8]):
        return $level = "9";
        break;
    	
    	case ($exp <= $levelarr[9]):
        return $level = "10";
        break;
    	
    	case ($exp <= $levelarr[10]):
        return $level = "11";
        break;
    	
    	case ($exp <= $levelarr[11]):
        return $level = "12";
        break;
    	/* ... */
    	case ($exp <= $levelarr[42]):
        return $level = "43";
        break;
    	
    	case ($exp <= $levelarr[43]):
        return $level = "44";
        break;
    	
    	case ($exp <= $levelarr[44]):
        return $level = "45";
        break;
    	
    	case ($exp <= $levelarr[45]):
        return $level = "46";
        break;
    	
    	case ($exp <= $levelarr[46]):
        return $level = "47";
        break;
    	
    	case ($exp <= $levelarr[47]):
        return $level = "48";
        break;
    	
    	case ($exp <= $levelarr[48]):
        return $level = "49";
        break;
    	
    	case ($exp > $levelarr[49]):
        return $level = "50";
        break;
        }
    }
    ?>

    Пришел в проект по созданию веб игры, смотрю организацию проекта... Жопа там, что папки, что код, что база одно и тоже, каша. Вот нашел одну забавную функцию. Она возвращает уровень персонажа судя по кол-во XP. Вместо того что бы писать 'SELECT `level` FROM `level` WHERE `minexp` <= ' . $exp . ' AND `maxexp` > ' . $exp надо было switch .. case писать. Нету слов.

    Запостил: volter9, 11 Июня 2014

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

    • Форматирование было такое же.
      Ответить
    • GayDev такой GayDev
      Ответить
    • зато заебался, как и просили
      Ответить
    • качество кода, конечно, ниже плинтуса - ни знаний php, ни понимания sql, ни вообще какого-либо мышления.
      все выглядит так, будто писано школьником в духе "я в первый раз компы вижу, но я хочу сделать крутую игру! она станет хитом!"
      Ответить
    • Так вот почему во всяких ММОРПГ лимит на 80 уровней!
      Ответить
      • там еще и количество опыта на уровне руками вбито видимо
        Ответить
      • Каждый 1-2 года добавляют по 5 case'ов в код, наверное.
        Ответить
    • > Вместо того что бы писать 'SELECT `level` FROM `level` WHERE `minexp` <= ' . $exp . ' AND `maxexp` > ' . $exp
      ну во-первых, в SQL есть between
      а во-вторых - нахера хранить по две границы в каждой строке и геморройно следить за тем, что [i] запись начинается ровно с того, чем закончилась [i-1] (тут и констрейнт то не напишешь), когда можно хранить лишь одно значение и искать
      select max(l.level) from levels l where :1 < l.high
      Ответить
      • max выберет все уровни до текущего и возьмет наибольший, а два условия сразу отсекут неподходящие варианты
        Ответить
    • > SELECT `level` FROM `level` WHERE `minexp` <= ' . $exp . ' AND `maxexp` > ' . $exp
      Товарищи `мускулисты`, объясните мне, `пожалуйста`, зачем `вы` все `идентификаторы` оборачиваете в `волосатые` `кавычки`?
      Ответить
      • Это кавказский SQL
        Ответить
      • у меня query builder такое сам делает.
        Ответить
        • `Для` генератора - `вполне` простительно. `Лишь` бы `эту` небритую `хуйню` не `приходилось` потом `читать` и `править`.

          `Но` ведь `не` весь `подобный` код `сгенерен`?
          Ответить
      • Да к так выглядит более читабильнее. К тому же, если есть имя столбца типа "text", "int" или другое зарезервированное слово (ну школьники...) придется писать:
        SELECT один, два, `text` FROM ...

        Как бы ломает читабельность. Может я не прав. Поправьте если не прав.
        Ответить
        • > выглядит более читабильнее
          Ну вот лично меня они бесят ;) Из-за них кода не видно, особенно если все это перемешано с ' и " (а в типичном унаследованном пыхокоде без подготовленных запросов они всяко перемешаны). А если еще и таблицы экранируют в стиле select `table`.`field`, `table`.`another_field` то у меня глаза истекают кровью...

          > Как бы ломает читабельность.
          Тут ты ломаешь читабельность на одном идентификаторе, а там - на всех подряд...

          К слову, вот сколько видел кода для других СУБД - почти нигде не экранируют идентификаторы. А все почему? А, походу, потому, что только мускуль считает все типы и прочую муть зарезервированными словами, и не дает их использовать без экранов в качестве имен полей и таблиц. Еще один повод его не любить.
          Ответить

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