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:

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:

star.setPosition(Vector2f(xPixel, yPixel));

A star can be drawn on the window using the following function call:

window.draw(star);

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:

// Black
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:

int shadeOfGray = (int)( ( 255.0 * brightness ) / BRIGHTEST_STAR );

You would then use this shadeOfGray variable to set the drawing color and fill color:

star.setFillColor(Color(shadeOfGray, shadeOfGray, shadeOfGray));

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: