home *** CD-ROM | disk | FTP | other *** search
- // PLANETS.CPP--Example from chapter 3
-
- //#include <stdio.h>
- #include <graphics.h> // For graphics library functions
- #include <stdlib.h> // For exit()
- #include <iostream.h>
- #include <conio.h>
-
- int set_graph(void); // Initialize graphics
- void calc_coords(void); // Scale distances onscreen
- void draw_planets(void); // Draw and fill planet circles
-
- // Draw one planet circle
- void draw_planet(float x_pos, float radius, int color, int fill_style);
- void get_key(void); // Display text on graphics screen,
- // Wait for key
-
- // Global variables -- set by calc_coords()
- int max_x, max_y; // Maximum x- and y-coordinates
- int y_org; // Y-coordinate for all drawings
- int au1; // One astronomical unit in pixels
- // (inner planets)
-
- int au2; // One astronomical unit in pixelskeepfollowing
- // (outer planets)
- int erad; // One earth radius in pixels
-
- int main()
- {
- // Exit if not EGA or VGA
- // Find out if they have what it takes
- if (set_graph() != 1) {
- cout << "This program requires EGA or VGA graphics\n";
- exit(0);
- }
- calc_coords(); // Scale to graphics resolution in use
- draw_planets(); // Sun through Uranus
- get_key(); // Display message and wait for key press
- closegraph(); // Close graphics system
-
- return 0;
- }
-
- int set_graph(void)
- {
- int graphdriver = DETECT, graphmode, error_code;
-
- //Initialize graphics system; must be EGA or VGA
- initgraph(&graphdriver, &graphmode, ".\\bgi");
- error_code = graphresult();
- if (error_code != grOk)
- return(-1); // No graphics hardware found
- if ((graphdriver != EGA) && (graphdriver != VGA))
- {
- closegraph();
- return 0;
- }
- return(1); // Graphics OK, so return "true"
- }
-
- void calc_coords(void)
- {
- // Set global variables for drawing
- max_x = getmaxx(); // Returns maximum x-coordinate
- max_y = getmaxy(); // Returns maximum y-coordinate
- y_org = max_y / 2; // Set Y coord for all objects
- erad = max_x / 200; // One earth radius in pixels
- au1 = erad * 20; // Scale for inner planets
- au2 = erad * 10; // scale for outer planets
- }
-
- void draw_planets()
- {
-
- // Each call specifies x-coordinate in au, radius, and color
- // arc of Sun
- draw_planet(-90, 100, EGA_YELLOW, EMPTY_FILL);
- // Mercury
- draw_planet(0.4 * au1, 0.4 * erad, EGA_BROWN, LTBKSLASH_FILL);
- // Venus
- draw_planet(0.7 * au1, 1.0 * erad, EGA_WHITE, SOLID_FILL);
- // Earth
- draw_planet(1.0 * au1, 1.0 * erad, EGA_LIGHTBLUE, SOLID_FILL);
- // Mars
- draw_planet(1.5 * au1, 0.4 * erad, EGA_LIGHTRED, CLOSE_DOT_FILL);
- // Jupiter
- draw_planet(5.2 * au2, 11.2 * erad, EGA_WHITE, LINE_FILL);
- // Saturn
- draw_planet(9.5 * au2, 9.4 * erad, EGA_LIGHTGREEN, LINE_FILL);
- // Uranus
- draw_planet(19.2 * au2, 4.2 * erad, EGA_GREEN, LINE_FILL);
- }
-
- void draw_planet(float x_pos, float radius, int color, int fill_style)
- {
- setcolor (color); // This becomes drawing color
- circle(x_pos, y_org, radius); // Draw the circle
- setfillstyle(fill_style, color); // Set pattern to fill interior
- floodfill(x_pos, y_org, color); // Fill the circle
- }
-
- void get_key(void)
- {
- outtextxy(50, max_y - 20, "Press any key to exit");
- getch();
- }
-