📄 aiantdlg.cpp
字号:
dc->MoveTo(x+5,y+15);
dc->LineTo(x+25,y+15);
dc->LineTo(x+20,y+20);
dc->MoveTo(x+25,y+15);
dc->LineTo(x+20,y+10);
break;
};
case 5:
{
dc->Rectangle(x,y,30+x,30+y);
dc->MoveTo(x+15,y+5);
dc->LineTo(x+15,y+25);
dc->LineTo(x+20,y+20);
dc->MoveTo(x+15,y+25);
dc->LineTo(x+10,y+20);
break;
};
case 6:
{
dc->Rectangle(x,y,30+x,30+y);
dc->MoveTo(x+25,y+15);
dc->LineTo(x+5,y+15);
dc->LineTo(x+10,y+20);
dc->MoveTo(x+5,y+15);
dc->LineTo(x+10,y+10);
break;
};
case 7:
{
dc->Rectangle(x,y,30+x,30+y);
dc->MoveTo(x+15,y+25);
dc->LineTo(x+15,y+5);
dc->LineTo(x+20,y+10);
dc->MoveTo(x+15,y+5);
dc->LineTo(x+10,y+10);
break;
};
};
}
void CAIAntDlg::OnAuto()
{
// TODO: Add your control notification handler code here
m_single.EnableWindow(false);
m_reset.EnableWindow(false);
m_aiantchoice.EnableWindow(false);
SetTimer(1,200,NULL);
}
void CAIAntDlg::OnReset()
{
// TODO: Add your control notification handler code here
KillTimer(1);
int i=m_aiantchoice.GetCurSel();
switch (i)
{
case 0:
{
antnum=1;
ant.SetPos(13);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
case 1:
{
antnum=2;
ant.SetPos(55);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
case 2:
{
antnum=3;
ant.SetPos(83);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
};
InitGrid();
Draw();
}
void CAIAntDlg::OnSingle()
{
// TODO: Add your control notification handler code here
m_auto.EnableWindow(false);
m_reset.EnableWindow(false);
m_aiantchoice.EnableWindow(false);
m_single.SetWindowText("下一步");
CClientDC dc(this),*mydc;
mydc=&dc;
if(ant.GetTryDir()==4)//是否蚂蚁已经探测过四周
{
AfxMessageBox("结束");
m_auto.EnableWindow(true);
m_reset.EnableWindow(true);
m_aiantchoice.EnableWindow(true);
m_single.SetWindowText("单步演示");
}
else
{
int dir,pos,frontpos;
dir=ant.GetDir();
pos=ant.GetPos();
//求前方位置
frontpos=-1;
if((dir==1)&&(pos%12!=11))
frontpos=pos+1;
if((dir==2)&&(pos<132))
frontpos=pos+12;
if((dir==3)&&(pos%12!=1))
frontpos=pos-1;
if((dir==4)&&(pos>11))
frontpos=pos-12;
if(frontpos!=-1)//可以向前
{
switch (grid.Get(frontpos))
{
case 0: //前方无路
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
break;
};
case 1://前方有路,且状态为关
{
grid.Set(frontpos,2);
DrawGrid(mydc,frontpos,2);
break;
};
case 2://前方有路,且状态为开
{
if( ((antnum==1)&&(ant.GetPos()==13))||((antnum==2)&&(ant.GetPos()==55))||((antnum==3)&&(ant.GetPos()==83)) )
{
DrawGrid(mydc,ant.GetPos(),0);
}
else
{
DrawGrid(mydc,ant.GetPos(),2);
};
grid.Set(frontpos,3);
ant.SetPos(frontpos);
ant.SetTryDir(0);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
break;
};
case 3: //前方有路,但走过
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
break;
}
}
}
else//前方不可走
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
}
};
}
void CAIAntDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this),*mydc;
mydc=&dc;
if(ant.GetTryDir()==4)//是否蚂蚁已经探测过四周
{
KillTimer(1);
AfxMessageBox("结束");
m_single.EnableWindow(true);
m_reset.EnableWindow(true);
m_aiantchoice.EnableWindow(true);
}
else
{
int dir,pos,frontpos;
dir=ant.GetDir();
pos=ant.GetPos();
//求前方位置
frontpos=-1;
if((dir==1)&&(pos%12!=11))
frontpos=pos+1;
if((dir==2)&&(pos<132))
frontpos=pos+12;
if((dir==3)&&(pos%12!=1))
frontpos=pos-1;
if((dir==4)&&(pos>11))
frontpos=pos-12;
if(frontpos!=-1)//可以向前
{
switch (grid.Get(frontpos))
{
case 0: //前方无路
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
break;
};
case 1://前方有路,且状态为关
{
grid.Set(frontpos,2);
DrawGrid(mydc,frontpos,2);
break;
};
case 2://前方有路,且状态为开
{
if( ((antnum==1)&&(ant.GetPos()==13))||((antnum==2)&&(ant.GetPos()==55))||((antnum==3)&&(ant.GetPos()==83)) )
{
DrawGrid(mydc,ant.GetPos(),0);
}
else
{
DrawGrid(mydc,ant.GetPos(),2);
};
grid.Set(frontpos,3);
ant.SetPos(frontpos);
ant.SetTryDir(0);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
break;
};
case 3: //前方有路,但走过
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
break;
}
}
}
else//前方不可走
{
int trydir=ant.GetTryDir();
ant.SetTryDir(trydir+1);
if(dir==4)
ant.SetDir(1);
else
ant.SetDir(dir+1);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
DrawCutline(mydc,470,35,ant.GetDir()+3);
}
};
CDialog::OnTimer(nIDEvent);
}
void CAIAntDlg::OnSelchangeComboAiant()
{
// TODO: Add your control notification handler code here
int i=m_aiantchoice.GetCurSel();
switch (i)
{
case 0:
{
antnum=1;
ant.SetPos(13);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
case 1:
{
antnum=2;
ant.SetPos(55);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
case 2:
{
antnum=3;
ant.SetPos(83);
ant.SetDir(1);
ant.SetTryDir(0);
break;
};
};
OnReset();
}
void CAIAntDlg::InitGrid()
{
for(int i=0;i<144;i++)
grid.Set(i,0);
grid.Set(25,1); grid.Set(28,1); grid.Set(29,1); grid.Set(30,1); grid.Set(37,1);
grid.Set(40,1); grid.Set(42,1); grid.Set(49,1); grid.Set(50,1); grid.Set(51,1);
grid.Set(52,1); grid.Set(54,1); grid.Set(66,1); grid.Set(78,1); grid.Set(90,1);
grid.Set(91,1); grid.Set(92,1); grid.Set(93,1); grid.Set(94,1); grid.Set(95,1);
grid.Set(100,1);grid.Set(101,1);grid.Set(102,1);grid.Set(105,1);grid.Set(112,1);
grid.Set(117,1);grid.Set(124,1);grid.Set(125,1);grid.Set(126,1);grid.Set(127,1);
grid.Set(128,1);grid.Set(129,1);
}
void CAIAntDlg::Draw()
{
CClientDC dc(this),*mydc;
mydc=&dc;
//画棋盘
for(int i=0;i<144;i++)
{
if(grid.Get(i)==0)
DrawGrid(mydc,i,0);
else if(grid.Get(i)==1)
DrawGrid(mydc,i,1);
else
DrawGrid(mydc,i,2);
};
//画蚂蚁及方向
if(antnum!=0)
{
DrawCutline(mydc,470,35,ant.GetDir()+3);
DrawGrid(mydc,ant.GetPos(),ant.GetDir()+2);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -