乌龟图问题

本文介绍了一个使用C++实现的海龟绘图程序。通过解析一系列指令,如笔尖上下、左右转向及移动等,该程序能在20*20的网格上绘制出指定路径的痕迹。展示了如何通过枚举、结构体和数组来跟踪乌龟的位置和方向,并最终打印出绘制的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:乌龟背着毛笔在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;
}

效果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值