题目:乌龟背着毛笔在20*20单位的地上爬。笔尖朝上不显示痕迹;朝下显示痕迹。指令如下:
1、笔尖朝上
2、笔尖朝下
3、向右转
4、向左转
(5,x)、向前移动x个格。触壁则停。
6、打印痕迹
9、数据结束标志
// No.test-7.23.cpp : 海龟图
//
#include "stdafx.h"
#include <iostream>
using namespace std;
enum totorseDirection{TOP,BOTTOM,LEFT,RIGHT};//定义乌龟的方向;
enum penDirection{PenTOP,PenBOTTOM};//定义笔的方向;
//定义数组元素结构;
struct elem
{
int totorseDirection;
int penDirection;
bool isShow;//是否留下痕迹;
};
void howToDo(int []);
int _tmain(int argc, _TCHAR* argv[])
{
int x=0;//当前乌龟的行数;
int y=0;//当前乌龟的列数;
int tdirec=RIGHT;//当前乌龟的方向;
int pdire=PenTOP;//当前笔的方向;
bool isShow=false;//是否显示痕迹;
elem path[20][20];//声明elem类型数组20*20并进行必要的初始化;
for (int i=0;i<20;i++)
{
for(int j=0;j<20;j++)
{
path[i][j].isShow=isShow;
}
}
int instructions [11][2]={{2},{5,12},{3},{5,12},{3},{5,12},{3},{5,12},{1},{6},{9}};//指令集合;
for (int i=0;i<11;i++)
{
int num=instructions[i][0];
switch (num)
{
case 1:
isShow=false;//笔尖朝上;
path[x][y].totorseDirection=tdirec;
path[x][y].penDirection=pdire;
path[x][y].isShow=isShow;
break;
case 2:
pdire=PenBOTTOM;//笔尖朝下;
isShow=true;//显示痕迹;
path[x][y].totorseDirection=tdirec;
path[x][y].penDirection=pdire;
path[x][y].isShow=isShow;
break;
case 3:
//向右转;
if (tdirec==RIGHT)
{
tdirec=BOTTOM;
}
else if(tdirec==BOTTOM)
{
tdirec=LEFT;
}else if (tdirec==LEFT)
{
tdirec=TOP;
}else
{
tdirec=RIGHT;
}
break;
case 4:
//向左转;
if (tdirec==RIGHT)
{
tdirec=TOP;
}
else if(tdirec==BOTTOM)
{
tdirec=RIGHT;
}else if (tdirec==LEFT)
{
tdirec=BOTTOM;
}else
{
tdirec=LEFT;
}
path[x][y].totorseDirection=tdirec;
path[x][y].penDirection=pdire;
path[x][y].isShow=isShow;
break;
case 5:
if (tdirec==RIGHT)
{
int temp=y;
y+=12;
for (int i=temp;i<y;i++)
{
path[x][i].isShow=true;
}
if (y>=20)
{
y=20;
}
}
else if(tdirec==BOTTOM)
{
int temp=x;
x+=12;
for (int i=temp;i<x;i++)
{
path[i][y].isShow=true;
}
if (x>=20)
{
x=20;
}
}else if (tdirec==LEFT)
{
int temp=y;
y-=12;
for (int i=temp;i>y;i--)
{
path[x][i].isShow=true;
}
if (x<=0)
{
x=0;
}
}else
{
int temp=x;
x-=12;
for (int i=temp;i>x;i--)
{
path[i][y].isShow=true;
}
if (y<=0)
{
y=0;
}
}
path[x][y].totorseDirection=tdirec;
path[x][y].penDirection=pdire;
path[x][y].isShow=isShow;
break;
case 6:
for (int i=0;i<20;i++)
{
for (int j=0;j<20;j++)
{
if (path[i][j].isShow)
{
cout<<"*";
}else
{
cout<<" ";
}
}
cout<<endl;
}
break;
case 9:
break;
}
//cout<<instructions[i][0]<<endl;
}
system("pause");
return 0;
}
效果如下: