home *** CD-ROM | disk | FTP | other *** search
- /* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» */
- #include <stdio.h>
- #define EXTERN extern
- #include <typedef.h>
-
-
- int ArrowAngle;
- int Ch, cont;
- PlotArray Arrow;
- double CurrX,CurrY,IncrX,IncrY,Size,Speed;
- double ArrowIncr[16];
-
-
- void MakeArrow()
- {
- Arrow[0] = 0;
- Arrow[1] = 0;
- Arrow[2] = Size;
- Arrow[3] = -Size;
- Arrow[4] = 0;
- Arrow[5] = Size;
- Arrow[6] = -Size;
- Arrow[7] = -Size;
- Arrow[8] = 0;
- Arrow[9] = 0;
- }
-
-
- void MakeMoveTable()
- {
- ArrowIncr[0] = 0;
- ArrowIncr[1] = 1;
- ArrowIncr[2] = -1;
- ArrowIncr[3] = 1;
- ArrowIncr[4] = -1;
- ArrowIncr[5] = 0;
- ArrowIncr[6] = -1;
- ArrowIncr[7] = -1;
- ArrowIncr[8] = 0;
- ArrowIncr[9] = -1;
- ArrowIncr[10] = 1;
- ArrowIncr[11] = -1;
- ArrowIncr[12] = 1;
- ArrowIncr[13] = 0;
- ArrowIncr[14] = 1;
- ArrowIncr[15] = 1;
- }
-
-
- void MoveForward()
- {
- SetColorBlack();
- DrawPolygon(Arrow,0,-5,0,0,0);
- CurrX = CurrX+IncrX;
- CurrY = CurrY+IncrY;
- TranslatePolygon(Arrow,5,IncrX,IncrY);
- SetColorWhite();
- DrawPolygon(Arrow,0,-5,0,0,0);
- }
-
-
- void MoveBack()
- {
- SetColorBlack();
- DrawPolygon(Arrow,0,-5,0,0,0);
- CurrX = CurrX-IncrX;
- CurrY = CurrY-IncrY;
- TranslatePolygon(Arrow,5,-IncrX,-IncrY);
- SetColorWhite();
- DrawPolygon(Arrow,0,-5,0,0,0);
- }
-
-
- void TurnLeft()
- {
- SetColorBlack();
- DrawPolygon(Arrow,0,-5,0,0,0);
- RotatePolygon(Arrow, 5, 45.);
- ArrowAngle = ArrowAngle+1;
- if (ArrowAngle > 7)
- ArrowAngle = 0;
- IncrX = Speed * ArrowIncr[2 * ArrowAngle];
- IncrY = Speed * ArrowIncr[2 * ArrowAngle + 1];
- SetColorWhite();
- DrawPolygon(Arrow,0,-5,0,0,0);
- }
-
-
- void TurnRight()
- {
- SetColorBlack();
- DrawPolygon(Arrow,0,-5,0,0,0);
- RotatePolygon(Arrow, 5, -45.);
- ArrowAngle = ArrowAngle-1;
- if (ArrowAngle < 0)
- ArrowAngle = 7;
- IncrX = Speed * ArrowIncr[ArrowAngle * 2];
- IncrY = Speed * ArrowIncr[ArrowAngle * 2 + 1];
- SetColorWhite();
- DrawPolygon(Arrow,0,-5,0,0,0);
- }
-
-
- main()
- {
-
- InitGraphic();
- DefineWindow(1,0,0,XMaxGlb,YMaxGlb);
- DefineWorld(1, -1000., -1000., 1000., 1000.);
- SelectWorld(1);
- SelectWindow(1);
- SetBackground(0);
-
- Size = 100;
- Speed = 30;
- CurrX = 0;
- CurrY = 0;
- ArrowAngle = 0;
- IncrX = 0;
- IncrY = Speed;
-
- MakeArrow();
- MakeMoveTable();
- DrawPolygon(Arrow,0,5,0,0,0);
-
- cont = 1;
- while(cont) {
- Ch = inkey();
- switch(Ch) {
- case '8':
- case -72:
- MoveForward();
- break;
- case '4':
- case -75:
- TurnLeft();
- break;
- case '6':
- case -77:
- TurnRight();
- break;
- case '2':
- case -80 :
- MoveBack();
- break;
- case ' ':
- cont = 0;
- break;
- default:
- break;
- }
- }
-
- LeaveGraphic();
- }
-
-