以往多次的有关问题都没人帮小弟我搞出来现在在来个

以往多次的问题都没人帮我搞出来现在在来个在线等
编写类LOGO语言。
LOGO语言又称作海龟语言,由操作者通过一行命令来控制一个三角形的海龟移动,海龟的移动轨迹可以形成各种图案。
一行的命令可以包括多个子命令,按照从左到右的顺序执行,相关的命令有:
命令格式 命令范例 范例含义
前进   <长度> 前进   100 海龟前进100个点
后退   <长度> 后退   100 海龟后退100个点
左转   <角度> 左转   90 左转90度
右转   <角度> 右转   90 右转90度
抬起 抬起 海龟抬起画笔,不显示移动轨迹
放下 放下 海龟放下画笔,显示移动轨迹
隐藏 隐藏 隐藏海龟三角形
显示 显示 显示海龟三角形
重复   次数   (…) 重复   4   (前进   10   左转   90) 海龟画一个边长为10的正方形
清屏 清屏 海龟回到坐标原点,清除所有轨迹
提示,如果到达屏幕边缘继续前进,海龟将自动跳到屏幕的另一端。

试编写一个可以执行上述命令和命令组合的Win32程序,要求使用Visual   C++完成,without   MFC,并提供源代码。
用一行语句操纵海龟完成下边显示的图形。最外围一个实心圆,圆里面有一个实心正五角星,五角星的最里面有一个虚线圆,图形的大小和位置随意。一行命令完成。


------解决方案--------------------
给个伪代码如下,自己填空吧:
const double A0=Pi/180.0;

class Logo{
enum {UP=0,DOWN=1,SHOW=2}Flag;
Pen *pen;
int x,y,a,c;
void Move(int dx,int dy){ x += dx; y += dy; x%=SCREEN_WIDTH; y%=SCREEN_HEIGHT;}
void LineTo(int dx,int dy){ pen-> line(x,y,x+dx,y+dy);}
void Go(int n){
double ang = A0*a
int dx = n*cos(ang), dy = n*sin(ang);
if(Flag&DOWN)
LineTo(dx,dy);
Move(dx,dy);}
Mark(){
int a1 = 90-a;
double da = A0*a, da1 = A0*a1;
int dx1 = 3*cos(da),dy1 = 3*sin(da), dx2 = 2*cos(da1), dy2 = 2*sin(da1);
int A,B,C,D,E,F;
pen-> line(x,y,A=x+dx1,B=y+dy1);
pen-> line(x,y,C=x+dx2,D=y+dy2);
pen-> line(x,y,E=x-dx2,F=y-dy2);
pen-> line(A,B,C,D);
pen-> line(A,B,E,F);
pen-> line(C,D,E,F);}
struct Command{
int n;
bool (*porc)(int m)[];
int dat[];};
public:
bool Up(int n=0){if((Flag&1)==UP)return false;Flag&=0xFFFE;return true;}
bool Down(int n=0){if((Flag&1)==DOWN)return false;Flag|=DOWN;return true;}
bool Forward(int n){
if(n <=0)return false;
Go(n);
return true;}
bool Back(int n){
if(n <=0)return false;
Go(-n);
return true;}
bool Left(int dA){
if(dA> =180||dA <=0)return false;
a += dA;
return true;}
bool Right(int dA){
if(dA> =180||dA <=0)return false;
a -= dA;
return true;}
bool Show(int n=0){if(Flag&SHOW)return false;
Mark();
return true;}
bool Hide(int n=0){if(!(Flag&SHOW))return false;
pen-> color = ~c;
Mark();
pen-> color = c;
return true;}
bool Clear(int n=0){
clear();
x = SCREEN_WIDTH/2;
y = SCREEN_HEIGHT/2;
a = 0;
return true;}
bool Redo(int n,Command *cmd){
if(n <=0||cmd==0)return false;
bool (*p)(int);
for(int i=0;i <n;++i)
for(int j=0,k=cmd-> n;j <k;j++){
p = cmd-> proc[j];
if(!p(cmd-> dat[j]))
return false;}
return true;}
bool ReadCmd();
void Run();
};