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

📄 unit1.cpp

📁 这又是一个路径探索算法
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <mmsystem.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
extern char map[100][100];
extern short disp[100][100];
extern short path[1000];
extern short map_h,map_w;
extern short m1,m2;
extern long OLimited;
extern long CLimited;
extern short startx,starty;
extern short endx,endy;
extern long mOpenCount;
extern long mCloseCount;
void popen();
void pclose();
void setting();
void setdefault();
void fpath(bool wdisp);
void draw(TImage *Image1);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  OLimited=StrToInt(Edit1->Text);
  CLimited=StrToInt(Edit2->Text);
  m1=StrToInt(Edit3->Text);
  m2=StrToInt(Edit4->Text);
  setting();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  int i,j;
  Image1->Canvas->Refresh();
  popen();
  randomize();
  for (i=0;i<100;i++) for (j=0;j<100;j++) map[j][i]=' ';
  setdefault();
  Edit1->Text=IntToStr(OLimited);
  Edit2->Text=IntToStr(CLimited);
  Edit3->Text=IntToStr(m1);
  Edit4->Text=IntToStr(m2);
  StatusBar1->Panels->Items[1]->Text="鼠标设置障碍,按住SHIFT/ALT修改起点,终点坐标";
  StatusBar1->Panels->Items[2]->Text="这里速度慢是作图而非算法";

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  pclose();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  int drawm=0;
  int x=X/8,y=Y/8,i,c;
  TRect rect;
  if (x<0||y<0||x>=map_w||y>=map_h) return;
  if (Shift.Contains(ssShift)) startx=x,starty=y,drawm=1;
  else if (Shift.Contains(ssAlt)) endx=x,endy=y,drawm=1;
  else if (Shift.Contains(ssLeft)) map[y][x]='o',drawm=1;
  else if (Shift.Contains(ssRight)) map[y][x]=' ',drawm=1;
  if (drawm)
  {
    fpath(1);
    StatusBar1->Panels->Items[2]->Text="Open/Close最高数"+IntToStr(mOpenCount)+","+IntToStr(mCloseCount);
    for (i=0;path[i]>=0;i+=2)
      disp[path[i+1]][path[i]]=-1;
    rect.top=0;
    rect.left=0;
    rect.right=7;
    rect.bottom=7;
    for (y=0;y<map_h;rect.top+=8,rect.bottom+=8,y++)
      for (x=0,rect.left=0,rect.right=7;x<map_w;rect.left+=8,rect.right+=8,x++)
      {
        c=0xffffff;
        if (map[y][x]!=' ') c=0x1122ee;
        else if (disp[y][x]<0) c=0x11ee22;
        else if (disp[y][x]>0) c=disp[y][x],c=((c*10)&0xff)<<16;
        if (x==startx&&y==starty) c=0xff00ff;
        if (x==endx&&y==endy) c=0xff00ff;
        Image1->Canvas->Brush->Color=c;
        Image1->Canvas->FillRect(rect);
      }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  setdefault();
  Edit1->Text=IntToStr(OLimited);
  Edit2->Text=IntToStr(CLimited);
  Edit3->Text=IntToStr(m1);
  Edit4->Text=IntToStr(m2);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
  int x=X/8,y=Y/8;
  StatusBar1->Panels->Items[0]->Text="";
  if (x<0||y<0||x>=map_w||y>=map_h) return;
  StatusBar1->Panels->Items[0]->Text=IntToStr(x)+","+IntToStr(y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  int i,j;
  for (i=0;i<map_w;i++)  for (j=0;j<map_h;j++) map[j][i]=' ';
  draw(Image1);        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  int i;
  for (i=0;i<map_h*map_w/2;i++)
    map[rand()%map_h][rand()%map_w]='o';
  draw(Image1);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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