/*paisajes*/ /*1.- version de listo, manejo de colores mediante registros del dac 11/iv/96 */ /*Fernando Galindo Soria*/ #include #include #include #include #include #include #include #include int dibuja(int,int,int,int,int); int dibuja1(int,int,double,int,int); void estrella(int,int,int,int,int); void mensaje(void); void rota(void); void rota1(void); void escrcolordac(int,int,int,int); void listo(void); int w0,w1,w2,color1,direcc=0,direccion=1,basearb,ibasearb,car54; color[][16]={{2,3,15,2,3,2,3,3,2,10,2,10,2,2,4,4}, {15,15,15,15,15,14,10,2,2,2,2,2,2,4,4,4}, {7,8,-1,-1,-1,2,10,7,7,8,7,8,6,8,-1,-1}, {15,15,6,15,8,10,7,10,2,8,8,7,8,8,6}, {3,6,15,6,15,4,15,7,15,7,15,7,15,-1,-1,-1}, {-1,-1,-1,-1,-1,2,10,15,15,15,-1,-1,-1,-1-1,-1}, {10,14,10,2,2,10,2,6,15,15,15,15,15,15,15,15}}, lran,cran,co,car; double l0,l1,l2; struct palettetype paleta; void main() { int gd=DETECT,gm,i,ncolor,ti_ar,ne=0,elijeco,ine,basex,indco; double nc=0; time_t ti; registerbgidriver(EGAVGA_driver); registerbgifont(sansserif_font); registerbgifont(small_font); initgraph(&gd,&gm,""); // setviewport(0, 150, getmaxx(), getmaxy()-150, -50); getpalette(&paleta); randomize(); i=rand(); i=random(random(397)); i=rand(); i=rand(); srand((unsigned) time(&ti)); randomize(); mensaje(); basearb=random(30); ibasearb=-5+random(11); while (car!=27) { listo(); if((ne==0)||(random(97)==2)) { listo(); if(car!=44){sound(557); delay(200); nosound();} delay(2000); cleardevice(); ne=-random(150); nc=0; setcolor(random(16)+1); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); if(random(2)==1) /*sol*/{ color1=3; w0=random(57)+1; estrella(random(getmaxx()),random(100),1,27,47);} else { while((random(300)!=137)&&(kbhit()==0))//estrellas putpixel(random(getmaxx()),random(280+ne),15);} } else if(random(2)==1) { indco=random(3); while((random(150)!=127)&&(kbhit()==0)) { listo(); /*piedras*/ co=3; basex=random(getmaxx()); w0=25+random(27); w1=65+random(36); w2=87+random(36); l0=1.67;l1=1.7;l2=1.67; dibuja(basex+random(30),295+random(79)+ne,random(19)+6,147,15-indco); } } while((random(5)!=3)&&(kbhit()==0))//nube { co=4; listo(); w0=70+random(27); w1=95+random(37); w2=127+random(37); l0=1.45;l1=1.45;l2=1.45; lran=random(10); cran=random(10); dibuja(random(getmaxx()),random(99)+ne/10,random(27)+10,73,15); } /* if(random(4)==2){ while((random(100)<25)&&(kbhit()==0)) {nc+=0.30;//monta¤as co=6; w0=-6-random(2); w1=-1+random(3); w2=6+random(2); l0=1.49,l1=1.865;l2=1.75; lran=random(10); cran=random(10);i=20+(int)(nc); dibuja1(random(getmaxx()-80)+40,80+random(9)+ne,1,270,15); } while((random(100)<25)&&(kbhit()==0)) {nc+=0.30;//monta¤as blancas co=5; w0=-5-random(3); w1=3+random(4); w2=4+random(3); l0=1.19,l1=2.2;l2=1.21; lran=random(10); cran=random(10);i=20+(int)(nc); dibuja(random(getmaxx()),-57+random(9)+ne,random(i)+63,270,15); } } */ /* while((random(3)!=0)&&(kbhit()==0)) {nc+=0.30;//juegos pirotecnicos y estrellas co=2; w0=-10-random(3); w1=3+random(4); w2=10+random(3); l0=2;l1=2.5;l2=1.9; lran=random(10); cran=random(10);i=20+(int)(nc); dibuja1(random(getmaxx()),300,1,270,15); } */ elijeco=random(2); while((random(20)!=17)&&(kbhit()==0)) { listo(); co=10+random(7); l0=1.2; l1=1.55; l2=1.8; if(co==10)/*monta¤a*/{ color1=1; w0=7; w1=172; w2=1 ; if(random(2)==1) co=2; dibuja(random(getmaxx()),275+random(69)+ne,10+random(53),167,15);} listo(); if(co==11)/*monta¤a*/{ color1=1; w0=6; w1=172; w2=186; if(elijeco==0)color1=15; dibuja(random(getmaxx()),279+random(69)+ne,30+random(33),-8,15);} listo(); if(co==15)/*monta¤a*/{ color1=15; w0=6; w1=172; w2=186;if(elijeco==1) co=2; dibuja(random(getmaxx()),279+random(69)+ne,20+random(43),-8,15);} listo(); if(co==12)/*monta¤a*/{ color1=15; w0=6; w1=172; w2=1 ;w0=172; if(elijeco==1) if(random(2)==1)co=2; else color1=1; dibuja(random(getmaxx()),279+random(69)+ne,10+random(53),11,15);} listo(); if(co==13)/*monta¤a*/{ color1=15; w0=6; w1=172; w2=1 ;w0=173; if(elijeco==1) if(random(2)==1)co=2; else color1=1; dibuja(random(getmaxx()),279+random(69)+ne,20+random(43),11,15);} listo(); co=2; w0=70+random(27); w1=95+random(36); w2=127+random(36); l0=1.75;l1=1.75;l2=1.45; lran=random(10); cran=random(10); dibuja(random(getmaxx()),265+random(79)+ne,random(21)+10,127,15); dibuja(random(getmaxx()),295+random(49)+ne,random(19)+10,127,15); } ti_ar=random(2); nc=0; ine=0; if(basearb>45)ibasearb=-random(6)-1; if(basearb<10)ibasearb=random(6)+1; basearb+=ibasearb; while((random(17-basearb/7)!=5)&&(ine<35)&&(kbhit()==0)) { nc+=0.30;ine++; if((ti_ar==0)&&(basearb<35)) //arbol { co=0; w0=-10-random(23); w1=0; w2=10+random(23); l0=1.41,l1=1.39;l2=1.41; lran=random(10); cran=random(10);i=10+(int)(nc); dibuja(random(getmaxx()),265+random(79)+ne,random(i)+basearb,90,15); } else { co=1; //pino w0=-random(39); w1=0; w2=-w0; l0=1.7;l1=1.2;l2=1.7; lran=random(10); cran=random(10);i=10+(int)(nc); dibuja(random(getmaxx()),265+random(79)+ne,random(i)+basearb,90,15); } } //if(co==5)/*nube */{ color1=2; w0=238; w1=273; w2=144; dibuja(100,80,37,-72,9);} //if(co==6)/*nube */{ color1=2; w0=188; w1=243; w2=144; dibuja(340,110,59,-72,9);} //if(co==7)/*nube */{ color1=2; w0=238; w1=273; w2=125; dibuja(550,80,23,-23,7);} //if(co==8)/*nube */{ color1=2; w0=287; w1=103; w2=144; dibuja(190,60,19,-92,9);} //if (co==16)/*monta¤a*/{ color1=15; w0=6; w1=172; w2=186; if(elijeco==1)color1=1; // dibuja(425,450,63,173,7);} //if(co==14)/*arboles*/{ color1=2; w0=8; w1=72; w2=17; dibuja(225,415,43,-17,7);} //if(co==15)/*arboles*/{ color1=2; w0=-12; w1=352; w2=97; dibuja(340,415,43,15,7);} //if(co==16)/*arboles*/{ color1=2; w0=8; w1=72; w2=351; dibuja(443,440,43,0,7);} ne+=38+random(5); if(ne>=(getmaxy()-400)){ ne=getmaxy()-400; printf("\n\n"); indco=random(3); } co=-1; } closegraph(); } void listo(void) { int ic; if(kbhit()!=0) car=getch(); if(car==27){closegraph();exit(0);} if(car==54){ if(car54==0) for(ic=1;ic<=63;ic++)escrcolordac(ic, rand(),rand(),rand());} else if(car==55)escrcolordac(0,rand(),rand(),rand()); else if(car==56)escrcolordac(0,0,0,0); else if(car==57)setallpalette(&paleta); /* if(vp[carpro]==1)fin=27; else if(vp[carpro]==2){drec=carpro;carpro=0;} else if(carpro!=0){ if(numpro=MAXPRO)inpro=0;procesos[inpro++]=carpro;carpro=0;numpro++;} else {sound(850);delay(100);nosound();} } */ if(car==54) car54=(car54+1)%85; else {car=128; car54=0;} } void mensaje() { setcolor(random(15)+1); settextstyle(SANS_SERIF_FONT,HORIZ_DIR,7); outtextxy(12,30," P A I S A J E S"); settextstyle(SANS_SERIF_FONT,HORIZ_DIR,4); setcolor(random(15)+1); outtextxy(150,100,"Dibuja Paisajes"); setcolor(random(15)+1); settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2); outtextxy(50,200,"by fractalstic"); settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2); outtextxy(70,230,"Mexican Curious Technology"); outtextxy(70,320,"oprima la tecla ',' para quitar sonido "); outtextxy(70,350,"otra tecla para continuar"); setcolor(random(15)+1); settextstyle(SMALL_FONT,HORIZ_DIR,4); outtextxy(80,400,"Fernando Galindo Soria Cd. de Mexico 11/iv/96"); outtextxy(80,410,"Se autoriza la distribucion y uso libre de este sistema (freeware)"); car=getch(); } void rota() { if(random(20)==5)direccion=-direccion; direcc+=direccion; if(direcc>79)direcc=0; if(direcc<0)direcc=79; outport(0x3d4,13); outport(0x3d5,direcc); } void rota1() { /* if(random(20)==5)direccion=-direccion; direcc+=direccion; if(direcc>79)direcc=0; if(direcc<0)direcc=79; outport(0x3d4,13); outport(0x3d5,1);*/ outport(0x3d4,12); outport(0x3d5,1); } int dibuja(int x0,int y0,int l,int an,int ind) { int x1,y1,colorin; listo(); if(car==27)exit(1); if (l > 1) { if(co<7) colorin=color[co][ind]; else { colorin=color1; } if(x0>getmaxx())x0=0; if(x0<0)x0=getmaxx(); x1=x0-(l*cos(an/57.29578)); y1=y0-(l*sin(an/57.29578)); // if(random(10)!=3) if(colorin>=0) { setcolor(colorin); line(x0,y0,x1,y1); } else moveto(x1,y1); // if((cran>=6)||(l<=10)) // circle(x1,y1,l); dibuja(x1,y1,l/l0,an+w0,ind-1); dibuja(x1,y1,l/l1,an+w1,ind-1); dibuja(x1,y1,l/l2,an+w2,ind-1); if(random(8000)==17)rota(); } } int dibuja1(int x0,int y0,double l,int an,int ind) { int x1,y1,colorin; if(!kbhit)exit(1); if (l < 79) { if(co<7) colorin=color[co][ind]; else { colorin=color1; } if(x0>getmaxx())x0=0; if(x0<0)x0=getmaxx(); x1=x0-(l*cos(an/57.29578)); y1=y0-(l*sin(an/57.29578)); // if(random(10)!=3) if(colorin>=0) { setcolor(colorin); line(x0,y0,x1,y1); } else moveto(x1,y1); // if((cran>=6)||(l<=10)) // circle(x1,y1,l); dibuja1(x1,y1,l*l0,an+w0,ind-1); dibuja1(x1,y1,l*l1,an+w1,ind-1); dibuja1(x1,y1,l*l2,an+w2,ind-1); if(random(8000)==17)rota(); } } void estrella(int x0,int y0,int l,int an,int ind) { int x1,y1; if (ind > 0) { // setcolor(ind+color); x1=x0-(l*cos(an/57.29578)); y1=y0-(l*sin(an/57.29578)); line(x0,y0,x1,y1); estrella(x0,y0,l+1,an+w0,ind-1); } } void escrcolordac(int color,int r,int g,int b) { outportb(0x3C8,color);/*numero de color a modificar -(apunta automaticamente al siguiente color cuando termina de cargar los rgb)*/ outportb(0x3C9,r); outportb(0x3C9,g); outportb(0x3C9,b); }