海龟做图代码.docx

上传人:b****0 文档编号:17099979 上传时间:2023-07-22 格式:DOCX 页数:26 大小:19.51KB
下载 相关 举报
海龟做图代码.docx_第1页
第1页 / 共26页
海龟做图代码.docx_第2页
第2页 / 共26页
海龟做图代码.docx_第3页
第3页 / 共26页
海龟做图代码.docx_第4页
第4页 / 共26页
海龟做图代码.docx_第5页
第5页 / 共26页
海龟做图代码.docx_第6页
第6页 / 共26页
海龟做图代码.docx_第7页
第7页 / 共26页
海龟做图代码.docx_第8页
第8页 / 共26页
海龟做图代码.docx_第9页
第9页 / 共26页
海龟做图代码.docx_第10页
第10页 / 共26页
海龟做图代码.docx_第11页
第11页 / 共26页
海龟做图代码.docx_第12页
第12页 / 共26页
海龟做图代码.docx_第13页
第13页 / 共26页
海龟做图代码.docx_第14页
第14页 / 共26页
海龟做图代码.docx_第15页
第15页 / 共26页
海龟做图代码.docx_第16页
第16页 / 共26页
海龟做图代码.docx_第17页
第17页 / 共26页
海龟做图代码.docx_第18页
第18页 / 共26页
海龟做图代码.docx_第19页
第19页 / 共26页
海龟做图代码.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

海龟做图代码.docx

《海龟做图代码.docx》由会员分享,可在线阅读,更多相关《海龟做图代码.docx(26页珍藏版)》请在冰点文库上搜索。

海龟做图代码.docx

海龟做图代码

#include"graphics.h"

#include"math.h"

#include"stdio.h"

#include"conio.h"

#include"bios.h"

#include"dos.h"

#include"io.h"

charkey_state[128],key_pressed[128];

voidinterruptfar(*OldInt9Handler)();

enummodes{AUTO,HIGH};

enumbool{FALSE=0,TRUE=1};

#defineMODEenummodes

#defineBOOLenumbool

#defineK_ENTER0x1c

#defineK_DOWN0x50

#defineK_UP0x48

#defineK_SPACE0x39

#defineK_ESC0x01

#defineK_C0x2e

#defineK_A0x1e

#defineK_X0x2d

#defineUP0

#defineDOWN1

#definePI3.1415

#defineMODE_KEY0

#defineMODE_CMD1

#defineMAX_CMD_NUM15

/*Instructiondefine*/

#defineEXIT0

#defineCHM1

#definePU2

#definePD3

#defineCHC4

#defineCHHT5

#defineADTH6

#defineFW7

#defineBW8

#defineCLR9

#defineCHP10

enumhlpmsg{ALL_CMD,IN_ERROR,PU_OK,PD_OK,CHC_OK,CHP_OK,CHM_OK,

           FW_OK,BW_OK,CHHT_OK,ADTH_OK,CLR_OK,M_KEY,IN_COLOR,

           IN_POS,IN_HEAD,IN_STEPS};

#defineHLPMSGenumhlpmsg

typedefintpenState;

typedefstruct{floatv,h;}aPoint;

typedefstruct

{

   floatheading;

   penState pen;

   int      color;

   aPoint   Pos;

}newTurtle;

newTurtleturtle;

charGMODE=MODE_CMD;

charCmdWords[MAX_CMD_NUM][4]={

               {'E','X','I','T'},{'C','H','M',''},

               {'P','U','',''},{'P','D','',''},

               {'C','H','C',''},{'C','H','H','T'},

               {'A','D','T','H'},{'F','W','',''},

               {'B','W','',''},{'C','L','R',''},

               {'C','H','P',''},

                 };

charCmdTmp[4];

unsignedcharNumTmp[4];

unsignedcharNumTmp1[4];

typedefstructnode

{

   intcolor;

   intx1,x2,y1,y2;

}NODE;

/*---------------------------------------*/

/*otherfunctions*/

voidOpenSecCmdWnd()

{

   setcolor

(2);

   rectangle(510,250,595,275);

   while(bioskey

(1)==0)

   {

       setcolor

(2);

       line(513,270,518,270);

       setcolor(0);

       line(513,270,518,270);

   }

   window(66,17,66,17);

}

voidCloseSecCmdWnd()

{

   setfillstyle(SOLID_FILL,0);

   bar(511,250,595,275);

}

intCvt4CToInt(inti)

{

   if(i==0)

       returnNumTmp[0]+NumTmp[1]*10+NumTmp[2]*100+NumTmp[3]*1000-53328;

   else

       returnNumTmp1[0]+NumTmp1[1]*10+NumTmp1[2]*100+NumTmp1[3]*1000-53328;

}

intGetAn4BInterger()

{

   inti,j;

   unionREGSregs;

   unsignedchart;

   regs.h.ah=0x07;

   IN_AGAIN:

   for(i=0;i<4;i++)

       NumTmp[i]=48;

   for(i=0;i<4;i++)

   {

       IN:

       while(bioskey

(1)==0){;};

       if(bioskey

(1)==0x1c0d)

       {bioskey(0);gotoOUT;}

       int86(0x21,®s,®s);

       t=regs.h.al;

       if(t>57||t<48)gotoIN;

       else

       {

           for(j=3;j>0;j--)

               NumTmp[j]=NumTmp[j-1];

           NumTmp[0]=t;

           printf("%c",t);

       }

   }

   while(bioskey

(1)==0){;}

   if(bioskey

(1)!

=0x1c0d)

   {

       bioskey(0);

       CloseSecCmdWnd();

       OpenSecCmdWnd();

       gotoIN_AGAIN;

   }

   OUT:

   returnCvt4CToInt(0);

}

voidStoreTwo4BInterger()

{

   inti,j;

   unionREGSregs;

   unsignedchart;

   regs.h.ah=0x07;

   IN_AGAIN1:

   for(i=0;i<4;i++)

   {

       NumTmp[i]=48;

       NumTmp1[i]=48;

   }

   for(i=0;i<4;i++)

   {

       IN1:

       while(bioskey

(1)==0){;};

       if(bioskey

(1)==0x1c0d)

       {bioskey(0);gotoOVER;}

       int86(0x21,®s,®s);

       t=regs.h.al;

       if(t==44)

       {

           printf("%c",t);

           gotoOUT1;

       }

       if(t>57||t<48)gotoIN1;

       else

       {

           for(j=3;j>0;j--)

               NumTmp[j]=NumTmp[j-1];

           NumTmp[0]=t;

           printf("%c",t);

       }

   }

   while(bioskey

(1)==0){;}

   if(bioskey

(1)!

=0x1c0d)

   {

       int86(0x21,®s,®s);

       t=regs.h.al;

       if(t==44)

       {

           printf("%c",t);

           gotoOUT1;

       }

       CloseSecCmdWnd();

       OpenSecCmdWnd();

       gotoIN_AGAIN1;

   }

   OUT1:

   for(i=0;i<4;i++)

       NumTmp1[i]=48;

   for(i=0;i<4;i++)

   {

       IN2:

       while(bioskey

(1)==0){;};

       if(bioskey

(1)==0x1c0d)

       {bioskey(0);gotoOVER;}

       int86(0x21,®s,®s);

       t=regs.h.al;

       if(t>57||t<48)gotoIN2;

       else

       {

           for(j=3;j>0;j--)

               NumTmp1[j]=NumTmp1[j-1];

           NumTmp1[0]=t;

           printf("%c",t);

       }

   }

   while(bioskey

(1)==0){;}

   if(bioskey

(1)!

=0x1c0d)

   {

       bioskey(0);

       CloseSecCmdWnd();

       OpenSecCmdWnd();

       gotoIN_AGAIN1;

   }

   OVER:

 ;

}

voidfarinterruptNewInt9(void)

{

   unsignedcharScanCode,temp;

   ScanCode=inportb(0x60);

   temp=inportb(0x61);

   outportb(0x61,temp|0x80);

   outportb(0x61,temp&0x7f);

   if(ScanCode&0x80)

   {

       ScanCode&=0x7f;

           key_state[ScanCode]=0;

   }

   else

   {

       key_state[ScanCode]=1;

       key_pressed[ScanCode]=1;

   }

   outportb(0x20,0x20);

};

voidInstallKeyboard(void)

{

   inti;

   for(i=0;i<128;i++)

   key_state[i]=key_pressed[i]=0;

   OldInt9Handler=getvect(9);

   setvect(9,NewInt9);

}

voidShutDownKeyboard(void)

{

   setvect(9,OldInt9Handler);

}

intGetKey(intScanCode)

{

   intres;

   res=key_state[ScanCode]|key_pressed[ScanCode];

   key_pressed[ScanCode]=0;

   returnres;

}

voidInitMyGraph(MODEm)

{

   intgraphdriver,graphmode;

   if(m==AUTO)

       graphdriver=DETECT;

   elseif(m==HIGH)

   {

       graphdriver=VGA;

       graphmode=VGAHI;

   }

   else

   {

       printf("Wrongprameterof\"init_mygraph();\"");

       return;

   }

   /*registerbgidriver(EGAVGA_driver);*/

   initgraph(&graphdriver,&graphmode,"");

};

intGetKey1()

{

   unionREGSrg;

   rg.h.ah=0;

   int86(0x16,&rg,&rg);

   returnrg.h.ah;

};

void InputNote()

{

   while(bioskey

(1)==0)

   {

       setcolor(9);

       line(467,270,472,270);

       setcolor(0);

       line(467,270,472,270);

   }

}

voidGetACmd()

{

   inti,j;

   window(60,17,60,17);

   InputNote();

   for(i=0;i<4;i++)

   {

          AGAIN:

          while(bioskey

(1)==0)

          {};

          if(bioskey

(1)==0x0f09){bioskey(0);gotoAGAIN;}

          if(bioskey

(1)==0x0e08){bioskey(0);gotoAGAIN;}

          if(bioskey

(1)==0x1c0d)

          {

               for(;i<4;i++)CmdTmp[i]='';

               break;

          };

          CmdTmp[i]=getch();

          printf("%c",CmdTmp[i]);

   }

}

intDecideCmd()

{

   inti,j,r=MAX_CMD_NUM;

   for(i=0;i

   {

       if(CmdWords[i][0]==CmdTmp[0])

       {

           r=i;

           for(j=1;j<4;j++)

           {

               if(CmdWords[i][j]!

=CmdTmp[j])

               {

                   r=MAX_CMD_NUM;

                   break;

               }

           }

       }

       if(r!

=MAX_CMD_NUM)break;

   }

   returnr;

}

/*displaytheturtletoeveryprameterofitsown*/

voidDisTurtle()

{

   floatx,y,h,v,x1,y1;

   circle(turtle.Pos.h-8,turtle.Pos.v,4);

   circle(turtle.Pos.h+8,turtle.Pos.v,4);

   circle(turtle.Pos.h,turtle.Pos.v+8,4);

   circle(turtle.Pos.h,turtle.Pos.v-8,4);

   circle(turtle.Pos.h,turtle.Pos.v,15);

   h=18*cos(turtle.heading*PI/180);

   v=18*sin(turtle.heading*PI/180);

   x=turtle.Pos.h+h;

   y=turtle.Pos.v-v;

   circle(x,y,3);

   x=turtle.Pos.h-h;

   y=turtle.Pos.v+v;

   x1=turtle.Pos.h-15*cos(turtle.heading*PI/180+PI/45);

   y1=turtle.Pos.v+15*sin(turtle.heading*PI/180+PI/45);

   line(x,y,x1,y1);

   x1=turtle.Pos.h-15*cos(turtle.heading*PI/180-PI/45);

   y1=turtle.Pos.v+15*sin(turtle.heading*PI/180-PI/45);

   line(x,y,x1,y1);

}

voidDisHelpMenu()

{

   setcolor

(2);

   outtextxy(465,55,"HELP:

");

   outtextxy(465,300,"TURTLESTATE:

");

   outtextxy(465,240,"STRUCTIONINPUT:

");

   rectangle(465,250,510,275);

}

voidDisTState()

{

   setfillstyle(SOLID_FILL,8);

   bar(465,310,595,445);

   setcolor

(1);

   outtextxy(480,315,"Pen:

");

   outtextxy(480,328,"GMode:

");

   outtextxy(480,341,"Color:

");

   outtextxy(480,353,"Heading:

");

   outtextxy(480,365,"Position");

   outtextxy(490,377,"x:

");

   outtextxy(490,389,"y:

");

   outtextxy(480,401,"XRange:

");

   outtextxy(480,422,"YRange;");

   setcolor(7);

   outtextxy(520,413,"0~360");

   outtextxy(520,435,"0~350");

}

voidRenovateTState()

{

   char*t;

   setfillstyle(SOLID_FILL,0);

   bar(520,315,599,322);

   setcolor(7);

   if(turtle.pen==UP)

       outtextxy(520,315,"UP ");

   else

       outtextxy(520,315,"DOWN");

   bar(536,328,599,335);

   if(GMODE==MODE_KEY)

       outtextxy(536,328,"Key");

   else

       outtextxy(536,328,"Command");

   bar(550,353,599,360);

   sprintf(t,"%.1f",turtle.heading);

   outtextxy(550,353,t);

   bar(515,377,599,384);

   sprintf(t,"%.2f",turtle.Pos.h-65);

   outtextxy(515,377,t);

   bar(515,389,599,396);

   sprintf(t,"%.2f",turtle.Pos.v-75);

   outtextxy(515,389,t);

   setfillstyle(SOLID_FILL,turtle.color);

   bar(536,341,590,348);

   if(turtle.color==8)

   {

       setcolor(7);

       rectangle(536,341,590,348);

   }

}

intGetAColor()

{

   intc;

   OpenSecCmdWnd();

   c=GetAn4BInterger();

   returnc;

}

floatGetAnAngle()

{

   floath;

   OpenSecCmdWnd();

   h=GetAn4BInterger();

   returnh;

}

floatGetX(floats)

{

   floatx;

   x=turtle.Pos.h+s*cos(turtle.heading*PI/180);

   returnx;

}

floatGetY(floats)

{

   floaty;

   y=turtle.Pos.v-s*si

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2