sandipan

A C code to visualize launching of a rocket in MSDOS

Sep 6th, 2018
953
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. /*
  2.  C code to display the simple motion of a rocket
  3.  Sandipan Dey
  4.  BCSE, JU, Kolkata
  5.  2002
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <conio.h>
  10. #include <graphics.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <dos.h>
  14. #define INPUTFILE "rocket.bmp" // a rocket image
  15. #define MAX 256
  16. #define MAXF 500
  17.  
  18. void Name() {
  19.    
  20.     rectangle(515,335,630,465);
  21.     outtextxy(520,340,"SANDIPAN DEY");
  22.     outtextxy(520,350,"BCSE-IV");
  23.     outtextxy(520,360,"Roll-99710");
  24.     line(515,370,630,370);
  25.     outtextxy(520,375,"Press Keys:");
  26.     line(515,388,630,388);
  27.     outtextxy(520,395,"'->'-Speed Up");
  28.     outtextxy(520,410,"'<-'- ,, Down");
  29.     outtextxy(520,425,"'S'-Sound On");
  30.     outtextxy(520,439,"'M'-Sound Off");
  31.     outtextxy(520,455,"'X'-Exit");
  32. }
  33.  
  34. void TwinkleStar(int c) {
  35.    
  36.     int x=random(300),y=random(480),c1=getmaxcolor();
  37.     putpixel(x-1,y-1,c1);
  38.     putpixel(x-1,y,c1);
  39.     putpixel(x,y,c1);
  40.     putpixel(x,y-1,c1);
  41.     x=random(400)+300;y=random(480);
  42.     putpixel(x-1,y-1,c1);
  43.     putpixel(x-1,y,c1);
  44.     putpixel(x,y,c1);
  45.     putpixel(x,y-1,c1);
  46.     for(int i=0;i<300;++i) {
  47.         x=random(300);y=random(480);
  48.         putpixel(x,y,c);
  49.         putpixel(x+1,y+1,c);
  50.         putpixel(x,y+1,c);
  51.     }
  52.     for(i=0;i<300;++i)  {
  53.         x=random(400)+300;y=random(480);
  54.         putpixel(x,y,c);
  55.         putpixel(x+1,y,c);
  56.         putpixel(x+1,y+1,c);
  57.     }
  58. }
  59.  
  60. void Meteor(int c) {
  61.    
  62.     int x=random(320),y=random(480);
  63.     for(int i=x,j=y;i>=0;--i,--j) {
  64.         putpixel(i,j,getmaxcolor());
  65.         putpixel(i-1,j-1,getmaxcolor());
  66.         putpixel(i,j-1,getmaxcolor());
  67.         putpixel(i-1,j,getmaxcolor());
  68.         /////////////////////
  69.         delay(1);
  70.         putpixel(i+1,j+1,c);
  71.         putpixel(i,j,c);
  72.         putpixel(i+1,j,c);
  73.         putpixel(i,j+1,c);
  74.     }
  75. }
  76.  
  77. void main(int argc,char* argv[]) {
  78.  
  79.     FILE* fp=NULL,*fo=NULL;
  80.     void* bmp;
  81.     int freq=0;
  82.     if((fp=fopen(INPUTFILE,"rb"))==NULL)
  83.     {printf("\n File Not Found!");fclose(fp);getch();exit(0);}    // File Not Found
  84.     long int imgoffset;
  85.     if(fgetc(fp)!='B' || fgetc(fp)!='M') {      // Check Signature
  86.  
  87.         printf("\n Not a valid BMP File!!!");
  88.         fclose(fp);
  89.         fclose(fo);
  90.         getch();
  91.         exit(0);
  92.     }
  93.     fseek(fp,10,0);         // Find Offset of Data
  94.     imgoffset=fgetc(fp)+(fgetc(fp)<<8)+(fgetc(fp)<<16)+(fgetc(fp)<<24);  // Data Offset
  95.     long int w,h;
  96.     fseek(fp,18,0);
  97.     w=fgetc(fp)+(fgetc(fp)<<8)+(fgetc(fp)<<16)+(fgetc(fp)<<24);
  98.     h=fgetc(fp)+(fgetc(fp)<<8)+(fgetc(fp)<<16)+(fgetc(fp)<<24);
  99.     int gd=VGA,gm=VGAHI,x=0,y=h,c;
  100.     struct palettetype pal;
  101.     //int gd=DETECT,gm,x=0,y=h,c;
  102.     initgraph(&gd,&gm,"");
  103.     getpalette(&pal);
  104.     for (int i=0; i<16; i++)
  105.         setrgbpalette(pal.colors[i],i*2,i*3,i*4);
  106.     fseek(fp,imgoffset,0);
  107.     while(!feof(fp)) {
  108.         c=fgetc(fp);
  109.         putpixel(x,y,c/16);
  110.         x=(x+1)%w;
  111.         if(!x){--y;}
  112.     }
  113.     fclose(fp);
  114.     c=getpixel(64,86);
  115.     Name();
  116.     outtextxy(25,25,"PRESS ANY KEY TO START");
  117.     getch();
  118.     setcolor(c);
  119.     outtextxy(25,25,"PRESS ANY KEY TO START");
  120.     setcolor(getmaxcolor());
  121.     int size=imagesize(300,315,330,439);
  122.     bmp=malloc(size);
  123.     getimage(300,315,330,439,bmp);
  124.     x=300;y=315;
  125.     setfillstyle(SOLID_FILL,c);
  126.     int c1,c2,d=10,flag=0;
  127.     randomize();
  128.     do {
  129.         if(c1==0 && c2==75){d+=10;if(freq<MAXF)++freq;}
  130.         else if(c1==0 && c2==77){d-=10;if(freq>10)--freq;}
  131.         if(d>=500)d=500;
  132.         else if(d<=1)d=1;
  133.         while(!kbhit()) {
  134.             putimage(x,y,bmp,COPY_PUT);
  135.             delay(d);
  136.             y-=1;
  137.             if(y<=-10) {
  138.                 y=350;bar(300,0,330,480);
  139.             }
  140.             TwinkleStar(c);
  141.             //if(!(y%100))Meteor(c);
  142.             if(flag) {
  143.                 if(freq<MAXF){
  144.                     ++freq;sound(freq);
  145.                 }
  146.             }
  147.             Name();
  148.         }
  149.         if ((c1=getch())==0){
  150.             c2=getch();
  151.         }
  152.         else if(c1=='s' || c1=='S')flag=1;
  153.         else if(c1=='m' || c1=='M'){
  154.             flag=0;nosound();freq=0;
  155.         }
  156.         //fflush(stdin);
  157.     }
  158.     while(c1!='x' && c1!='X');
  159.     closegraph();
  160.     free(bmp);
  161.     nosound();
  162. }
Add Comment
Please, Sign In to add comment