1. C++ / Говнокод #4863

    +152

    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
    //CreatorOfBullshit говорит: следите за руками
    void __fastcall TFORM_MENU::pan_newClick(TObject *Sender) //запуск новой игры
    {
      if(fl_sound)sndPlaySound("Data\\Sounds\\push.wav",SND_ASYNC|SND_NODEFAULT);
      tm_showstarthint->Enabled=false;
      pan_cong->Visible=false;
      pan_hider->Visible=false;
      pan_new->Caption="Еще разок";//меняем надпись на кнопке
      pan_new->Hint="Начать новую сборку";
      pan_sign->Color=clBlack;
      lab_timeleft->Caption="00:00";
      lab_timeleft->Hint="...а время течёт, как вода по трубам...";
      tm_gameseconds->Enabled=false; //сначала останавливаем таймер, и после окончания прорисовки стартового поля запускаем его снова
      Label1->Visible=true;
      lab_timeleft->Visible=true;
      game_time_seconds=0;//сброс времени
      game_time_minutes=0;
    
      pb_viewport->Enabled=true;
      for(int i=0;i<128;i++)
      {
        gameplane.recreate();
        if(gameplane.getclosed()<8)
          break;
      }
      game_start_count=gameplane.getclosed();
      gameplane.drawfield();
      lab_per->Caption=IntToStr( (int)( (float)gameplane.getclosed()*100.f/(float)(game_field_width*game_field_height) ) )+"%";
      tm_gameseconds->Enabled=true;  //запускаем таймер
    }
     ...
    //CreatorOfBullshit говорит: "фрагмент из модуля с определениями для класса объекта gameplane" тот самый recreate()
    ...
    void C_GAMEFIELD::recreate()
    {
    /*
      Создаю игровое поле и расположения 
      */
      int i,j;
      for(i=0;i<width;i++)
      {
        for(j=0;j<height;j++)
        {
          pp_field[i][j]=0;
        }//for j
      }//for i
      //определение центральной точки источника воды:
      if( (width&b0001)==0 )
        start_x=(width>>1)-1;
      else
        start_x=(width>>1);
      //_  _  _  _  _  _  _  _  _  _  _  _
      if( (height&b0001)==0 )
        start_y=(height>>1)-1;
      else
        start_y=(height>>1);
      pp_field[start_x][start_y]|=wALWAYSON;//назначение стартовой метки(поднимается флаг)
      crt_crgf();
      checklinkup();
      for(i=0;i<width;i++)for(j=0;j<height;j++)
      {
        pp_mask[i][j]=pp_field[i][j];
      }//for
    }
    ...
    //CreatorOfBullshit говорит: "Теперь проследуем в crt_crgf()"
    void C_GAMEFIELD::crt_crgf() //Соединяет неправильно построеенные трубы 
    { //Проработать мне нужно алгоритм построения!!!
      unsigned __int8 i,j;
      static int brd_right,
                 brd_bottom,
                 bounds;
      crt_setcell(start_x,start_y, TRIPLE);  ///crt_setcell создает трубу, потом тут же ее поворачиваем
      //далее первый шаг построения: сначала создаются совершенно случайные незаконо-
      //мерные ветви, т.е. могут остаться НЕЗАПОЛНЕННЫЕ участки:
      unsigned __int8 startcell=pp_field[start_x][start_y], tryingcell;
      if( (startcell&UP)==UP )
        crt_connect(start_x,start_y-1,DOWN);
      if( (startcell&DOWN)==DOWN )
        crt_connect(start_x,start_y+1,UP);
      if( (startcell&LEFT)==LEFT )
        crt_connect(start_x-1,start_y,RIGHT);
      if( (startcell&RIGHT)==RIGHT )
        crt_connect(start_x+1,start_y,LEFT);
    }
    //CreatorOfBullshit говорит: "Апофеоз говнокодизма - чуть ниже:"
    inline void C_GAMEFIELD::crt_setcell(unsigned __int8 x, unsigned __int8 y, unsigned __int8 pipetype)
    {
      pp_field[x][y]|=pipetype;
      //создаем трубу по заказу и рандумно поворачиваем
      if(random(2))
        rotate_CW(x,y);
      if(random(2))
        rotate_CW(x,y);
      if(random(2))
        rotate_CW(x,y);
    }

    Говнокод написан лично моими руками на первом курсе института. Писал игру в которой нужно поворачивать трубы так чтобы потом по всему игровому полю текла вода. Писал на Буилдере 5.0. Угощайтесь.
    Алсо это не еще не все - там есть фрагмент в котором китайским методом создаются спрайты игровых текстур.
    С:8444

    Запостил: CreatorOfBullshit, 08 Декабря 2010

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

    • Забыл добавить, что вся эта генерация поля происходит 128 раз.
      Ответить
    • А вот если бы учить начинали с сей (как правильно) а не С++ (по еблански), то по крайней мере мы бы не видели Label1 )))

      а так вполне стандартный код для первого месяца обучения
      Ответить
      • ОП яростно изучал С++ чуть ранее чем на первом курсе. Все равно не спасло.
        Ответить
    • Можешь игру выложить? поиграть хочу.
      (серьезно, даже не смотря на говнокод)
      Ответить

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