自己的程式想不出來....< >
解一下別人的問題.....< >
//---------------------------------------------------------------------------
#include
#include
#pragma hdrstop
#include "mAntWalk.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm" enum WalkDirection {GoNone,GoUp,GoDown,GoLeft,GoRight};
struct stWalk {
int x,y;
int MostX,MostY;
int steps;
WalkDirection go;
} AntWalk;
TPoint Walk(stWalk *WALK,int STEPS); TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
AntWalk.x = 1;
AntWalk.y = 1;
AntWalk.MostX = 1;
AntWalk.MostY = 1;
AntWalk.steps = 1;
AntWalk.go = GoNone; TPoint pos = Walk(&AntWalk,StrToInt(Edit1->Text));
{
char s[100];
sprintf(s,"Steps=%d, Postion=(%d,%d)",AntWalk.steps,AntWalk.x,AntWalk.y);
Label1->Caption = s;
}
}
//---------------------------------------------------------------------------
TPoint Walk(stWalk *WALK,int STEPS)
{
if(WALK->steps == STEPS)
return(TPoint(WALK->x,WALK->y));
else {
switch(WALK->go) {
case GoNone:
WALK->y++;
WALK->MostY++;
WALK->go = GoRight;
break;
case GoUp:
WALK->y++;
if(WALK->y == WALK->MostY + 1) {
if(WALK->x == 1)
WALK->go = GoRight;
else
WALK->go = GoLeft;
WALK->MostY++;
}
break;
case GoDown:
WALK->y--;
if(WALK->y == 1) {
WALK->go = GoRight;
}
break;
case GoLeft:
WALK->x--;
if(WALK->x == 1) {
WALK->go = GoUp;
}
break;
case GoRight:
WALK->x++;
if(WALK->x == WALK->MostX + 1) {
if(WALK->y == 1)
WALK->go = GoUp;
else
WALK->go = GoDown;
WALK->MostX++;
}
break;
}
WALK->steps++;
return(Walk(WALK,STEPS));
}
}
執行結果: