用面向对象的方法改了一下
分高了一些,但觉得还是挺烂的
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
#define DOWN 0
#define RIGHT 1
#define UP 2
#define LEFT 3
class DrawLines
{
int x,y;
int dx,dy;
int direct;
vector<string> result;
void OnLeft();
void OnForward();
public:
DrawLines()
{
int i,j;
result.resize(20);
x=0;
y=0;
dx=0;
dy=1;
direct=DOWN;
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
result[i]+=".";
}
}
}
vector<string> execute(vector<string> &str);
};
void DrawLines::OnLeft()
{
direct++;
direct%=4;
switch(direct)
{
case DOWN: dx=0;dy=1;break;
case RIGHT: dx=1;dy=0;break;
case UP: dx=0;dy=-1;break;
case LEFT: dx=-1;dy=0;break;
default:break;
}
}
void DrawLines::OnForward()
{
x+=dx;
y+=dy;
result[y][x]='X';
}
vector<string> DrawLines::execute(vector<string> &strs)
{
int num=0;
int i,j;
for(i=0;i<strs.size();i++)
{
if(strs[i][0]=='L')
OnLeft();
if(strs[i][0]=='F')
{
if(strlen(strs[i].c_str())==10)
num=(strs[i][8]-48)*10+strs[i][9]-48;
else if(strlen(strs[i].c_str())==9)
num=strs[i][8]-48;
if(num!=0)result[0][0]='X';
for(j=0;j<num;j++)
OnForward();
}
}
return result;
}