⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 经典游戏俄罗斯方块的制作程序,想成为游戏制作高手,次程序不能不看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
          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 + -