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

📄 unit1.cpp

📁 自制 9格拼图游戏 bbc vcl程序 按钮拼图记录步数 用时 重玩 退一步 新局
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------

bool isKeyDown(LPARAM lParam){
    return lParam>>30==0;
}
bool isKeyChar(LPARAM lParam){
    return lParam>>30==1 && lParam>>31==0;
}
LRESULT CALLBACK KeyboardPorc(int code,WPARAM wParam,LPARAM lParam)
{
	if(isKeyDown(lParam) || isKeyChar(lParam))
	{

  if(wParam==VK_LEFT || wParam==VK_RIGHT  ||
     wParam==VK_UP || wParam==VK_DOWN ){
    //ShowMessage(wParam);
      MainForm->movedByKey(wParam);
		return true;  //键松开
    }
	}

    return false;
}

__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
  //HHOOK hhk=
  SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC) KeyboardPorc,NULL,GetCurrentThreadId());
  d.init();
  int BTNS_WIDTH=50;
  int BTNS_HEIGHT=50;
  int OFFSET_X=50;
  int OFFSET_Y=50;

  BTNS_WIDTH=BtnDingWei->Width/3;
  BTNS_HEIGHT=BtnDingWei->Height/3;
  OFFSET_X=BtnDingWei->Left;
  OFFSET_Y=BtnDingWei->Top;
  for(int i=0;i<9;i++)
  {
    int x=i%3;
    int y=i/3;
    btns[i]=new TButton(this);
    btns[i]->Parent=this;
    btns[i]->Width   =   BTNS_WIDTH;
    btns[i]->Height   =  BTNS_HEIGHT;
    btns[i]->Left   =   OFFSET_X+x*BTNS_WIDTH;
    btns[i]->Top   =  OFFSET_Y+y*BTNS_HEIGHT;
    btns[i]->Caption=d.nos[i];
    if(d.nos[i]==0)
       btns[i]->Visible=false;
    btns[i]->OnClick=btnsClick;
    btns[i]->Font= BtnDingWei->Font;
    //btns[i]-
  }
  TTimer* timer = new TTimer(NULL);
  timer->Interval = 200;
  timer->OnTimer = update;
}
void __fastcall TMainForm::btnsClick(TObject *Sender)
{
  int no=0;
  for(int i=0;i<9;i++){
    if(Sender==btns[i])
    {
      no=i;
      break;
    }
  }
  //ShowMessage(no);
  d.move(no);
  msgShowed=false;
  update(0);
}
void __fastcall TMainForm::update(TObject *Sender){
  for(int i=0;i<9;i++)
  {
    btns[i]->Caption=d.nos[i];
    Canvas->TextOut(0,i*20,d.nos[i]);
    if(d.nos[i]==0)
       btns[i]->Visible=false;
    else
      btns[i]->Visible=true;
  }
  this->LabStepNum->Caption="步数: "+AnsiString(d.stepNum);
  this->LabTimer->Caption="时间: "+AnsiString(d.timePassed);

  if(msgShowed==false && d.isWin()){
    msgShowed=true;
    ShowMessage(AnsiString("你赢了\n")+
      "步数: "+AnsiString(d.stepNum)+"\n"+
      "时间: "+AnsiString(d.timePassed)
      );
    
  }
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::ButtonClick(TObject *Sender)
{
    static int y=0;
    Canvas->Font->Color=clBlue;
    Canvas->TextOut(0,y,"out");
    y+=1;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::QuitButtonClick(TObject *Sender)
{
  exit(0);
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::N2Click(TObject *Sender)
{
  exit(0);
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::BtnNewClick(TObject *Sender)
{
  d.init();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BtnBackClick(TObject *Sender)
{
  d.back();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BtnReClick(TObject *Sender)
{
  d.rePlay();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  //ShowMessage(Key);
}
//---------------------------------------------------------------------------


void TMainForm::movedByKey(WPARAM vk)
{
  d.move(vk);
  msgShowed=false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -