📄 ep.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "EP.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
//指定应用程序空闲时响应的函数
Application->OnIdle = IdleLoop;
if(Application->MessageBox("现在地球正等待您的拯救!您想拯救地球吗?", "拯救地球", MB_OKCANCEL) == IDOK)
{
//载入声音效果
sndPlaySound("Utopia Default.wav", SND_ASYNC | SND_FILENAME);
x = 0;
y = 0;
GameOver = false;
ShowCursor(false);
}
else
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::IdleLoop(TObject*, bool &done)
{
//继续循环
done = false;
//延时1秒
::Sleep(1);
changeRect = spriteRect;
spriteRect.Left = x;
spriteRect.Top = y;
spriteRect.Right = x + spriteImage->Picture->Width;
spriteRect.Bottom = y + spriteImage->Picture->Height;
workCanvas->CopyRect(paddleRect, backgroundCanvas, paddleRect);
changePaddleRect = paddleRect;
paddleRect.Left = paddleCenter - ((paddle->Picture->Width)/2);
paddleX = paddleRect.Left;
paddleRect.Top = paddleY;
paddleRect.Right = paddleX + paddle->Picture->Width;
paddleRect.Bottom = paddleY + paddle->Picture->Height;
{
int SideDef = changeRect.Left - spriteRect.Left;
// 如果SideDiff < 0, the paddle is to the right
if(SideDef < 0)
{
changeRect.Right = spriteRect.Right;
}
else {
changeRect.Left = spriteRect.Left;
}
int TopDef = changeRect.Top - spriteRect.Top;
if(TopDef < 0)
{
changeRect.Bottom = spriteRect.Bottom;
}
else {
changeRect.Top = spriteRect.Top;
}
}
workCanvas->CopyRect(spriteRect, backgroundCanvas, spriteRect);
if (y <= 0)
{
yDir = 5;
}
if (y >= ClientHeight - 16)
{
GameOver = true;
::SetCursor((HCURSOR)IDC_ARROW);
ShowCursor(true);
int choice = MessageBox(Handle, "您已失去地球", "拯救地球?", MB_RETRYCANCEL);
if(choice == IDRETRY)
{
x = 0;
y = 0;
ShowCursor(false);
}
else
Close();
}
if ((spriteRect.Bottom - 16) >= (paddleRect.Top) &&
(spriteRect.Bottom - 16) <= (paddleRect.Top + 5) &&
(spriteRect.Right) >= (paddleRect.Left) &&
(spriteRect.Left) <= (paddleRect.Right))
{
yDir = -5;
sndPlaySound("Utopia Default.wav", SND_ASYNC | SND_FILENAME);
}
if (x <= 0)
{
xDir = 5;
}
if(x >= ClientWidth - 16)
{
xDir = -5;
}
x += xDir;
y += yDir;
int PaddleDifference = changePaddleRect.Left - paddleRect.Left;
// 如果PaddleDiff < 0,则接收地球的方块条向右移动
if(PaddleDifference < 0)
{
changePaddleRect.Right = paddleRect.Right;
}
else
{
changePaddleRect.Left = paddleRect.Left;
}
workCanvas->Draw(x, y, spriteImage->Picture->Icon);
workCanvas->Draw(paddleX, paddleY, paddle->Picture->Icon);
RealizePalette(backgroundCanvas->Handle);
RealizePalette(workCanvas->Handle);
Canvas->CopyRect(changeRect, workCanvas, changeRect);
Canvas->CopyRect(changePaddleRect, workCanvas, changePaddleRect);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormPaint(TObject *Sender)
{
RealizePalette(backgroundCanvas->Handle);
RealizePalette(workCanvas->Handle);
Canvas->CopyRect(backgroundRect, workCanvas, backgroundRect);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormActivate(TObject *Sender)
{
backgroundImage = new TImage(Owner);
spriteImage = new TImage(Owner);
paddle = new TImage(Owner);
workCanvas = new TCanvas;
backgroundCanvas = new TCanvas;
Angle = 1;
spriteImage->Picture->Icon->Handle=LoadIcon(HInstance,"spriteImage");
paddle->Picture->Icon->Handle=LoadIcon(HInstance,"paddle");
backgroundImage->Picture->Bitmap->LoadFromResourceName((int)HInstance,"backgroundImage");
WindowState = wsMaximized;
backgroundRect.Top = 0;
backgroundRect.Left = 0;
backgroundRect.Right = ClientWidth;
backgroundRect.Bottom = ClientHeight;
spriteRect.Top = 0;
spriteRect.Left = 0;
spriteRect.Right = spriteImage->Picture->Width;
spriteRect.Bottom = spriteImage->Picture->Height;
//设置背景画布
HDC backgrounddc = CreateCompatibleDC(Canvas->Handle);
HBITMAP bkbmp = CreateCompatibleBitmap(Canvas->Handle, ClientWidth, ClientHeight);
SelectObject(backgrounddc, bkbmp);
SelectPalette(backgrounddc, backgroundImage->Picture->Bitmap->Palette, false);
backgroundCanvas->Handle = backgrounddc;
backgroundCanvas->StretchDraw( backgroundRect, backgroundImage->Picture->Bitmap);
//设置工作画布
HDC workdc = CreateCompatibleDC(Canvas->Handle);
HBITMAP bmp = CreateCompatibleBitmap(Canvas->Handle, ClientWidth, ClientHeight);
SelectObject(workdc, bmp);
SelectPalette(workdc, backgroundImage->Picture->Bitmap->Palette, false);
workCanvas->Handle = workdc;
workCanvas->CopyRect(backgroundRect, backgroundCanvas, backgroundRect);
workCanvas->Draw( 0, 0, spriteImage->Picture->Icon);
paddleX = ClientWidth / 2;
paddleY = ClientHeight - 50;
workCanvas->Draw( paddleX, paddleY, paddle->Picture->Icon);
paddleRect.Left = paddleX - paddle->Width;
paddleRect.Right = paddleX + paddle->Width;
paddleRect.Top = paddleY;
paddleRect.Bottom = paddleY + paddle->Height;
RealizePalette(backgroundCanvas->Handle);
RealizePalette(workCanvas->Handle);
Canvas->CopyRect(backgroundRect, workCanvas, backgroundRect);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
//激活并移动方块
paddleCenter = X;
if(paddleCenter < paddle->Picture->Width/2)
paddleCenter = paddle->Picture->Width/2;
if(paddleCenter > ClientWidth - (paddle->Picture->Width/2))
paddleCenter = ClientWidth - (paddle->Picture->Width/2);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::SetCursor(TMessage &)
{
//隐藏鼠标
if(!GameOver)
{
::SetCursor(NULL);
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::CreateParams(TCreateParams& Params)
{
TForm::CreateParams(Params);
Params.Style |= WS_POPUP;
Params.Style ^= WS_DLGFRAME;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -