⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 海龟作图.c

📁 用c语言实现海龟作图,源码质量高,是本人学c时写的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    setfillstyle(SOLID_FILL, 8);
    bar(465, 65, 595, 235);
    switch(hm)
    {
        case ALL_CMD:
            {
                setcolor(1);
                outtextxy(470, 70, "Cmds Listed:");
                setcolor(7);
                outtextxy(490, 85, "PU, PD, CHC,");
                outtextxy(490, 100, "FW, BW, CHP,");
                outtextxy(490, 115, "CHHT, ADTH,");
                outtextxy(490, 130, "CLR, CHM,");
                outtextxy(490, 145, "EXIT");
                setcolor(1);
                outtextxy(470, 175, "Make sure:");
                setcolor(7);
                outtextxy(480, 190, "CAPITAL");
                setcolor(1);
                outtextxy(545, 190, "input!");
                break;
            }
        case IN_ERROR:
            {
                setcolor(4);
                outtextxy(480, 140, "Illegal Cmd!!!"); break;
            }
        case PU_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "Pen Uo Ok!"); break;
            }
        case PD_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "Pen Down Ok!"); break;
            }
        case FW_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "ForWard Ok!"); break;
            }
        case BW_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "BackWard Ok!"); break;
            }
        case CHC_OK:
            {
                setcolor(14);
                outtextxy(470, 130, "ChaNge Color");
                outtextxy(520, 160, "OK!");
                setfillstyle(SOLID_FILL, 8);
                bar(535, 160, 590, 170);
                outtextxy(535, 160, "!");
                break;
            }
        case CHP_OK:
            {
                setcolor(14);
                outtextxy(470, 140, "ChaNge");
                setfillstyle(SOLID_FILL, 8);
                bar(470, 140, 590, 159);
                outtextxy(470, 140, "ChaNge Postion");
                outtextxy(520, 160, "Ok!"); break;
            }
        case CLR_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "CLeaR Ok!"); break;
            }
        case CHHT_OK:
            {
                setcolor(14);
                outtextxy(470, 140, "ChaNge Head To-");
                outtextxy(520, 160, "Ok!"); break;
            }
        case ADTH_OK:
            {
                setcolor(14);
                outtextxy(480, 140, "ADd To Head");
                outtextxy(520, 160, "Ok!"); break;
            }
        case M_KEY:
            {
                setcolor(1);
                outtextxy(470, 70, "Key in use:");
                setcolor(7);
                outtextxy(470, 80, "UP ARROW:");
                setcolor(1);
                outtextxy(520, 90, "Forword");
                setcolor(7);
                outtextxy(470, 100, "DOWN ARROW:");
                setcolor(1);
                outtextxy(520, 110, "Backword");
                setcolor(7);
                outtextxy(470, 120, "A:");
                setcolor(1);
                outtextxy(490, 120, "Change color");
                setcolor(7);
                outtextxy(470, 130, "ENTER:");
                setcolor(1);
                outtextxy(469, 140, "Change pen state");
                setcolor(7);
                outtextxy(470, 150, "SPACE:");
                setcolor(1);
                outtextxy(480, 160, "Change heading");
                setcolor(7);
                outtextxy(470, 170, "C:");
                setcolor(1);
                outtextxy(490, 170, "Clear draw");
                setcolor(7);
                outtextxy(470, 180, "X:");
                setcolor(1);
                outtextxy(490, 180, "Exit");
                setcolor(7);
                outtextxy(470, 190, "ESC:");
                setcolor(1);
                outtextxy(490, 200, "Return to");
                outtextxy(490, 210, "Command Mode");
                break;
            }
        case IN_COLOR:
            {
                setcolor(1);
                outtextxy(470, 100, "Graph");
                outtextxy(490, 115, "Driver&Mode:");
                setcolor(7);
                outtextxy(490, 130, "VGA&VGAHI");
                outtextxy(470, 150, "Input a number");
                outtextxy(470, 165, "between 1~15");
                setcolor(12);
                outtextxy(470, 185, "Thanks");
                setcolor(13);
                outtextxy(540, 185, ":)");
                setcolor(12);
                outtextxy(470, 200, "for cooperation!");
                break;
            }
        case IN_HEAD:
            {
                setcolor(7);
                outtextxy(480, 140, "Using degrees!");
                break;
            }
        case IN_POS:
            {
                setcolor(7);
                outtextxy(470, 70, "With \",\"");
                outtextxy(470, 85, "between x and y");
                setcolor(1);
                outtextxy(470, 105, "Example:");
                setcolor(7);
                outtextxy(490, 120, "24 166");
                outtextxy(470, 140, "Best Within");
                outtextxy(470, 155, "the X&Y range");
                outtextxy(520, 170, "below!");
                setcolor(12);
                outtextxy(470, 185, "Thanks");
                setcolor(13);
                outtextxy(540, 185, ":)");
                setcolor(12);
                outtextxy(470, 200, "for cooperation!");
                break;
            }
        case IN_STEPS:
            {
                setcolor(7);
                outtextxy(470, 110, "Best Within");
                outtextxy(470, 125, "the X&Y range");
                outtextxy(520, 140, "below!");
                setcolor(12);
                outtextxy(470, 155, "Thanks");
                setcolor(13);
                outtextxy(540, 155, ":)");
                setcolor(12);
                outtextxy(470, 170, "for cooperation!");
                break;
            }
    }

}
/*---------------------------------------*/

void StartTurtleGraphics()
{
    setcolor(2);
    rectangle(10, 10, 630, 470);
    line(40, 40, 600, 40);
    outtextxy(70, 30, "MyName: CSDN");
    outtextxy(220, 30, "Experiment Num: 008");
    outtextxy(420, 30, "Question Num: 008");
    rectangle(40, 50, 450, 450);
    rectangle(460, 50, 600, 450);
    rectangle(15, 15, 625, 465);
}
void StartTurtle()
{
    turtle.Pos.h=245;
    turtle.Pos.v=250;
    turtle.color=GREEN;
    turtle.heading=0;
    turtle.pen=UP;
    setcolor(2);
    DisTurtle();
}
void PenUp()
{
    turtle.pen=UP;
}
void PenDown()
{
    turtle.pen=DOWN;
}
int TurtleHeading()
{
    return turtle.heading;
}
aPoint* TurtlePos()
{
    return &turtle.Pos;
}
void MoveTTo(aPoint newPos)
{
    FILE* fp;
    NODE n;
    if(newPos.h>425) newPos.h=65;
    if(newPos.h<65) newPos.h=425;
    if(newPos.v>425) newPos.v=75;
    if(newPos.v<75) newPos.v=425;
    if(turtle.pen==DOWN)
    {
        setcolor(turtle.color);
        n.x1=turtle.Pos.h; n.y1=turtle.Pos.v;
        n.x2=newPos.h; n.y2=newPos.v;
        if((fp=fopen("temp.txt", "ab"))==NULL)
        { ; }
        else
        {
            fwrite(&n, sizeof(NODE), 1, fp);
            fclose(fp);
        }
    }
    setcolor(0); DisTurtle();
    turtle.Pos=newPos;
    setcolor(2); DisTurtle();
}
void Move(int steps)
{
    FILE* fp;
    NODE n;
    aPoint p;
    BOOL sc=FALSE;
    p.h=GetX(steps); p.v=GetY(steps);
    if(p.h>425)
    {
        if(turtle.pen==DOWN) sc=TRUE;
        p.h=65; turtle.pen=UP;
    }
    if(p.h<65)
    {
        if(turtle.pen==DOWN) sc=TRUE;
        p.h=425; turtle.pen=UP;
    }
    if(p.v>425)
    {
        if(turtle.pen==DOWN) sc=TRUE;
        p.v=75; turtle.pen=UP;
    }
    if(p.v<75)
    {
        if(turtle.pen==DOWN) sc=TRUE;
        p.v=425; turtle.pen=UP;
    }
    setcolor(0); DisTurtle();
    if(turtle.pen==UP)
        MoveTTo(p);
    else
    {
        n.color=turtle.color;
        n.x1=(int)turtle.Pos.h;
        n.y1=(int)turtle.Pos.v;
        MoveTTo(p);
        n.x2=(int)turtle.Pos.h;
        n.y2=(int)turtle.Pos.v;
        if((fp=fopen("temp.txt", "ab"))==NULL)
        { ; }
        else
        {
            fwrite(&n, sizeof(NODE), 1, fp);
            fclose(fp);
        }
    }
    setcolor(2); DisTurtle();
    if(sc==TRUE) turtle.pen=DOWN;
}
void Turn(int degrees)
{
    turtle.heading+=degrees;
    if(turtle.heading>360)
        while(turtle.heading>360) {turtle.heading-=360;};
    if(turtle.heading<0)
        while(turtle.heading<0) {turtle.heading+=360;};
}
void TurnTTo(float angle)
{
    turtle.heading=angle;
}
void SetTurtleColor(int color)
{
    turtle.color=color;
}

main()
{
    int i, j, size;
    float t;
    FILE* fp;
    NODE n;
    aPoint p;
    BOOL quit=FALSE;
    HLPMSG hm=ALL_CMD;
    InitMyGraph(HIGH);
    StartTurtleGraphics();
    DisHelpMenu();
    StartTurtle();
    DisTState();
    RenovateTState();
    RenovateDArea();
    while(quit==FALSE)
    {
         hm=ALL_CMD;
         HelpMsg(hm);
         GetACmd();
         if(GetKey1()==K_ENTER)
         {
            i=DecideCmd();
            switch(i)
            {
                case EXIT:
                    {
                        ClearDrawing();
                        quit=TRUE;
                        break;
                    }
                    case MAX_CMD_NUM:
                    {
                        HelpMsg(IN_ERROR);
                        sleep(1);
                        break;
                    }
                case PU:
                    {
                        PenUp();
                        hm=PU_OK;
                        break;
                    }
                case PD:
                    {
                        PenDown();
                        hm=PD_OK;
                        break;
                    }
                case CHM:
                    {
                        if(GMODE==MODE_KEY) GMODE=MODE_CMD;
                        else GMODE=MODE_KEY;
                        for(i=0;i<4;i++)
                        CmdTmp[i]=0;
                        window(60, 17, 60, 17);
                        printf("    ");
                        HelpMsg(M_KEY);
                        InstallKeyboard();
                        while(1)
                        {
                            RenovateDArea();
                            RenovateTState();
                            delay(1000);
                            if(GetKey(K_ESC)) break;
                            if(GetKey(K_UP))
                            {
                                Move(10);
                            }
                            if(GetKey(K_DOWN))
                            {
                                Move(-10);
                            }
                            if(GetKey(K_SPACE))
                            {
                                t=1.0;
                                setcolor(0); DisTurtle();
                                Turn(t);
                                setcolor(2); DisTurtle();
                            }
                            if(GetKey(K_A))
                            {
                                turtle.color++;
                                if(turtle.color>15) turtle.color=1;
                            }
                            if(GetKey(K_ENTER))
                            {
                                if(turtle.pen==UP) turtle.pen=DOWN;
                                else turtle.pen=UP;
                            }
                            if(GetKey(K_C))
                            {
                                ClearDrawing();
                            };
                            if(GetKey(K_X))
                            {
                                ClearDrawing();
                                goto end;
                            }
                        }
                        ShutDownKeyboard();
                        GMODE=MODE_CMD;
                        break;
                    }
                case CHC:
                    {
                        HelpMsg(IN_COLOR);
                        SetTurtleColor(GetAColor());
                        CloseSecCmdWnd();
                        hm=CHC_OK;
                        break;
                    }
                case CHHT:
                    {
                        HelpMsg(IN_HEAD);
                        t=GetAnAngle();
                        setcolor(0); DisTurtle();
                        TurnTTo(t);
                        setcolor(2); DisTurtle();
                        CloseSecCmdWnd();
                        hm=CHHT_OK;
                        break;
                    }
                case ADTH:
                    {
                        HelpMsg(IN_HEAD);
                        t=GetAnAngle();
                        setcolor(0); DisTurtle();
                        Turn(t);
                        setcolor(2); DisTurtle();
                        CloseSecCmdWnd();
                        hm=ADTH_OK;
                        break;
                    }
                case CHP:
                    {
                        HelpMsg(IN_POS);
                        OpenSecCmdWnd();
                        StoreTwo4BInterger();
                        p.h=Cvt4CToInt(0);
                        p.v=Cvt4CToInt(1);
                        p.h+=65; p.v+=75;
                        MoveTTo(p);
                        CloseSecCmdWnd();
                        hm=CHP_OK;
                        break;
                    }
                case FW:
                    {
                        HelpMsg(IN_STEPS);
                        OpenSecCmdWnd();
                        t=GetAn4BInterger();
                        Move((int)t);
                        CloseSecCmdWnd();
                        hm=FW_OK;
                        break;
                    }
                case BW:
                    {
                        HelpMsg(IN_STEPS);
                        OpenSecCmdWnd();
                        t=GetAn4BInterger();
                        Move((int)(-t));
                        CloseSecCmdWnd();
                        hm=BW_OK;
                        break;
                    }
                case CLR:
                    {
                        ClearDrawing();
                        hm=CLR_OK;
                        break;
                    }
            };
        }
        for(i=0;i<4;i++)
        CmdTmp[i]=0;
        window(60, 17, 60, 17);
        printf("    ");
        RenovateDArea();
        RenovateTState();
        if(hm!=ALL_CMD && hm!=IN_ERROR)
        {HelpMsg(hm); sleep(1);}
    }
    end:
    closegraph();
    unlink("temp.txt");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -