home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / SWATMAIN.CPP < prev    next >
C/C++ Source or Header  |  1997-02-28  |  6KB  |  207 lines

  1. //----------------------------------------------------------------------------
  2. //Borland C++Builder
  3. //Copyright (c) 1987, 1997 Borland International Inc. All Rights Reserved.
  4. //----------------------------------------------------------------------------
  5. //---------------------------------------------------------------------------
  6. #include <vcl.h>
  7. #pragma hdrstop
  8.  
  9. #include "swatmain.h"
  10. #include "about.h"
  11. #include "options.h"
  12. //---------------------------------------------------------------------------
  13. #pragma resource "*.dfm"
  14. #pragma resource "extrares.RES"
  15. TSwatForm *SwatForm;
  16.  
  17. TPoint Holes[5] = {
  18.   { 10, 10 }, { 200, 10 }, { 100, 100 }, { 10, 200 }, { 200, 200 }
  19. };
  20.  
  21. //---------------------------------------------------------------------------
  22. __fastcall TSwatForm::TSwatForm(TComponent* Owner)
  23.   : TForm(Owner)
  24. {
  25. }
  26. //---------------------------------------------------------------------------
  27. void __fastcall TSwatForm::DisplayAbout(TObject *Sender)
  28. {
  29.     AboutBox->ShowModal();
  30. }
  31. //---------------------------------------------------------------------
  32. void __fastcall TSwatForm::FormCreate(TObject *Sender)
  33. {
  34.     Screen->Cursors[crMaletUp] = LoadCursor((void *)HInstance, "Malet");
  35.     Screen->Cursors[crMaletDown] = LoadCursor((void *)HInstance, "MaletDown");
  36.     Screen->Cursor = TCursor(crMaletUp);
  37.  
  38.     randomize();
  39.  
  40.     Live = new Graphics::TBitmap;
  41.     Live->LoadFromResourceName((int)HInstance, "Live");
  42.     Dead = new Graphics::TBitmap;
  43.     Dead->LoadFromResourceName((int)HInstance, "Dead");
  44.  
  45.     IsGameOver = true;
  46.     IsPause = false;
  47.     LiveTime = 10;
  48.     Frequence = 20;
  49.     GameTime = 150;        // fifteen seconds
  50.  
  51.     Application->OnMinimize = Pause1Click;
  52.     Application->OnRestore = Pause1Click;
  53. }
  54. //---------------------------------------------------------------------
  55. void __fastcall TSwatForm::TimerTick(TObject *Sender)
  56. {
  57.     Timer1->Tag++;
  58.     int i = random(Frequence);
  59.     if (i < 5)
  60.     {
  61.         if (HoleInfo[i].Time == 0)
  62.         {
  63.             HoleInfo[i].Time = Timer1->Tag + LiveTime;
  64.             HoleInfo[i].Dead = false;
  65.             Canvas->Draw(Holes[i].x, Holes[i].y, Live);
  66.         }
  67.     }
  68.     for (i = 0; i < 5; i++)
  69.     {
  70.         if (Timer1->Tag > HoleInfo[i].Time && HoleInfo[i].Time != 0)
  71.         {
  72.             HoleInfo[i].Time = 0;
  73.             if (!HoleInfo[i].Dead)
  74.             {
  75.                 Score += MissedCritter;
  76.                 Escaped++;
  77.             }
  78.             Canvas->FillRect(Rect(Holes[i].x, Holes[i].y,
  79.                             Holes[i].x + Dead->Width, Holes[i].y + Dead->Height));
  80.         }
  81.     }
  82.     WriteScore();
  83.     if (Timer1->Tag >= GameTime)
  84.         Stop1Click(this);
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TSwatForm::WriteScore(void)
  88. {
  89.     TimeLabel->Caption = IntToStr(GameTime - Timer1->Tag);
  90.     HitsLabel->Caption = IntToStr(Hits);
  91.     MissLabel->Caption = IntToStr(Miss);
  92.     EscapedLabel->Caption = IntToStr(Escaped);
  93.     ScoreLabel->Caption = IntToStr(Score);
  94. }
  95. void __fastcall TSwatForm::New1Click(TObject *Sender)
  96. {
  97.     Timer1->Enabled = true;
  98.     Timer1->Tag = 0;
  99.     Score = 0;
  100.     Hits = 0;
  101.     Miss = 0;
  102.     Escaped = 0;
  103.     if (IsPause)
  104.     {
  105.         IsPause = false;
  106.         Pause1->Caption = "&Pause";
  107.     }
  108.     GameOverImage->Visible = false;
  109.     IsGameOver = false;
  110.     memset(HoleInfo, 0, sizeof(HoleInfo));
  111.     New1->Enabled = false;
  112.     Options1->Enabled = false;
  113.     Stop1->Enabled = true;
  114. }
  115. //---------------------------------------------------------------------
  116. void __fastcall TSwatForm::Stop1Click(TObject *Sender)
  117. {
  118.     Timer1->Enabled = false;
  119.     IsPause = false;
  120.     GameOverImage->Visible = true;
  121.     IsGameOver = true;
  122.     Timer1->Tag = GameTime;
  123.     New1->Enabled = true;
  124.     Options1->Enabled = true;
  125.     Stop1->Enabled = false;
  126.     for (int i = 0; i < 5; i++)
  127.     {
  128.         if (HoleInfo[i].Time != 0)
  129.         {
  130.             Canvas->FillRect(Rect(Holes[i].x, Holes[i].y,
  131.                           Holes[i].x + Dead->Width, Holes[i].y + Dead->Height));
  132.         }
  133.     }
  134. }
  135. //---------------------------------------------------------------------
  136. void __fastcall TSwatForm::Pause1Click(TObject *Sender)
  137. {
  138.     if (IsGameOver)
  139.         return;
  140.  
  141.     if (IsPause)
  142.     {
  143.         IsPause = false;
  144.         Pause1->Caption = "&Pause";
  145.         Stop1->Enabled = true;
  146.         Timer1->Enabled = true;
  147.     }
  148.     else
  149.     {
  150.         IsPause = true;
  151.         Pause1->Caption = "&Continue";
  152.         Stop1->Enabled = false;
  153.         Timer1->Enabled = false;
  154.     }
  155. }
  156. //---------------------------------------------------------------------
  157. void __fastcall TSwatForm::Options1Click(TObject *Sender)
  158. {
  159.     OptionsDlg->ShowModal();
  160. }
  161. //---------------------------------------------------------------------
  162. void __fastcall TSwatForm::FormDestroy(TObject *Sender)
  163. {
  164.     delete Live;
  165.     delete Dead;
  166. }
  167. //---------------------------------------------------------------------
  168. void __fastcall TSwatForm::FormMouseDown(TObject *Sender, TMouseButton Button,
  169.     TShiftState Shift, int X, int Y)
  170. {
  171.     Screen->Cursor = TCursor(crMaletDown);
  172.  
  173.     if (IsGameOver || IsPause)
  174.         return;
  175.  
  176.     bool hit = false;
  177.     for (int i = 0; i < 5; i++)
  178.     {
  179.         if (!HoleInfo[i].Dead && HoleInfo[i].Time != 0)
  180.         {
  181.             if (X > Holes[i].x && X < (Holes[i].x + Live->Width) &&
  182.                 Y > Holes[i].y && Y < (Holes[i].y + Live->Height))
  183.             {
  184.                 Score += HitPoints;
  185.                 HoleInfo[i].Dead = true;
  186.                 HoleInfo[i].Time = Timer1->Tag + 2 * LiveTime;
  187.                 Hits++;
  188.                 hit = true;
  189.                 Canvas->Draw(Holes[i].x, Holes[i].y, Dead);
  190.             }
  191.         }
  192.     }
  193.     if (!hit)
  194.     {
  195.         Score += MissedPoints;
  196.         Miss++;
  197.     }
  198.     WriteScore();    
  199. }
  200. //---------------------------------------------------------------------------
  201. void __fastcall TSwatForm::FormMouseUp(TObject *Sender, TMouseButton Button,
  202.     TShiftState Shift, int X, int Y)
  203. {
  204.     Screen->Cursor = TCursor(crMaletUp);    
  205. }
  206. //---------------------------------------------------------------------------
  207.