/* Agregados troncos2.1 4 de Noviembre de 1999*/ /* Se autoriza la distribucion y uso libre de este programa (freeware) */ /* Fernando Galindo Soria Cd. de Mexico */ #include #include #include #include #include #include #include void main() { int gd=DETECT,gm,x,y,x1,y1,basex,basey,radio,an,colicion=0,ncolic=0; initgraph(&gd,&gm,""); // mensaje de inicio setgraphmode(getgraphmode()); printf(" Agregados troncos2.1\n\n"); printf("programa que genera puntos y los agrega en forma aleatoria \n\n"); printf("Se autoriza la distribucion y uso libre de este programa (freeware)\n"); printf("Fernando Galindo Soria Cd. de Mexico\n"); printf("4 de Noviembre de 1999\n\n"); printf("el programa termina con cualquier tecla\n\n"); printf("oprime una tecla para continuar"); getch(); // inicia sistema cleardevice(); randomize(); basex=getmaxx()/2; basey=getmaxy()/2; radio=30; //pone el punto inicial putpixel(basex,basey,15); //genera coordenadas del siguiente punto en forma aleatoria //en la circunferencia con centro (basex,basey) //y radio "radio" an=random(360); x=basex-(radio*cos(an/57.29578)); y=basey-(radio*sin(an/57.29578)); //entra en ciclo que se termina cuando se oprima cualquier tecla while(!kbhit()){ //encuentra las siguientes coordenadas del punto aleatoriamente do {x1=x+1-random(3); y1=y+1-random(3);} while(x==x1 && y==y1); //genera los agregados, para lo cual detecta si el punto coliciona con puntos anteriores //ve si las siguientes coordenadas del punto no estan ocupadas if(getpixel(x1,y1)==0) {//si el punto actual no choca con otro punto, entra a mover //borra el punto actual putpixel(x,y,0); //cambia las coordenadas a la siguiente posicion x=x1; y=y1; colicion=0;ncolic++;} //si en las siguientes coordenadas ya existia un punto else //deja el punto donde esta (o sea agrega los puntos) //genera coordenadas del nuevo punto en forma aleatoria { an=random(360); x=basex-(radio*cos(an/57.295)); y=basey-(radio*sin(an/57.295)); colicion++;ncolic=0;} /*verifica que las coordenadas de los puntos esten dentro de una circunferencia con centro en (basex,basey) y radio radio Si un punto sale de la circunferencia lo borra y se generan las coordenadas de un nuevo punto en la circunferencia */ if(x<(basex-radio) || x>(basex+radio) || y<(basey-radio) || y>(basey+radio)){ an=random(360); x=basex-(radio*cos(an/57.29578)); y=basey-(radio*sin(an/57.29578)); } putpixel(x,y,15);//pone el punto //Las siguientes condiciones permiten regular que tan rapido crece el radio /*si los puntos colicionan en forma consecutiva mas de 30 veces o se cumple una condicion aleatoria se aumenta el radio de generacion de puntos*/ if(((random(34000)==17) && (radio30)) if(random(7)==3){ radio+=5+random(7); //si los puntos se mueven sin colicionar mas de 5000 veces se disminuye el radio if(ncolic>5000 && radio>30) { radio-=3; ncolic=0; } //si se cumple una condicion aleatoria se borra la pantalla y se inicia un nuevo agregado if(random(33000)==27) if(random(1530)==7) {sound(1350);delay(100);nosound();delay(5000); printf("radio= %d",radio);getch(); cleardevice();putpixel(basex,basey,15);x=-1; radio=30;/* printf("radio= %d",radio);*/ } } //termina getch(); closegraph(); }