LAB 10B - STAR MAP
Concepts
This assignment provides more experience with drawing pixels with different color intensity on a graphical window using Simple and Fast Multimedia Library (SFML). This lab will be submitted with Homework 10. As done previously, you need to download this project template that has initial code and other resource files for you to get started with SFML. If needed, see Lab 08B as a reminder of what you did with this file previously.
Instructions
Your task for this lab is to read the data file containing star information that you created from Lab 10A, and then draw a star map similar to the one shown here:
Data File
The project template contains a data directory named data.
Copy the file
ModifiedStars.txt
you created from Lab 10A
to the data directory in this project template. You will then need
to open the file data/ModifiedStars.txt
.
Your ModifiedStars.txt
file should consists of three fields:
- The first two fields are the x and y coordinates for the star. The coordinates are in SFML's coordinate system, i.e., position (0, 0) is in the upper-left corner of the picture, and the maximum x and y values are the width and height of the picture (in pixels).
- The third field is the brightness of the star, and all brightness fields should be between 0.0 and 8.0.
Drawing a Star
In your code, you'll need to draw a star. Since stars look like circle, use the CircleShape class. Each circle needs a non-zero radius; use the setRadius function to set this to 2. Then, use this star object to draw each star as you read its properties (i.e., coordinates and brightness) from the data file. For example, to set a star at position xPixel and yPixel use the following:
A star can be drawn on the window using the following function call:
Shades of Gray
One of the most common ways to represent colors is with the RGB color model. In this model, each color is represented with three numbers in the range 0 to 255 that represent the amount of red, green, and blue to include in the color. For example, (255,0,0) is the color red and (255,255,0) is the color yellow (i.e., red and green combined). Any color with the same amount of red, green, and blue is a shade of gray. We will use shades of gray to draw our stars with different brightness; thus, in this project, you should include the same amount of red, green, and blue in your colors drawn (but feel free to play with the other more colorful colors!)
SFML has a color function that allows the drawing of specific colors using the RGB model. For example, each of the following examples sets the fill color of a star to a different shade of gray:
star.setFillColor(Color(0, 0, 0));
// Dark gray
star.setFillColor(Color(64, 64, 64));
// Medium gray
star.setFillColor(Color(128, 128, 128));
// Light gray
star.setFillColor(Color(192, 192, 192));
// White
star.setFillColor(Color(255, 255, 255));
To determine the shade of gray for each star drawn in this project, you need to scale the brightness value of the star to an integer value between 0 and 255 and set the fill color using that value, as shown above. For example, if brightness is a double variable holding a star's brightness value in the range 0.0 to BRIGHTEST_STAR, to convert it to an integer value in the range 0 to 255, you would use the following:
You would then use this shadeOfGray variable to set the drawing color and fill color:
Putting It All Together
Open the file data/ModifiedStars.txt and use a while loop to read each of its lines. As you read, do the necessary color conversions for the brightness, set the star's position and color, and draw it on the graphical window.
Use the following steps as a guide:
- declare an ifstream object associated with the modified stars map data file;
- verify that you were able to open the file;
- declare all the variables you will need;
- structure your file reading loop, doing the following at each iteration:
- read all values of the current line;
- position the star object accordingly;
- determine the star's shade of gray based on its brightness;
- set the star object fill color;
- draw the star object;
- close the data file.