Welcome to the CSIG, a Special Interest Group of the ACGNJ. The subject for this month is a discussion about Windows Sound and Graphics using the latest Microsoft C++ compiler.
First, let me welcome everyone back from their Summer activities.
The subject for this month is a graphical game program that is programmed like the one on "Pick Up Sticks" presented January, 2003. (See code archive.) However, the code uses the latest C++ compiler in Microsoft's Visual Studio 2005 so there are many changes. The program may also be compiled using the free C++ Express compiler.
This game is suitable for small children ages 1 to 4 years. When the game starts, 35 colored balloons are presented on the screen. The target balloon has an X in the center. Pressing the space bar will explode the indicated balloon with a "pop" sound. When all the balloons are exploded, a smiley face appears with a different sound effect.
This is an exciting time for the C Language programming since Microsoft now has 4 different language compilers: C++, C++ Express, C-Sharp, and C-Sharp Express. These are all capable of creating Windows (tm) programs and the "Express" versions are free ! Additionally, Borland has just announced that it also has four new programs that are also available in free versions. These are Turbo C++, Turbo C-Sharp, Turbo Delphi and Turbo Delpi for .NET. You may also want to check with Intel and others for their generally free evaluation versions. Here a link with many compilers: http://www.willus.com/ccomp.shtml
| MICROSOFT |
| BORLAND |
| INTEL |
| BLOODSHED |
| GCC, the GNU Compiler Collection - GNU Project |
| Digital Mars C, C++ and D Compilers |
| Others |
The beginning of the evening (starting at 7:30pm) will be a RANDOM ACCESS discussion. The main presentation will discuss the program.
Our download site has code and programs from most of our meetings. ( Source Code Files )
Sample Code
===========
// Paint the screen. Paint the screen. Paint the screen.
private: System::Void Form1_OnPaint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
int topBalloon = -1;
Rectangle windowRect = ClientRectangle;
if (firstime)
{
Form1_InitBalloonArray(windowRect);
firstime = false;
}
Graphics ^g = e->Graphics;
for (int i = 0; i < MAXBALLOONS; i++)
{
if (pBaloonCenter[i]->X < 0) continue;
SolidBrush^ balloonBrush = gcnew SolidBrush(*pBaloonColor[i]);
g->FillEllipse(balloonBrush,
(*pBaloonCenter[i]).X - *pBalloonRadius[i],
(*pBaloonCenter[i]).Y - *pBalloonRadius[i],
2 * (*pBalloonRadius[i]),
2 * (*pBalloonRadius[i]));
g->DrawEllipse(Pens::Black,
(*pBaloonCenter[i]).X - *pBalloonRadius[i],
(*pBaloonCenter[i]).Y - *pBalloonRadius[i],
2 * (*pBalloonRadius[i]),
2 * (*pBalloonRadius[i]));
// ~balloonBrush(); or balloonBrush->Dispose();
topBalloon = i;
}
if (-1 != topBalloon) // Put a X in the center of the top balloon.
{
Pen ^ myBlackPen = gcnew Pen(Color::Black, 10);
myBlackPen->StartCap = System::Drawing::Drawing2D::LineCap::Round;
myBlackPen->EndCap = System::Drawing::Drawing2D::LineCap::Round;
Pen ^ myWhitePen = gcnew Pen(Color::White, 5);
myWhitePen->StartCap = System::Drawing::Drawing2D::LineCap::Round;
myWhitePen->EndCap = System::Drawing::Drawing2D::LineCap::Round;
g->DrawLine(myBlackPen,
(*pBaloonCenter[topBalloon]).X - 10, (*pBaloonCenter[topBalloon]).Y - 10,
(*pBaloonCenter[topBalloon]).X + 10, (*pBaloonCenter[topBalloon]).Y + 10);
g->DrawLine(myBlackPen,
(*pBaloonCenter[topBalloon]).X - 10, (*pBaloonCenter[topBalloon]).Y + 10,
(*pBaloonCenter[topBalloon]).X + 10, (*pBaloonCenter[topBalloon]).Y - 10);
g->DrawLine(myWhitePen,
(*pBaloonCenter[topBalloon]).X - 10, (*pBaloonCenter[topBalloon]).Y - 10,
(*pBaloonCenter[topBalloon]).X + 10, (*pBaloonCenter[topBalloon]).Y + 10);
g->DrawLine(myWhitePen,
(*pBaloonCenter[topBalloon]).X - 10, (*pBaloonCenter[topBalloon]).Y + 10,
(*pBaloonCenter[topBalloon]).X + 10, (*pBaloonCenter[topBalloon]).Y - 10);
//myBlackPen->Dispose();
//myWhitePen->Dispose();
}
}