home *** CD-ROM | disk | FTP | other *** search
/ Game Developers Magazine 3 / GDM003.ZIP / BOXDRAW.C next >
C/C++ Source or Header  |  1994-02-17  |  3KB  |  143 lines

  1. // BOXDRAW.C - General Box Drawing
  2.  
  3. // Written by Phil Inch for Game Developers Magazine (issue 3).
  4. // Contributed to the public domain.
  5.  
  6. // This program written and compiled with Borland C++ v3.1
  7. // Compatibility with other compilers is not guaranteed.
  8.  
  9. // Usage of this program is subject to the disclaimer printed
  10. // in the magazine.  You assume all risks associated with the use
  11. // of this program.
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <conio.h>
  16. #include <time.h>
  17. #include <dos.h>
  18. #include <mem.h>
  19. #include <string.h>
  20. #include <stdlib.h>
  21.  
  22. char far *screen=MK_FP(0xA000,0);
  23.  
  24. void    SetGraphicsMode( void ) {
  25.     asm {
  26.         mov    ax,0x13
  27.     int    0x10
  28.       }
  29. }
  30.  
  31. void    SetTextMode( void ) {
  32.     asm {
  33.       mov    ax,0x03
  34.     int    0x10;
  35.     }
  36. }
  37.  
  38. void SetPoint( int X, int Y, int C ) {
  39.   *(screen+(Y*320)+X)=C;
  40. }
  41.  
  42. void SlowBoxDraw(int x1, int y1, int x2, int y2, int color) {
  43.   int x,y;
  44.  
  45.   /* Top line */
  46.   for ( x = x1; x < x2; x++ ) SetPoint( x, y1, color );
  47.  
  48.   /* Right line */
  49.   for ( y = y1; y < y2; y++ ) SetPoint( x2, y, color );
  50.  
  51.   /* Bottom line */
  52.   for ( x = x1; x < x2; x++ ) SetPoint( x, y2, color );
  53.  
  54.   /* Left line */
  55.   for ( y = y1; y < y2; y++ ) SetPoint( x1, y, color );
  56. }
  57.  
  58. void FastBoxDraw(int x1, int y1, int x2, int y2, int color) {
  59.   int x,y;
  60.  
  61.   /* Top and bottom lines */
  62.   for ( x = x1; x < x2; x++ ) {
  63.       SetPoint( x, y1, color );
  64.       SetPoint( x, y2, color );
  65.       }
  66.  
  67.   /* Left and Right lines */
  68.   for ( y = y1; y < y2; y++ ) {
  69.       SetPoint( x1, y, color );
  70.       SetPoint( x2, y, color );
  71.       }
  72. }
  73.  
  74. void main( void ) {
  75.   char input[64];
  76.   int x1,y1,x2,y2,c,d,number_of_boxes;
  77.  
  78.     clrscr();
  79.  
  80.     printf( "*** HOLLOW BOX DRAWING DEMO ***\n\n" );
  81.     printf( "Suggestions for number of boxes:\n\n" );
  82.     printf( "486/50:  25000\n" );
  83.     printf( "486/33:  10000\n" );
  84.     printf( "486/25:   5000\n" );
  85.     printf( "386/40:    500\n" );
  86.     printf( "386/33:    200\n" );
  87.     printf( "lower :    100\n\n" );
  88.  
  89.     printf( "Enter number of boxes to draw: " );
  90.     gets( input );
  91.  
  92.     number_of_boxes = atol(input);
  93.     if ( number_of_boxes <= 0 ) {
  94.         printf( "That's not a valid number!" );
  95.         exit(1);
  96.         }
  97.  
  98.   SetGraphicsMode();
  99.  
  100.   gotoxy( 18, 12 ); printf( "Slow" ); delay(3000);
  101.   for ( d = 0; d < number_of_boxes; d++ ) {
  102.       /* Make sure x1 < x2 */
  103.       do {
  104.          x1 = rand()%320; x2 = rand()%320;
  105.       } while ( x1 >= x2 );
  106.  
  107.       /* Make sure y1 < y2 */
  108.       do {
  109.        y1 = rand()%200; y2 = rand()%200;
  110.       } while ( y1 >= y2 );
  111.  
  112.       c = rand()%255;
  113.  
  114.       SlowBoxDraw(x1, y1, x2, y2, c);
  115.       }
  116.  
  117.   SetGraphicsMode();  // quick way of clearing the graphics screen
  118.  
  119.   gotoxy( 18, 12 ); printf( "Fast" ); delay(3000);
  120.   for ( d = 0; d < number_of_boxes; d++ ) {
  121.       /* Make sure x1 < x2 */
  122.       do {
  123.          x1 = rand()%320; x2 = rand()%320;
  124.       } while ( x1 >= x2 );
  125.  
  126.       /* Make sure y1 < y2 */
  127.       do {
  128.        y1 = rand()%200; y2 = rand()%200;
  129.       } while ( y1 >= y2 );
  130.  
  131.       c = rand()%255;
  132.  
  133.       FastBoxDraw(x1, y1, x2, y2, c);
  134.       }
  135.  
  136.   SetTextMode();
  137. }
  138.  
  139.  
  140.  
  141.  
  142.  
  143.