home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 May / Chip_2002-05_cd1.bin / chplus / cpp / 3 / hra1.exe / ep.cpp < prev    next >
C/C++ Source or Header  |  1998-02-09  |  7KB  |  230 lines

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4.  
  5. #include "EP.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma resource "*.dfm"
  9. TForm1 *Form1;
  10. //---------------------------------------------------------------------------
  11. __fastcall TForm1::TForm1(TComponent* Owner)
  12.     : TForm(Owner)
  13. {
  14.     //Assign idle time function
  15.     Application->OnIdle = IdleLoop;
  16.  
  17.     if(Application->MessageBox("Would you like to play with Earth?", "Hello Earthling", MB_OKCANCEL) == IDOK)
  18.     {
  19.         //load sound effect
  20.         sndPlaySound("Utopia Default.wav", SND_ASYNC | SND_FILENAME);
  21.           x = 0;
  22.         y = 0;
  23.         GameOver = false;
  24.     ShowCursor(false);
  25.         
  26.     }
  27.     else
  28.         Application->Terminate();
  29.  
  30. }
  31. //---------------------------------------------------------------------------
  32.  
  33.  
  34. void __fastcall TForm1::IdleLoop(TObject*, bool &done)
  35. {
  36.     //keeps loop going
  37.      done = false;
  38.     //slows down action
  39.     ::Sleep(1);
  40.  
  41.     changeRect = spriteRect;
  42.     spriteRect.Left = x;
  43.     spriteRect.Top = y;
  44.     spriteRect.Right = x + spriteImage->Picture->Width;
  45.     spriteRect.Bottom = y + spriteImage->Picture->Height;
  46.  
  47.     workCanvas->CopyRect(paddleRect, backgroundCanvas, paddleRect);
  48.  
  49.     changePaddleRect = paddleRect;
  50.     paddleX = paddleRect.Left = paddleCenter - ((paddle->Picture->Width)/2);
  51.     paddleRect.Top = paddleY;
  52.     paddleRect.Right = paddleX + paddle->Picture->Width;
  53.     paddleRect.Bottom = paddleY + paddle->Picture->Height;
  54.  
  55.     {
  56.         int SideDef = changeRect.Left - spriteRect.Left;
  57.         // If SideDiff < 0 the paddle is to the right
  58.         if(SideDef < 0) {
  59.             changeRect.Right = spriteRect.Right;
  60.         }
  61.         else {
  62.             changeRect.Left = spriteRect.Left;
  63.         }
  64.  
  65.         int TopDef = changeRect.Top - spriteRect.Top;
  66.         // If SideDiff < 0 the paddle is to the Down
  67.         if(TopDef < 0) {
  68.             changeRect.Bottom = spriteRect.Bottom;
  69.         }
  70.         else {
  71.             changeRect.Top = spriteRect.Top;
  72.         }
  73.     }
  74.  
  75.     workCanvas->CopyRect(spriteRect, backgroundCanvas, spriteRect);
  76.  
  77.  
  78.     //ChangeRectCalcs
  79.     if (y <= 0)
  80.     {
  81.         yDir = 5;
  82.     }
  83.     if (y >= ClientHeight - 16)
  84.     {
  85.         GameOver = true;
  86.         ::SetCursor(IDC_ARROW);
  87.         ShowCursor(true);
  88.         int choice = MessageBox(Handle, "You lost Earth", "Try Again?", MB_RETRYCANCEL);
  89.         if(choice == IDRETRY)
  90.         {
  91.             x = 0;
  92.             y = 0;
  93.             ShowCursor(false);
  94.  
  95.         }
  96.         else
  97.             Form1->Close();
  98.     }
  99.  
  100.     if ((spriteRect.Bottom - 16) >= (paddleRect.Top) &&
  101.             (spriteRect.Bottom - 16) <= (paddleRect.Top + 5) &&
  102.                 (spriteRect.Right) >= (paddleRect.Left) &&
  103.                     (spriteRect.Left) <= (paddleRect.Right))
  104.     {
  105.         yDir = -5;
  106.         sndPlaySound("Utopia Default.wav", SND_ASYNC | SND_FILENAME);
  107.     }
  108.  
  109.     if (x <= 0)
  110.     {
  111.         xDir = 5;
  112.     }
  113.  
  114.     if(x >= ClientWidth - 16)
  115.     {
  116.         xDir = -5;
  117.     }
  118.  
  119.     x += xDir;
  120.     y += yDir;
  121.  
  122.     int PaddleDifference = changePaddleRect.Left - paddleRect.Left;
  123.     // If PaddleDiff < 0 the paddle is to the right
  124.     if(PaddleDifference < 0) {
  125.         changePaddleRect.Right = paddleRect.Right;
  126.     }
  127.     else {
  128.         changePaddleRect.Left = paddleRect.Left;
  129.     }
  130.  
  131.     //Perform dirty rectangle animation on memory and Form canvas
  132.     workCanvas->Draw(x, y, spriteImage->Picture->Icon);
  133.     workCanvas->Draw(paddleX, paddleY, paddle->Picture->Icon);
  134.     RealizePalette(backgroundCanvas->Handle);
  135.     RealizePalette(workCanvas->Handle);
  136.     Canvas->CopyRect(changeRect, workCanvas, changeRect);
  137.     Canvas->CopyRect(changePaddleRect, workCanvas, changePaddleRect);
  138. }
  139.  
  140. //---------------------------------------------------------------------------
  141. void __fastcall TForm1::FormPaint(TObject *Sender)
  142. {
  143.     RealizePalette(backgroundCanvas->Handle);
  144.     RealizePalette(workCanvas->Handle);
  145.     Canvas->CopyRect(backgroundRect, workCanvas, backgroundRect);
  146. }
  147. //---------------------------------------------------------------------------
  148. void __fastcall TForm1::FormActivate(TObject *Sender)
  149. {
  150.     backgroundImage = new TImage(Owner);
  151.     spriteImage = new TImage(Owner);
  152.     paddle = new TImage(Owner);
  153.     workCanvas = new TCanvas;
  154.     backgroundCanvas = new TCanvas;
  155.  
  156.     Angle = 1;
  157.  
  158.     spriteImage->
  159.         Picture->LoadFromFile("Earth.ico");
  160.     backgroundImage->
  161.         Picture->LoadFromFile("androm.bmp");
  162.     paddle->
  163.         Picture->LoadFromFile("paddle.ico");
  164.  
  165.     WindowState = wsMaximized;
  166.  
  167.     backgroundRect.Top = 0;
  168.     backgroundRect.Left = 0;
  169.     backgroundRect.Right =  ClientWidth;
  170.     backgroundRect.Bottom =  ClientHeight;
  171.  
  172.  
  173.     spriteRect.Top = 0;
  174.     spriteRect.Left = 0;
  175.     spriteRect.Right = spriteImage->Picture->Width;
  176.     spriteRect.Bottom = spriteImage->Picture->Height;
  177.  
  178.     //Set up backgroundCanvas
  179.     HDC backgrounddc = CreateCompatibleDC(Canvas->Handle);
  180.     HBITMAP  bkbmp = CreateCompatibleBitmap(Canvas->Handle, ClientWidth, ClientHeight);
  181.     SelectObject(backgrounddc, bkbmp);
  182.     SelectPalette(backgrounddc, backgroundImage->Picture->Bitmap->Palette, false);
  183.     backgroundCanvas->Handle = backgrounddc;
  184.     backgroundCanvas->StretchDraw( backgroundRect, backgroundImage->Picture->Bitmap);
  185.  
  186.  
  187.     //Set up workCanvas
  188.     HDC workdc = CreateCompatibleDC(Canvas->Handle);
  189.     HBITMAP  bmp = CreateCompatibleBitmap(Canvas->Handle, ClientWidth, ClientHeight);
  190.     SelectObject(workdc, bmp);
  191.     SelectPalette(workdc, backgroundImage->Picture->Bitmap->Palette, false);
  192.     workCanvas->Handle = workdc;
  193.     workCanvas->CopyRect(backgroundRect,  backgroundCanvas, backgroundRect);
  194.     workCanvas->Draw( 0, 0, spriteImage->Picture->Icon);
  195.     paddleX = ClientWidth / 2;
  196.     paddleY = ClientHeight - 50;
  197.     workCanvas->Draw( paddleX, paddleY, paddle->Picture->Icon);
  198.  
  199.     paddleRect.Left = paddleX - paddle->Width;
  200.     paddleRect.Right = paddleX + paddle->Width;
  201.     paddleRect.Top    = paddleY;
  202.     paddleRect.Bottom = paddleY + paddle->Height;
  203.  
  204.  
  205.     RealizePalette(backgroundCanvas->Handle);
  206.     RealizePalette(workCanvas->Handle);
  207.     Canvas->CopyRect(backgroundRect, workCanvas, backgroundRect);
  208. }
  209. //---------------------------------------------------------------------------
  210. void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
  211.     int Y)
  212. {
  213.     //Animates and moves paddle
  214.     paddleCenter = X;
  215.     if(paddleCenter < paddle->Picture->Width/2)
  216.         paddleCenter = paddle->Picture->Width/2;
  217.     if(paddleCenter > ClientWidth - (paddle->Picture->Width/2))
  218.         paddleCenter = ClientWidth - (paddle->Picture->Width/2);
  219. }
  220.  
  221. void __fastcall TForm1::SetCursor(TMessage &) {
  222.     //Hides Cursor
  223.         if(!GameOver)
  224.         {
  225.     ::SetCursor(NULL);
  226.         }
  227. }
  228. //---------------------------------------------------------------------------
  229.  
  230.