📄 unit1.cpp
字号:
if (chk=HitCheck(ObjectX,ObjectY+1,Rotat)){
ObjectY++;
WriteObject();
}
}
}
}
}
if (!chk){
Score+=25;
if(PlaySnd) sndPlaySound("Tick.wav",SND_ASYNC);
// 存储方块数据
for (int i=0;i<4;i++){
xx=ObjectX+Style[Patn][Rotat*10+i*2]-1;
yy=ObjectY+Style[Patn][Rotat*10+i*2+1]-1;
GlassMap[xx][yy]=ObjectColor+1;
}
ScanLines();
if (Score>4000) Level = 2;
if (Score>8000) Level = 3;
if (Score>13000) Level = 4;
if (Score>20000) Level = 5;
if (Score>30000) Level = 6;
if (Score>50000) Level = 7;
Timer1->Interval = 800-Level*100;
if (Level!=StrToInt(Label3->Caption)&&PlaySnd)
sndPlaySound("Upgrade.wav",SND_ASYNC);
Label3->Caption=AnsiString(Level);
Label4->Caption=AnsiString(Score);
//new block put screen
ObjectX=3;
ObjectY=0;
Patn=NextPatn;
Rotat=NextRotat;
ObjectColor=NextColor;
MoveFlag=false;
WriteObject();
if(!HitCheck(ObjectX,ObjectY,Rotat)){
Timer1->Enabled=false;
isPlaying=false;
MessageBox(Handle,"抱歉!您失败了……","游戏结束",
MB_ICONINFORMATION|MB_OK);
MediaPlayer1->Stop();
AddHighScore();
Button1->Enabled=true;
N2->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
}
WriteNext();
}
}
void __fastcall TTetrisForm::ScanLines()
{
int Lines=0;
for (int i=0;i<GlassHeight;i++)
for (int j=0;j<GlassWidth;j++)
OldGlassMap[j][i]=GlassMap[j][i];
for (int i= 0;i<GlassHeight;i++){
int k= 0;
for (int j=0;j<GlassWidth;j++)
if (GlassMap[j][i]>0) k++;
if (k==GlassWidth){
Lines++;
for (int a=i;a>0;a--)
for (int b=0;b<GlassWidth;b++)
GlassMap[b][a]= GlassMap[b][a-1];
}
}
for (int i=0;i<GlassHeight;i++)
for (int j=0;j<GlassWidth;j++)
if (OldGlassMap[j][i]!=GlassMap[j][i])
if (GlassMap[j][i]==0) ClearBlock(j,i);
else DrawBlock(j,i,Colors[GlassMap[j][i]-1]);
switch(Lines){
case 1: Score +=100;
break;
case 2: Score +=250;
break;
case 3: Score +=550;
break;
case 4: Score +=1200;
break;
}
if (Lines>0&&PlaySnd) sndPlaySound("Line.wav",SND_ASYNC);
}
void __fastcall TTetrisForm::Timer1Timer(TObject *Sender)
{
MoveDown();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::Button2Click(TObject *Sender)
{
if (Timer1->Enabled){
Timer1->Enabled = false;
Button3->Enabled = false;
}
else {
Timer1->Enabled = true;
Button3->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::Button3Click(TObject *Sender)
{
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::X1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::N2Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute()){
ImageFileName=OpenPictureDialog1->FileName;
LoadImage(ImageFileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::Button5Click(TObject *Sender)
{
Application->HelpCommand(HELP_CONTENTS, 0);
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::N1Click(TObject *Sender)
{
Application->HelpCommand(HELP_CONTENTS, 0);
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::N4Click(TObject *Sender)
{
PlayMusic=!PlayMusic;
N4->Checked=PlayMusic;
if (PlayMusic) MediaPlayer1->Play();
else MediaPlayer1->Stop();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::N5Click(TObject *Sender)
{
PlaySnd=!PlaySnd;
N5->Checked=PlaySnd;
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::MediaPlayer1Notify(TObject *Sender)
{
if (MediaPlayer1->NotifyValue==nvSuccessful)
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::LoadImage(AnsiString FileName)
{
TImage *tmpImage=new TImage(this);
tmpImage->AutoSize=true;
tmpImage->Picture->LoadFromFile(FileName);
if (tmpImage->Width>Image->Width&&tmpImage->Height>Image->Height)
BGImage->Canvas->Draw(0,0,tmpImage->Picture->Graphic);
else
BGImage->Canvas->StretchDraw(
Rect(0,0,Image->Width,Image->Height),
tmpImage->Picture->Graphic);
for (int i=0;i<GlassWidth;i++)
for (int j=0;j<GlassHeight;j++)
ClearBlock(i,j);
delete tmpImage;
}
void __fastcall TTetrisForm::FormClose(TObject *Sender,
TCloseAction &Action)
{
IniFile->WriteBool("Option","Sound",PlaySnd);
IniFile->WriteBool("Option","Music",PlayMusic);
IniFile->WriteString("Option","BGImage",ImageFileName);
for (int i=0;i<3;i++){
IniFile->WriteInteger("HighScore","HighScore"+IntToStr(i),HighScore[i]);
IniFile->WriteString("HighName","HighName"+IntToStr(i),HighName[i]);
}
delete IniFile;
}
//---------------------------------------------------------------------------
void TTetrisForm::ReadIni()
{
IniFile=new TIniFile(
ExtractFilePath(Application->ExeName)
+"\\"+IniFileName);
PlaySnd=IniFile->ReadBool("Option","Sound",true);
PlayMusic=IniFile->ReadBool("Option","Music",true);
ImageFileName=IniFile->ReadString("Option","BGImage","BG.bmp");
for (int i=0;i<3;i++){
HighScore[i]=IniFile->ReadInteger("HighScore","HighScore"+IntToStr(i),0);
HighName[i]=IniFile->ReadString("HighName","HighName"+IntToStr(i),"匿名");
}
N4->Checked=PlaySnd;
N5->Checked=PlayMusic;
}
void TTetrisForm::AddHighScore()
{
for (int i=0;i<3;i++)
if (Score>HighScore[i]){
for (int j=2;j>i;j--){
HighScore[j]=HighScore[j-1];
HighName[j]=HighName[j-1];
}
HighScore[i]=Score;
InputQuery("恭喜你!你进入了俄罗斯方块英雄榜",
"请输入您的大名:",HighName[i]);
T1Click(NULL);
break;
}
}
void __fastcall TTetrisForm::T1Click(TObject *Sender)
{
ScoreForm->Label4->Caption=AnsiString(HighScore[0])+"分";
ScoreForm->Label5->Caption=AnsiString(HighScore[1])+"分";
ScoreForm->Label6->Caption=AnsiString(HighScore[2])+"分";
ScoreForm->Label7->Caption=HighName[0];
ScoreForm->Label8->Caption=HighName[1];
ScoreForm->Label9->Caption=HighName[2];
ScoreForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::BCB1Click(TObject *Sender)
{
AboutBox->Show();
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::JoyMove(TMessage &msg)
{
if (!isPlaying) return;
int PosX,PosY;
PosX=msg.LParamLo;
PosY=msg.LParamHi;
if (PosX<10000)
MoveLeft();
else if (PosX>55000)
MoveRight();
if (PosY>55000)
MoveDown();
}
void __fastcall TTetrisForm::JoyPress(TMessage &msg)
{
if (!isPlaying) return;
if (msg.WParam & JOY_BUTTON1)
Rotate();
}
void __fastcall TTetrisForm::J1Click(TObject *Sender)
{
JOYINFO JoyInfo;
J1->Checked=!J1->Checked;
if (!J1->Checked)
joyReleaseCapture(JOYSTICKID1);
else {
joyGetPos(JOYSTICKID1,&JoyInfo);
joySetCapture(Handle,JOYSTICKID1,2*JoyCaps.wPeriodMin,false);
}
}
//---------------------------------------------------------------------------
void __fastcall TTetrisForm::ConnectJoy()
{
MMRESULT Result;
JOYINFO JoyInfo;
if (joyGetNumDevs()==0){
J1->Enabled=false;
return;
}
Result=joyGetPos(JOYSTICKID1,&JoyInfo);
if (Result!=JOYERR_NOERROR){
J1->Enabled=false;
return;
}
if (J1->Checked){
joyGetDevCaps(JOYSTICKID1,&JoyCaps,sizeof(JOYCAPS));
joySetCapture(Handle,JOYSTICKID1,2*JoyCaps.wPeriodMin,false);
}
}
void __fastcall TTetrisForm::FormDestroy(TObject *Sender)
{
if (J1->Checked)
joyReleaseCapture(JOYSTICKID1);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -