void quant(int x, int y, int& xleft, int& xright, int& yboth, int printnum, double level, col color) { printtext("", printnum, x, y); int r = 12; float dx = 8-level; xright = x + r * dx; yboth = y + r * 2.5; xleft = x - r * dx; if (color == col::red) glColor3f(1, 0, 0); else glColor3f(0, 0, 0); mycircle(x, y, r); if (printnum != 0) { glColor3f(0, 0, 0); mycircle(xright, yboth, r); mycircle(xleft, yboth, r); myline(x + 0.8 * r, y + 0.6 * r, xright - 0.3 * r, yboth - 0.9 * r); myline(x - 0.8 * r, y + 0.6 * r, xleft + 0.3 * r, yboth - 0.9 * r); } }
void myfunc_menu() { cleardevice(); clearmouseclick(WM_RBUTTONDOWN); Point2D a, b; outtext((char*)"Click and drag to make a circle and show its radius, RIGHT CLICK TO EXIT"); do { mouseLine(a, b); int r = rnd(sqrt(pow((b.x - a.x), 2) + pow((b.y - a.y), 2))); myline(a, b); mycircle(a, r); }while(!ismouseclick(WM_RBUTTONDOWN)); }
main() { int mode=VGAHI,driver=VGA; char ch; unsigned int l; int i,gi,gj,j,flag=1;/*i,j是循环变量,flag是标记变量,-1:向x负半轴移动,+1:向x正半轴移动*/ double qx,qy,k,b=0.0,speech=0.4,x,y; double r=2.0,bx=60.0,byy=270.0; double pianx=100.0,piany=100.0,tx=20.0,ty=10.0,jx=2.0,jy=2.0; int mx=0,my=0,mb,sum;/*sum纪录砖块的数目*/ FILE * p; if((p = fopen("record.dat", "r")) == NULL) { p=fopen("record.dat","w"); fprintf(p,"0 0 0 0 0\n"); rewind(p); } fclose(p); initgraph(&driver,&mode,"C:\\tc"); setbkcolor(BLUE); Msinit(); Setmouse((int)(pianx+1+bx/2),(int)((tx+jx)*8+pianx-1-bx/2),(int)byy+piany,(int)byy+piany); star: cleardevice();/*程序重载的介入点*/ setcolor(RED); outtextxy(30,20,"^_^ Welcome to Play Hitting Brick Game! ^_^"); sum=0; qx=100.0+pianx-10;qy=180.0+pianx-10;k=0.33; setcolor(7); rectangle((int)(pianx-2),(int)(piany-2),(int)((tx+jx)*8+2+pianx),302+piany); setcolor(1); rectangle((int)(pianx-1),(int)(piany-1),(int)((tx+jx)*8+1+pianx),301+piany); /*读取盘面情况*/ p=fopen("record.dat", "r"); for(i=0;i<5;i++) fscanf(p,"%x ",&zhuan[i]); fclose(p); /*画砖块*/ for(i=0;i<5;i++) { l=1; for(j=0;j<16;j++) { if((zhuan[i]&l)==0) { Draw((int)((jx+tx)*((16*i+j)%8)+pianx+jx),(int)((jy+ty)*((int)((16*i+j)/8))+piany+jy),(int)tx,(int)ty); sum+=1; } l=l*2; } } gotoxy(5,4); printf("Press any key to start game...Q key to quit..."); ch=getch(); if(ch=='q'||ch=='Q') quitgame(); else { gotoxy(5,4); printf(" "); } for(;;) { setfillstyle(1, 0); bar(mx-bx/2,my,mx+bx/2,my+5); Msread(&mx, &my, &mb); Draw(mx-bx/2,my,bx,5); setcolor(0); mycircle(qx,qy,r,0); /*判断求是否反弹*/ if(qx-r<=pianx+1 || qx+r>=(tx+jx)*8+pianx-1) { flag=-flag; k=-k; } if(qy-r<=piany+1) k=-k; for(gi=0;gi<5;gi++) { l=1; for(gj=0;gj<16;gj++) { if((zhuan[gi]&l)==0) { j=(16*gi+gj)/8; i=(16*gi+gj)%8; x=(jx+tx)*i+jx+tx/2+pianx; y=(jy+ty)*j+jy+ty/2+piany; /*边判断1*/ if(qy>=y-ty/2 && qy<=y+ty/2 &&(pow(qx+r-x+tx/2,2)<1 || pow(qx-r-x-tx/2,2)<1)) { flag=-flag; k=-k; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) wingame(); setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)*j+piany+jy+ty); } else /*边判断2*/ if(qx>=x-tx/2 && qx<=x+tx/2 &&(pow(qy+r-y+ty/2,2)<1 || pow(qy-r-y-ty/2,2)<1)) { k=-k; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) wingame(); setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)*j+piany+jy+ty); } else /*角判断*/ if(pow(qx-x+tx/2,2)+pow(qy-y+ty/2,2)<=r*r || pow(qx-x-tx/2,2)+pow(qy-y+ty/2,2)<=r*r || pow(qx-x+tx/2,2)+pow(qy-y-ty/2,2)<=r*r || pow(qx-x-tx/2,2)+pow(qy-y-ty/2,2)<=r*r) { flag=-flag; zhuan[gi]=zhuan[gi]|l; sum-=1; if(sum==0) wingame(); setfillstyle(1, 0); bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)*j+piany+jy+ty); } } l=l*2; } } /*棍棒的反弹*/ if(qx<=mx+bx/2 && qx>=mx-bx/2 && pow(qy+r-my,2)<1) { k=-(k/pow(k*k,0.5))*(0.3*bx/(pow(pow(qx-mx,2),0.5)+0.000001)); } if((int)(qy+r)>my+0.5) { gotoxy(5,5); printf("You have lost the game!Press any key to restart..."); getch(); goto star; } b=qy-qx*k; if(flag==1) qx=qx+speech/pow(1.0+k*k,0.5); if(flag==-1) qx=qx-speech/pow(1.0+k*k,0.5); qy=qx*k+b;/*计算球心坐标*/ setcolor(14); mycircle((int)qx,(int)qy,r,14); delay(1); if(mb==1) { gotoxy(5,5); printf("You have lost the game!Press any key to restart..."); getch(); goto star; } } }
int main(void) { int f,i,j,k,c,x,y,ix,iy,displayloop; float thru,ctmp; RGB rgb; FILE *fp; srand((int)time(NULL)); usingmap=0; makingmap=1; mmx=0; mmy=0; img=(uchar **)calloc(scrhei,sizeof(uchar *)); img2=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0; y<scrhei; y++) { img[y]=(uchar *)calloc(scrwid,sizeof(uchar)); img2[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0; x<scrwid; x++) { img[y][x]=255*y/scrhei; img2[y][x]=myrnd()*255; if (x<scrwid-1 && y<scrhei-1) { pix[x][y][usingmap]=x; piy[x][y][usingmap]=y; for (i=0; i<=1; i++) for (j=0; j<=1; j++) amount[x][y][i][j][usingmap]=(float)1/4; } } } /* Originals from QB op[0] = 1; damp[0] = .999; force[0] = .005; op[1] = 1.02; damp[1] = .999; force[1] = .002; op[2] = 0; damp[2] = .999; force[2] = .002; op[3] = 1; damp[3] = .999; force[3] = .005; op[4] = 1; damp[4] = .999; force[4] = .005; op[5] = 0; damp[5] = .999; force[5] = .002; */ /* From QB later name$(1) = "Velocity" op(1) = 1: damp(1) = .999: force(1) = .002 name$(2) = "Rotation" op(2) = 0: damp(2) = .999: force(2) = .002 name$(3) = "Drip" op(3) = 1: damp(3) = .999: force(3) = .005 name$(4) = "Dribble" op(4) = 1: damp(4) = .999: force(4) = .005 name$(5) = "Slide" op(5) = 0: damp(5) = .999: force(5) = .002 name$(6) = "Accelerate" op(6) = 1: damp(6) = .999: force(6) = .005 name$(7) = "xDisplace" op(7) = 0: damp(7) = .999: force(7) = .005 name$(8) = "yDisplace" op(8) = 0: damp(8) = .999: force(8) = .005 REM 9 and 10 are options for splitting displacements (no var) name$(9) = "2d/3d split" name$(10) = "Split" */ // 0 Accelerate op[0] = 1; damp[0] = .999; force[0] = .005; // 1 Velocity op[1] = 1.02; damp[1] = .999; force[1] = .01; // 2 Rotation op[2] = 0; damp[2] = .995; force[2] = .03; // 3 y splurge op[3] = 0; damp[3] = .999; force[3] = .01; // 4 Dribble op[4] = 1; damp[4] = 0; force[4] = .01; // 5 x splurge op[5] = 0; damp[5] = .999; force[5] = .01; op[6]=2; damp[6]=.9999; force[6]=.01; op[7]=1; damp[7]=.999; force[7]=.01; for (f=0; f<fs; f++) { var[f] = op[f]; fon[f]=1; } allegrosetup(scrwid,scrhei); _farsetsel(screen->seg); starttimer(); while(!key[KEY_ESC]) { moremap(); // Animate for (x=0; x<scrwid; x++) { for (y=0; y<scrhei; y++) { c=0; for (i=0; i<=1; i++) { for (j=0; j<=1; j++) { c=c+amount[x][y][i][j][usingmap]*img[piy[x][y][usingmap]+j][pix[x][y][usingmap]+i]; } } c--; img2[y][x]=c; } } /* for (y=0;y<scrhei;y++) { for (x=0;x<scrwid;x++) { _farpokeb(screen->seg, (unsigned long)screen->line[y]+x, img2[y][x]); } }*/ for (y=0; y<scrhei; y++) { movedata(_my_ds(), img2[y], screen->seg, bmp_write_line(screen,y), scrwid); } for (f=0; f<fs; f++) { if (fon[f]) { hline(screen, scrwid/2, f*2, scrwid/2+(var[f] - op[f]) * scrwid * 4, 0); } } toff=toff-(float)1/128; for (c=0; c<=255; c++) { thru=saw((float)c/255-toff); rgb.r=huefor(thru,(float)0); rgb.g=huefor(thru,(float)1/3); rgb.b=huefor(thru,(float)2/3); set_color(c,&rgb); } imgtmp=img; img=img2; img2=imgtmp; for (i=1; i<=5; i++) { mycircle(myrnd()*scrwid,myrnd()*scrhei,2+myrnd()*8,myrnd()*255); } framedone(); } allegro_exit(); displayframespersecond(); }
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy,x=0,y=0,r=0,i=0,j=0,radius=50,c=0,s=1; struct line l[15],base; struct line a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,g1,g2,h1,h2,i1,i2,j1,j2; point center; char ch='z'; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } midx = getmaxx() / 2; midy = getmaxy() / 2; center.x=0; center.y=-midy/2; //setcolor(RED); base.p[0].x=-midx,base.p[0].y=-midy/2-14,base.p[1].x=midx,base.p[1].y=-midy/2-14; while(1) { ch=getch(); j++; if(ch=='d'||ch==77) { center.x+=10; if(center.x>getmaxx()) center.x=-getmaxx() / 2; } else if(ch=='a'||ch==75) { center.x-=10; if(center.x<-getmaxx() / 2) center.x=getmaxx() ; } else if(ch=='w'||ch==72) { center.y+=12; } else if(ch=='s'||ch==80) { if(center.y>=-midy/2) center.y=-midy/2; } else if(ch=='x') break; i++%7; setcolor(i); bar(0,0,getmaxx(),getmaxy()); a1.p[0].x=center.x-160,a1.p[0].y=center.y,a1.p[1].x=center.x-160,a1.p[1].y=center.y+15; a2.p[0].x=center.x+160,a2.p[0].y=center.y,a2.p[1].x=center.x+160,a2.p[1].y=center.y+15; b1.p[0].x=center.x-160,b1.p[0].y=center.y,b1.p[1].x=center.x-110,b1.p[1].y=center.y; b2.p[0].x=center.x+160,b2.p[0].y=center.y,b2.p[1].x=center.x+110,b2.p[1].y=center.y; c1.p[0].x=center.x-160,c1.p[0].y=center.y+15,c1.p[1].x=center.x-120,c1.p[1].y=center.y+15; c2.p[0].x=center.x+160,c2.p[0].y=center.y+15,c2.p[1].x=center.x+120,c2.p[1].y=center.y+15; d1.p[0].x=center.x-120,d1.p[0].y=center.y+15,d1.p[1].x=center.x-60,d1.p[1].y=center.y+60; d2.p[0].x=center.x+120,d2.p[0].y=center.y+15,d2.p[1].x=center.x+60,d2.p[1].y=center.y+60; e2.p[0].x=center.x-60,e2.p[0].y=center.y+60,e2.p[1].x=center.x+60,e2.p[1].y=center.y+60; e1.p[0].x=center.x-70,e1.p[0].y=center.y, e1.p[1].x=center.x+70, e1.p[1].y=center.y; f1.p[0].x=center.x, f1.p[0].y=center.y, f1.p[1].x=center.x, f1.p[1].y=center.y+60; g1.p[0].x=center.x-90,g1.p[0].y=center.y+30,g1.p[1].x=center.x-54,g1.p[1].y=center.y+57; g2.p[0].x=center.x+90,g2.p[0].y=center.y+30,g2.p[1].x=center.x+54,g2.p[1].y=center.y+57; j1.p[0].x=center.x-90,j1.p[0].y=center.y+30,j1.p[1].x=center.x-5,j1.p[1].y=center.y+30; j2.p[0].x=center.x+90,j2.p[0].y=center.y+30,j2.p[1].x=center.x+5,j2.p[1].y=center.y+30; i1.p[0].x=center.x-5,i1.p[0].y=center.y+30,i1.p[1].x=center.x-5,i1.p[1].y=center.y+57; i2.p[0].x=center.x+5,i2.p[0].y=center.y+30,i2.p[1].x=center.x+5,i2.p[1].y=center.y+57; h1.p[0].x=center.x-5,h1.p[0].y=center.y+57,h1.p[1].x=center.x-54,h1.p[1].y=center.y+57; h2.p[0].x=center.x+5,h2.p[0].y=center.y+57,h2.p[1].x=center.x+54,h2.p[1].y=center.y+57; circle(center.x-90+midx,midy-center.y,14); circle(center.x+90+midx,midy-center.y,14); mycircle(center.x-90+midx,midy-center.y,20,i); mycircle(center.x+90+midx,midy-center.y,20,i); print(base); print(a1); print(a2); print(b1); print(b2); print(c1); print(c2); print(d1); print(d2); print(e1); print(e2); print(f1); print(g1); print(j1); print(i1); print(h1); print(g2); print(j2); print(i2); print(h2); if(ch=='a'||ch==75) { line(center.x+160,midy-center.y-7,center.x+120,midy-center.y-17); line(center.x+160,midy-center.y-7,center.x+120,midy-center.y+3); } if(ch=='d'||ch==77) { line(center.x+480,midy-center.y-7,center.x+520,midy-center.y-17); line(center.x+480,midy-center.y-7,center.x+520,midy-center.y+3); } if(j%4!=0) { line(center.x-90+midx+7,midy-center.y+7,center.x-90+midx-7,midy-center.y-7); line(center.x-90+midx+7,midy-center.y-7,center.x-90+midx-7,midy-center.y+7); line(center.x+90+midx+7,midy-center.y+7,center.x+90+midx-7,midy-center.y-7); line(center.x+90+midx+7,midy-center.y-7,center.x+90+midx-7,midy-center.y+7); } else { line(center.x-90+midx+9,midy-center.y,center.x-90+midx-9,midy-center.y); line(center.x-90+midx,midy-center.y-9,center.x-90+midx,midy-center.y+9); line(center.x+90+midx+9,midy-center.y,center.x+90+midx-9,midy-center.y); line(center.x+90+midx,midy-center.y-9,center.x+90+midx,midy-center.y+9); } } getch(); closegraph(); return 0; }
int main(void) { int f,i,j,k,c,x,y,ix,iy,displayloop; int usingmap,makingmap,mmx,mmy,tmpmap,maploop; float rx,ry,nrx,nry,px,py; RGB rgb; FILE *fp; img=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0; y<scrhei; y++) { img[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0; x<scrwid; x++) { img[y][x]=myrnd()*255; } } img2=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0; y<scrhei; y++) { img2[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0; x<scrwid; x++) { img2[y][x]=myrnd()*255; } } srand((int)time(NULL)); usingmap=0; makingmap=1; mmx=0; mmy=0; /* Originals from QB op[0] = 1; damp[0] = .999; force[0] = .005; op[1] = 1.02; damp[1] = .999; force[1] = .002; op[2] = 0; damp[2] = .999; force[2] = .002; op[3] = 1; damp[3] = .999; force[3] = .005; op[4] = 1; damp[4] = .999; force[4] = .005; op[5] = 0; damp[5] = .999; force[5] = .002; */ // 0 Accelerate op[0] = 1; damp[0] = .999; force[0] = .005; // 1 Velocity op[1] = 1.02; damp[1] = .999; force[1] = .01; // 2 Rotation op[2] = 0; damp[2] = .999; force[2] = .05; // 3 Drip op[3] = 1; damp[3] = .999; force[3] = .03; // 4 Dribble op[4] = 1; damp[4] = .999; force[4] = .01; // 5 Slide op[5] = 0; damp[5] = .999; force[5] = .01; for (f=0; f<fs; f++) { var[f] = op[f]; fon[f]=1; } allegro_init (); install_keyboard (); install_timer (); set_gfx_mode (GFX_AUTODETECT, scrwid, scrhei, 0, 0); set_pallete (desktop_palette); _farsetsel(screen->seg); for (c=0; c<=255; c++) { rgb.r=saw(0,c); rgb.g=saw(256/3,c); rgb.b=saw(2*256/3,c); set_color(c,&rgb); } while(!key[KEY_ESC]) { // Generate some more of the map for (maploop=1; maploop<scrwid*scrhei/15; maploop++) { rx=(float)mmx/scrwid*2-1; ry=(float)(mmy-scrhei/2)/scrwid*2; if (fon[1]) { rx = rx / var[1]; ry = ry / var[1]; } if (fon[0]) { rx = mysgn(rx)/var[1]*mypow(myabs(rx),1/var[6]); ry = mysgn(ry)/var[1]*mypow(myabs(ry),1/var[6]); } if (fon[2]) { nrx = rx * cos(var[2]) + ry * sin(var[2]); nry = -rx * sin(var[2]) + ry * cos(var[2]); rx = nrx; ry=nry; } if (fon[3]) { ry = ry / var[3]; } if (fon[4]) { ry = ((myabs(ry) - 1) / var[4] + 1) * mysgn(ry); } if (fon[5]) { rx = rx + var[5] * mysgn(rx); } px=(rx+1)/2*scrwid; py=scrhei/2+(ry)/2*scrwid; ix=(int)px; iy=(int)py; amount[mmx][mmy][0][0][makingmap]=((float)ix+1-(float)px)*((float)(iy+1)-(float)py); amount[mmx][mmy][1][0][makingmap]=((float)px-(float)ix)*((float)(iy+1)-(float)py); amount[mmx][mmy][0][1][makingmap]=((float)ix+1-(float)px)*((float)py-(float)iy); amount[mmx][mmy][1][1][makingmap]=((float)px-(float)ix)*((float)py-(float)iy); pix[mmx][mmy][makingmap]=ix; piy[mmx][mmy][makingmap]=iy; if (ix<0 || ix>=scrwid-1 || iy<0 || iy>=scrhei-1) { pix[mmx][mmy][makingmap]=scrwid/2; piy[mmx][mmy][makingmap]=scrhei/2; for (i=0; i<=1; i++) { for (j=0; j<=1; j++) { amount[mmx][mmy][i][j][makingmap]=0; } } } mmx++; if (mmx>=scrwid) { mmx=0; mmy++; if (mmy>=scrhei) { mmy=0; tmpmap=usingmap; usingmap=makingmap; makingmap=tmpmap; for (f=0; f<fs; f++) { perturb(f); } for (i=0; i<4; i++) { f = myrnd() * fs; if (myrnd()<.8) { if (myrnd()<.5) fon[f] = 1; else fon[f]=0; } } } } } // Animate for (x=0; x<scrwid; x++) { for (y=0; y<scrhei; y++) { c=0; for (i=0; i<=1; i++) { for (j=0; j<=1; j++) { c=c+amount[x][y][i][j][usingmap]*img[piy[x][y][usingmap]+j][pix[x][y][usingmap]+i]; } } c--; img2[y][x]=c; } } /* for (y=0;y<scrhei;y++) { for (x=0;x<scrwid;x++) { _farpokeb(screen->seg, (unsigned long)screen->line[y]+x, img2[y][x]); } }*/ for (y=0; y<scrhei; y++) { movedata(_my_ds(), img2[y], screen->seg, bmp_write_line(screen,y), scrwid); } for (f=0; f<fs; f++) { if (fon[f]) { hline(screen, scrwid/2, f*2, scrwid/2+(var[f] - op[f]) * scrwid * 4, 0); } } imgtmp=img; img=img2; img2=imgtmp; for (i=1; i<=5; i++) { mycircle(myrnd()*scrwid,myrnd()*scrhei,2+myrnd()*8,myrnd()*255); } } }
int main(void) { int f,i,j,k,c,x,y,ix,iy,displayloop; int usingmap,makingmap,mmx,mmy,tmpmap,maploop; float rx,ry,nrx,nry,px,py; RGB rgb; FILE *fp; img=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0; y<scrhei; y++) { img[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0; x<scrwid; x++) { img[y][x]=myrnd()*255; } } img2=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0; y<scrhei; y++) { img2[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0; x<scrwid; x++) { img2[y][x]=myrnd()*255; } } srand((int)time(NULL)); usingmap=0; makingmap=1; mmx=0; mmy=0; /* Originals from QB op[0] = 1; damp[0] = .999; force[0] = .005; op[1] = 1.02; damp[1] = .999; force[1] = .002; op[2] = 0; damp[2] = .999; force[2] = .002; op[3] = 1; damp[3] = .999; force[3] = .005; op[4] = 1; damp[4] = .999; force[4] = .005; op[5] = 0; damp[5] = .999; force[5] = .002; */ // 0 Accelerate op[0] = 1; damp[0] = .999; force[0] = .005; // 1 Velocity op[1] = 1.02; damp[1] = .999; force[1] = .01; // 2 Rotation op[2] = 0; damp[2] = .995; force[2] = .03; // 3 y splurge op[3] = 0; damp[3] = .999; force[3] = .01; // 4 Dribble op[4] = 1; damp[4] = 0; force[4] = .01; // 5 x splurge op[5] = 0; damp[5] = .999; force[5] = .01; op[6]=2; damp[6]=.9999; force[6]=.01; op[7]=1; damp[7]=.999; force[7]=.01; for (f=0; f<fs; f++) { var[f] = op[f]; fon[f]=1; } allegrosetup(scrwid,scrhei); _farsetsel(screen->seg); for (c=0; c<=255; c++) { if (c<128) { rgb.r=c*63/127; rgb.g=0; rgb.b=0; } else { rgb.r=127; rgb.g=(c-128)*63/127; rgb.b=rgb.g; } set_color(c,&rgb); } starttimer(); while(!key[KEY_ESC]) { // Animate for (x=0; x<scrwid; x++) { for (y=0; y<scrhei; y++) { img2[y][x]=lifefrom(x,y); } } for (y=0; y<scrhei; y++) { movedata(_my_ds(), img2[y], screen->seg, bmp_write_line(screen,y), scrwid); } imgtmp=img; img=img2; img2=imgtmp; for (i=1; i<=1; i++) { mycircle(myrnd()*scrwid,myrnd()*scrhei,2+myrnd()*40,myrnd()*255); } framedone(); } allegro_exit(); displayframespersecond(); }
void skipping(int x) { cleardevice(); std::vector<Point2D> neck, body, h1, h2, a1, a2, l1, l2, f1, f2; neck.push_back(Point2D(x-5, 120)); neck.push_back(Point2D(x-5, 130)); neck.push_back(Point2D(x+5, 130)); neck.push_back(Point2D(x+5, 120)); body.push_back(Point2D(x-40, 130)); body.push_back(Point2D(x+40, 130)); body.push_back(Point2D(x+40, 200)); body.push_back(Point2D(x-40, 200)); h1.push_back(Point2D(x-40, 130)); h1.push_back(Point2D(x-40, 140)); h1.push_back(Point2D(x-55, 165)); h1.push_back(Point2D(x-55, 155)); h2.push_back(Point2D(x+40, 130)); h2.push_back(Point2D(x+40, 140)); h2.push_back(Point2D(x+55, 165)); h2.push_back(Point2D(x+55, 155)); a1.push_back(Point2D(x-75, 140)); a1.push_back(Point2D(x-75, 150)); a1.push_back(Point2D(x-55, 165)); a1.push_back(Point2D(x-55, 155)); a2.push_back(Point2D(x+75, 140)); a2.push_back(Point2D(x+75, 150)); a2.push_back(Point2D(x+55, 165)); a2.push_back(Point2D(x+55, 155)); l1.push_back(Point2D(x-30, 200)); l1.push_back(Point2D(x-30, 260)); l1.push_back(Point2D(x-20, 260)); l1.push_back(Point2D(x-20, 200)); l2.push_back(Point2D(x+30, 200)); l2.push_back(Point2D(x+30, 260)); l2.push_back(Point2D(x+20, 260)); l2.push_back(Point2D(x+20, 200)); f1.push_back(Point2D(x-32, 260)); f1.push_back(Point2D(x-32, 265)); f1.push_back(Point2D(x-18, 265)); f1.push_back(Point2D(x-18, 260)); f2.push_back(Point2D(x+32, 260)); f2.push_back(Point2D(x+32, 265)); f2.push_back(Point2D(x+18, 265)); f2.push_back(Point2D(x+18, 260)); mycircle(x, 100, 20); mypoly(body); mypoly(neck); mypoly(h1); mypoly(h2); mypoly(a1); mypoly(a2); mypoly(l1); mypoly(l2); mypoly(f1); mypoly(f2); float y1 = a1[0].y, d = 30/50; setfillstyle(SOLID_FILL, RED); floodfill(x, 150, WHITE); int k = 500; bool inc = true; do { setcolor(YELLOW); hermite(a1[0].x, a1[0].y + 5, a2[0].x, a1[0].y + 5, 5, -k, -5, k); setcolor(WHITE); circle(x, 100, 20); mypoly(body); mypoly(neck); mypoly(h1); mypoly(h2); mypoly(a1); mypoly(a2); mypoly(l1); mypoly(l2); mypoly(f1); mypoly(f2); delay(100); setcolor(BLACK); hermite(a1[0].x, a1[0].y + 5, a2[0].x, a1[0].y + 5, 5, -k, -5, k); if(k <= -500) inc = false; if(inc) { k -= 10; y1 += d; a1[0].y = rnd(y1) ; a1[1].y = rnd(y1) + 10; a2[0].y = rnd(y1) ; a2[1].y = rnd(y1) + 10; } else { k += 10; y1 -= d; a1[0].y = rnd(y1) ; a1[1].y = rnd(y1) + 10; a2[0].y = rnd(y1) ; a2[1].y = rnd(y1) + 10; } }while(k != 500); getch(); }
int main(void) { int f,i,j,k,c,x,y,ix,iy,displayloop; int usingmap,makingmap,mmx,mmy,tmpmap,maploop; float rx,ry,nrx,nry,px,py,thru,ctmp; RGB rgb; FILE *fp; srand((int)time(NULL)); usingmap=0; makingmap=1; mmx=0; mmy=0; img=(uchar **)calloc(scrhei,sizeof(uchar *)); img2=(uchar **)calloc(scrhei,sizeof(uchar *)); for (y=0;y<scrhei;y++) { img[y]=(uchar *)calloc(scrwid,sizeof(uchar)); img2[y]=(uchar *)calloc(scrwid,sizeof(uchar)); for (x=0;x<scrwid;x++) { img[y][x]=255*y/scrhei; img2[y][x]=myrnd()*255; if (x<scrwid-1 && y<scrhei-1) { pix[x][y][usingmap]=x; piy[x][y][usingmap]=y; for (i=0;i<=1;i++) for (j=0;j<=1;j++) amount[x][y][i][j][usingmap]=(float)1/4; } } } /* Originals from QB op[0] = 1; damp[0] = .999; force[0] = .005; op[1] = 1.02; damp[1] = .999; force[1] = .002; op[2] = 0; damp[2] = .999; force[2] = .002; op[3] = 1; damp[3] = .999; force[3] = .005; op[4] = 1; damp[4] = .999; force[4] = .005; op[5] = 0; damp[5] = .999; force[5] = .002; */ // 0 Accelerate op[0] = 1; damp[0] = .999; force[0] = .005; // 1 Velocity op[1] = 1.02; damp[1] = .999; force[1] = .01; // 2 Rotation op[2] = 0; damp[2] = .995; force[2] = .03; // 3 y splurge op[3] = 0; damp[3] = .999; force[3] = .01; // 4 Dribble op[4] = 1; damp[4] = 0; force[4] = .01; // 5 x splurge op[5] = 0; damp[5] = .999; force[5] = .01; op[6]=2;damp[6]=.9999;force[6]=.01; op[7]=1;damp[7]=.999;force[7]=.01; for (f=0;f<fs;f++) { var[f] = op[f]; fon[f]=1; } allegrosetup(scrwid,scrhei); _farsetsel(screen->seg); starttimer(); while(!key[KEY_ESC]) { // Generate some more of the map for (maploop=1;maploop<scrwid*scrhei/20;maploop++) { rx=(float)mmx/scrwid*2-1; ry=(float)(mmy-scrhei/2)/scrwid*2; if (fon[0]) { rx = mysgn(rx)/var[7]*mypow(myabs(rx),1/var[0]); ry = mysgn(ry)/var[7]*mypow(myabs(ry),1/var[0]); } if (fon[1]) { rx = rx / var[1]; ry = ry / var[1]; } if (fon[2]) { nrx = rx * cos(var[2]) + ry * sin(var[2]); nry = -rx * sin(var[2]) + ry * cos(var[2]); rx = nrx; ry=nry; } if (fon[3]) { ry = ry - mysgn(ry) * sin(var[6]*pi*myabs(ry)) * var[3]; } if (fon[4]) { ry = ((myabs(ry) - 1) / var[4] + 1) * mysgn(ry); } if (fon[5]) { rx = rx - mysgn(rx) * sin(var[6]*pi*myabs(rx)) * var[5]; } px=(rx+1)/2*scrwid; py=scrhei/2+(ry)/2*scrwid; ix=(int)px; iy=(int)py; if (ix<0 || ix>=scrwid-1 || iy<0 || iy>=scrhei-1) { ix=px; iy=py; } amount[mmx][mmy][0][0][makingmap]=((float)ix+1-(float)px)*((float)(iy+1)-(float)py); amount[mmx][mmy][1][0][makingmap]=((float)px-(float)ix)*((float)(iy+1)-(float)py); amount[mmx][mmy][0][1][makingmap]=((float)ix+1-(float)px)*((float)py-(float)iy); amount[mmx][mmy][1][1][makingmap]=((float)px-(float)ix)*((float)py-(float)iy); pix[mmx][mmy][makingmap]=ix; piy[mmx][mmy][makingmap]=iy; if (ix<0 || ix>=scrwid-1 || iy<0 || iy>=scrhei-1) { pix[mmx][mmy][makingmap]=scrwid/2; piy[mmx][mmy][makingmap]=scrhei/2; for (i=0;i<=1;i++) { for (j=0;j<=1;j++) { amount[mmx][mmy][i][j][makingmap]=0; } } } mmx++; if (mmx>=scrwid) { mmx=0; mmy++; if (mmy>=scrhei) { mmy=0; tmpmap=usingmap; usingmap=makingmap; makingmap=tmpmap; for (f=0;f<fs;f++) { perturb(f); } } } } // Animate for (x=0; x<scrwid; x++) { for (y=0; y<scrhei; y++) { c=0; for (i=0;i<=1;i++) { for (j=0;j<=1;j++) { c=c+amount[x][y][i][j][usingmap]*img[piy[x][y][usingmap]+j][pix[x][y][usingmap]+i]; } } c--; img2[y][x]=c; } } /* for (y=0;y<scrhei;y++) { for (x=0;x<scrwid;x++) { _farpokeb(screen->seg, (unsigned long)screen->line[y]+x, img2[y][x]); } }*/ for (y=0; y<scrhei; y++) { movedata(_my_ds(), img2[y], screen->seg, bmp_write_line(screen,y), scrwid); } for (f=0;f<fs;f++) { if (fon[f]) { hline(screen, scrwid/2, f*2, scrwid/2+(var[f] - op[f]) * scrwid * 4, 0); } } toff=toff-(float)1/128; for (c=0;c<=255;c++) { thru=saw((float)c/255-toff); rgb.r=huefor(thru,(float)0); rgb.g=huefor(thru,(float)1/3); rgb.b=huefor(thru,(float)2/3); set_color(c,&rgb); } imgtmp=img; img=img2; img2=imgtmp; for (i=1;i<=5;i++) { mycircle(myrnd()*scrwid,myrnd()*scrhei,2+myrnd()*8,myrnd()*255); } framedone(); } allegro_exit(); displayframespersecond(); }