1、#include “graphics.h“#include “math.h“#include “stdio.h“#include “conio.h“#include “bios.h“#include “dos.h“#include “io.h“char key_state128,key_pressed128;void interrupt far (*OldInt9Handler)();enum modes AUTO, HIGH;enum bool FALSE=0, TRUE=1;#define MODE enum modes#define BOOL enum bool#define K_ENT
2、ER 0x1c#define K_DOWN 0x50#define K_UP 0x48#define K_SPACE 0x39#define K_ESC 0x01#define K_C 0x2e#define K_A 0x1e#define K_X 0x2d#define UP 0#define DOWN 1#define PI 3.1415#define MODE_KEY 0#define MODE_CMD 1#define MAX_CMD_NUM 15/*Instruction define*/#define EXIT 0#define CHM 1#define PU 2#define P
3、D 3#define CHC 4#define CHHT 5#define ADTH 6#define FW 7#define BW 8#define CLR 9#define CHP 10enum hlpmsgALL_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;#define HLPMSG enum hlpmsgtypedef int penState;typedef s
4、tructfloat v,h;aPoint;typedef structfloat heading;penState pen;int color;aPoint Pos;newTurtle;newTurtle turtle;char GMODE=MODE_CMD;char CmdWordsMAX_CMD_NUM4=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, ,;char CmdTmp4;unsigned char N
5、umTmp4;unsigned char NumTmp14;typedef struct nodeint color;int x1, x2, y1, y2;NODE;/*-*/*other functions*/void OpenSecCmdWnd()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);void CloseSecCmd
6、Wnd()setfillstyle(SOLID_FILL, 0);bar(511, 250, 595, 275);int Cvt4CToInt(int i)if(i=0)return NumTmp0+NumTmp1*10+NumTmp2*100+NumTmp3*1000-53328;elsereturn NumTmp10+NumTmp11*10+NumTmp12*100+NumTmp13*1000-53328;int GetAn4BInterger()int i, j;union REGS regs;unsigned char t;regs.h.ah=0x07;IN_AGAIN:for(i=0
7、;i57 | t0;j-)NumTmpj=NumTmpj-1;NumTmp0=t;printf(“%c“, t);while(bioskey(1)=0) ;if(bioskey(1)!=0x1c0d)bioskey(0);CloseSecCmdWnd();OpenSecCmdWnd();goto IN_AGAIN;OUT:return Cvt4CToInt(0);void StoreTwo4BInterger()int i, j;union REGS regs;unsigned char t;regs.h.ah=0x07;IN_AGAIN1:for(i=0;i57 | t0;j-)NumTmp
8、j=NumTmpj-1;NumTmp0=t;printf(“%c“, t);while(bioskey(1)=0) ;if(bioskey(1)!=0x1c0d)int86(0x21, t=regs.h.al;if(t=44)printf(“%c“, t);goto OUT1;CloseSecCmdWnd();OpenSecCmdWnd();goto IN_AGAIN1;OUT1:for(i=0;i57 | t0;j-)NumTmp1j=NumTmp1j-1;NumTmp10=t;printf(“%c“, t);while(bioskey(1)=0) ;if(bioskey(1)!=0x1c0
9、d)bioskey(0);CloseSecCmdWnd();OpenSecCmdWnd();goto IN_AGAIN1;OVER: ;void far interrupt NewInt9(void)unsigned char ScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp | 0x80);outportb(0x61,temp if(ScanCodekey_stateScanCode=0;elsekey_stateScanCode=1;key_pressedScanCode=1;outport
10、b(0x20,0x20);void InstallKeyboard(void)int i;for(i=0;i425) newPos.h=65;if(newPos.h425) newPos.v=75;if(newPos.v425)if(turtle.pen=DOWN) sc=TRUE;p.h=65; turtle.pen=UP;if(p.h425)if(turtle.pen=DOWN) sc=TRUE;p.v=75; turtle.pen=UP;if(p.v360)while(turtle.heading360) turtle.heading-=360;if(turtle.heading0)wh
11、ile(turtle.heading0) 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();DisTStat
12、e();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(GM
13、ODE=MODE_KEY) GMODE=MODE_CMD;else GMODE=MODE_KEY;for(i=0;i4;i+)CmdTmpi=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)