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

📄 vc62.~cpp

📁 模拟电脑鼠走迷宫,并可通过串口连接电脑鼠
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "VC62.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

unsigned char Road[15]={0x00,0x00,0,0,0,0,0,0,0,0,0,0,0,0,0};   //迷宫信息

unsigned char Mouse_X=0;
unsigned char Mouse_Y=0;        //小车在哪个坐标

unsigned char Mouse_Step=0;     //走了多少步
unsigned char Mouse_Turn=0;     //转为多少个弯

unsigned char Mouse_EndA[5]={0,0,0,0,0};
unsigned char Mouse_End[5]={0,0,0,0,0};    //终点判断
unsigned char Mouse_End_X=0;
unsigned char Mouse_End_Y=0;    //终点坐标

unsigned char Step=0;           //当前在哪一步

unsigned char Path[64][10]={0};  //路径连接信息
//可行路线信息
unsigned char Path_en[10][64][4]={0};
unsigned int Path_long[10];     //路长

unsigned char Path_enp=0;      //可行路径指针

unsigned char Pathp=0;       //指针
unsigned char Chose=0;          //选择哪一条路

unsigned char Link[64][5][4];    //路径连接信息

int Mouse_dir0=0x07;       //上一次前进方向

//0=top 1=down 2=ledt 3=right
int Check(int dir)
{
 if(dir==0)
   {
   if((Mouse_Y)&&!(Road[Mouse_Y*2-1]&(1<<Mouse_X)))
      return 1;
   else
      return 0;
   }
  else if(dir==1)
   {
    if((Mouse_X)&&!(Road[Mouse_Y*2]&(1<<(Mouse_X-1))))
       return 1;
    else
       return 0;
   }

 else if(dir==2)
   {
    if((Mouse_Y<7)&&!(Road[Mouse_Y*2+1]&(1<<Mouse_X)))
       return 1;
    else
       return 0;
   }
 else if(dir==3)
   {
    if((Mouse_X<7)&&!(Road[Mouse_Y*2]&(1<<(Mouse_X))))
      return 1;
    else
      return 0;
   }
}

unsigned int N4T(unsigned char *pt)  //
{
 int i;
 int min,max, sum;
 min=*pt;
 max=*pt;
 sum=0;
 for(i=0;i<4;i++)
   {
    max= (max>*(pt+i))? max : *(pt+i);
    min= (min<*(pt+i))? min : *(pt+i);
    sum+= *(pt+i);
   }
 if((sum%4)&&(!(sum%2))&&((max-min)==1))
    return 1 ;
 else
    return 0;
}

unsigned int N4R (unsigned char *pt)  // 检查最近走的4个点有多少个方向
{
 int cou=0;

 if(*(pt+1)!=*(pt))
    cou++;
 if((*(pt+2)!=*(pt))&&(*(pt+2)!=*(pt+1)))
    cou++;
 if((*(pt+3)!=*(pt))&&(*(pt+3)!=*(pt+1))&&(*(pt+3)!=*(pt+2)))
    cou++;     

 if(cou==3)
    return 1 ;
 else
    return 0;
}

unsigned int Rand (unsigned long t)
{
  return(rand()%t);
}


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N2Click(TObject *Sender)
{
 int i;
 for(i=0;i<15;i++)
   {
    Road[i]=0;
   }
 Timer1->Enabled=false;
 Timer2->Enabled=false;
 Mouse_X=0;
 Mouse_Y=0;
 draw(Sender);            //画迷宫
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   int i,j;
  int x0, y0;
  for(i=0;i<7;i++)
    {
     if(((50*i+60)<=X)&&((50*i+70)>X))
        break;
    }
  for(j=0;j<8;j++)
     {
      if(((50*j+20)<=Y)&&((50*j+60)>Y))
         break;
     }
 if(i<7&&j<8)
   {
    x0=i;
    y0=2*j;
    Road[y0]^=(1<<x0);
    draw_dot(Sender, x0, y0);
   }

 for(i=0;i<8;i++)
   {
    if(((50*i+20)<=X)&&((50*i+60)>X))
       break;
   }
 for(j=0;j<7;j++)
   {
    if(((50*j+60)<=Y)&&((50*j+70)>Y))
        break;
   }
 if(i<8&&j<7)
   {
    x0=i;
    y0=2*j+1;
    Road[y0]^=(1<<x0);
    draw_dot(Sender, x0, y0);
   }
}

void __fastcall TForm1::draw_dot(TObject *Sender, int x, int y)
{
 if(Road[y]&(1<<x))      //
    {
     Canvas->Pen->Color=RGB(0x00,0x00,0xff);
     Canvas->Brush->Color=RGB(0x00,0x00,0xff);
    }
 else
   {
    Canvas->Pen->Color=RGB(0xC0,0xC0,0xC0);
    Canvas->Brush->Color=RGB(0xC0,0xC0,0xC0);
   }
 if(y%2)           //画横线
   {
    Canvas->Rectangle(10+x*50+10,10+(y/2+1)*50,10+x*50+50,10+(y/2+1)*50+10);
   }
 else           // 画竖线
   {
   Canvas->Rectangle(10+(x+1)*50,10+(y/2)*50+10,10+(x+1)*50+10,10+(y/2)*50+50);
   }
}

void __fastcall TForm1::draw(TObject *Sender)
{
 int i,j;
 Canvas->Brush->Color=RGB(0x00,0x00,0xff);
 Canvas->Pen->Color=RGB(0x00,0x00,0x00);
 for(i=0;i<9;i++)
   {
    for(j=0;j<9;j++)
       {
         Canvas->Rectangle(10+i*50,10+j*50,10+i*50+10,10+j*50+10);
       }
   }
 Canvas->Brush->Color=RGB(0x80,0x80,0x80);
 Canvas->Pen->Color=RGB(0x00,0x00,0x00);

 for(i=0;i<8;i++)
   {
    Canvas->Brush->Color=RGB(0xff,0x00,0x00);
    Canvas->Rectangle(10+i*50+10,10+0*50,10+i*50+50,10+0*50+10);
    Canvas->Rectangle(10+i*50+10,10+8*50,10+i*50+50,10+8*50+10);
    Canvas->Brush->Color=RGB(0x80,0x80,0x80);
    for(j=0;j<7;j++)
       {
        //Canvas->Rectangle(10+i*50+10,10+j*50,10+i*50+50,10+j*50+10);
        draw_dot(Sender,i,2*j+1);
       }
   }
 for(j=0;j<8;j++)
   {
    Canvas->Brush->Color=RGB(0xff,0x00,0x00);
    Canvas->Rectangle(10+0*50,10+j*50+10,10+0*50+10,10+j*50+50);
    Canvas->Rectangle(10+8*50,10+j*50+10,10+8*50+10,10+j*50+50);
    Canvas->Brush->Color=RGB(0x80,0x80,0x80);
    for(i=0;i<7;i++)
       {
         draw_dot(Sender,i,2*j);
       }
   }
 Canvas->Brush->Color=clBtnFace;
 Canvas->Pen->Color=clBtnFace;
 for(i=0;i<8;i++)
   {
    for(j=0;j<8;j++)
      {
       Canvas->Ellipse(50*i+40-15,50*j+40-15,
                       50*i+40+15,50*j+40+15);
      }
   }
 Canvas->Pen->Color=0;
 Canvas->Brush->Color=RGB(0x00,0xff,0xff);
 Canvas->Ellipse(50*Mouse_X+40-15,50*Mouse_Y+40-15,
                        50*Mouse_X+40+15,50*Mouse_Y+40+15);
 Label1->Caption="X坐标:  "+IntToStr(Mouse_X)+"   ";
 Label2->Caption="Y坐标:  "+IntToStr(Mouse_Y)+"   ";
}

//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
 Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
 int fp, j;
 Mouse_X=0;
 Mouse_Y=0;
 if(OpenDialog1->Execute())           //BMP格式
   {
      fp=FileOpen(OpenDialog1->FileName,fmOpenReadWrite);
      j=FileSeek(fp,0,2);                 //计算文件长度
      Timer1->Enabled=false;
      Timer2->Enabled=false;

      if(j==15)         //长度匹配
        {
         FileSeek(fp,0,0);                   //将文件指针移回文件开始位置
         FileRead(fp,Road,j);                //读取文件
         draw(Sender);
        }
      else
        {
         ShowMessage("文件格式错误!");
        }
      FileClose(fp);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)        //保存文件
{
 int fp, j;
 AnsiString Name;
 AnsiString EX_name;
 if(SaveDialog1->Execute())
  {
   Name=SaveDialog1->FileName;
   EX_name = ExtractFileExt(SaveDialog1->FileName);
   if(EX_name!="ROD")           //加入扩展名
      {
       Name+=".ROD";
      }
   fp=FileCreate(Name);

   FileWrite(fp,Road,15);
   FileClose(fp);
  }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1KeyPress(TObject *Sender, char &Key)
{
 if(Key=='W'||Key=='w') //top
   {
    if(Check(0))
      {
       Go(Sender,0);
      }
   }
 else if(Key=='S'||Key=='s')    //down
   {
    if(Check(1))
      {
       Go(Sender,1);
      }
   }
 else if(Key=='A'||Key=='a')
   {
    if(Check(2))
      {
       Go(Sender,2);
      }
   }
 else if(Key=='D'||Key=='d')
   {
     if(Check(3))
      {
       Go(Sender,3);
      }
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Auto(Sender);
}

⌨️ 快捷键说明

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