- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 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);
}