久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4599|回復: 2
打印 上一主題 下一主題
收起左側

電腦鼠代碼(可以參考,不建議使用)

[復制鏈接]
跳轉到指定樓層
樓主
ID:419622 發表于 2018-11-2 13:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
不建議使用,可以參考

單片機源程序如下:
  1. #include "Maze.h"

  2. /*********************************************************************************************************
  3.   全局變量定義
  4. *********************************************************************************************************/
  5. static uint8    GucXStart                           = 0;                /*  起點橫坐標                  */
  6. static uint8    GucYStart                           = 0;                /*  起點縱坐標                  */

  7. static uint8    GucXGoal0                           = XDST0;            /*  終點X坐標,有兩個值         */
  8. static uint8    GucXGoal1                           = XDST1;
  9. static uint8    GucYGoal0                           = YDST0;            /*  終點Y坐標,有兩個值         */
  10. static uint8    GucYGoal1                           = YDST1;

  11. static uint8    GucMouseTask                        = WAIT;             /*  狀態機,初始狀態為等待      */

  12. static uint8    GucMapStep[MAZETYPE][MAZETYPE]      = {0xff};           /*  保存各坐標的等高值          */

  13. static MAZECOOR GmcStack[MAZETYPE * MAZETYPE]       = {0};              /* 在mapStepEdit()中作堆棧使用 */
  14. static MAZECOOR GmcCrossway[MAZETYPE * MAZETYPE]    = {0};              /* Main()中暫存未走過支路坐標() */
  15. //用戶自定義變量

  16. /*********************************************************************************************************
  17. ** Function name:       Delay
  18. ** Descriptions:        延時函數
  19. ** input parameters:    uiD :延時參數,值越大,延時越久
  20. ** output parameters:   無
  21. ** Returned value:      無
  22. *********************************************************************************************************/
  23. void delay (uint32 uiD)
  24. {
  25.     for (; uiD; uiD--);
  26. }

  27. /*********************************************************************************************************
  28. ** Function name:       mapStepEdit
  29. ** Descriptions:        制作以目標點為起點的等高圖
  30. ** input parameters:    uiX:    目的地橫坐標
  31. **                      uiY:    目的地縱坐標
  32. ** output parameters:   GucMapStep[][]:  各坐標上的等高值
  33. ** Returned value:      無
  34. *********************************************************************************************************/
  35. void mapStepEdit (int8  cX, int8  cY)
  36. {
  37.     uint8 n         = 0;                                                /*  GmcStack[]下標              */
  38.     uint8 ucStep    = 1;                                                /*  等高值                      */
  39.     uint8 ucStat    = 0;                                                /*  統計可前進的方向數          */
  40.     uint8 i,j;
  41.    
  42.     GmcStack[n].cX  = cX;                                               /*  起點X值入棧                 */
  43.     GmcStack[n].cY  = cY;                                               /*  起點Y值入棧                 */
  44.     n++;
  45.     /*
  46.      *  初始化各坐標等高值
  47.      */
  48.     for (i = 0; i < MAZETYPE; i++) {
  49.         for (j = 0; j < MAZETYPE; j++) {
  50.             GucMapStep[i][j] = 0xff;
  51.         }
  52.     }
  53.     /*
  54.      *  制作等高圖,直到堆棧中所有數據處理完畢
  55.      */
  56.     while (n) {
  57.         GucMapStep[cX][cY] = ucStep++;                                  /*  填入等高值                  */

  58.         /*
  59.          *  對當前坐標格里可前進的方向統計
  60.          */
  61.         ucStat = 0;
  62.         if ((GucMapBlock[cX][cY] & 0x01) &&                             /*  前方有路                    */
  63.             (GucMapStep[cX][cY + 1] > (ucStep))) {                      /*  前方等高值大于計劃設定值    */
  64.             ucStat++;                                                   /*  可前進方向數加1             */
  65.         }
  66.         if ((GucMapBlock[cX][cY] & 0x02) &&                             /*  右方有路                    */
  67.             (GucMapStep[cX + 1][cY] > (ucStep))) {                      /*  右方等高值大于計劃設定值    */
  68.             ucStat++;                                                   /*  可前進方向數加1             */
  69.         }
  70.         if ((GucMapBlock[cX][cY] & 0x04) &&
  71.             (GucMapStep[cX][cY - 1] > (ucStep))) {
  72.             ucStat++;                                                   /*  可前進方向數加1             */
  73.         }
  74.         if ((GucMapBlock[cX][cY] & 0x08) &&
  75.             (GucMapStep[cX - 1][cY] > (ucStep))) {
  76.             ucStat++;                                                   /*  可前進方向數加1             */
  77.         }
  78.         /*
  79.          *  沒有可前進的方向,則跳轉到最近保存的分支點
  80.          *  否則任選一可前進方向前進
  81.          */
  82.         if (ucStat == 0) {
  83.             n--;
  84.             cX = GmcStack[n].cX;
  85.             cY = GmcStack[n].cY;
  86.             ucStep = GucMapStep[cX][cY];
  87.         } else {
  88.             if (ucStat > 1) {                                           /*  有多個可前進方向,保存坐標  */
  89.                 GmcStack[n].cX = cX;                                    /*  橫坐標X值入棧               */
  90.                 GmcStack[n].cY = cY;                                    /*  縱坐標Y值入棧               */
  91.                 n++;
  92.             }
  93.             /*
  94.              *  任意選擇一條可前進的方向前進
  95.              */
  96.             if ((GucMapBlock[cX][cY] & 0x01) &&                         /*  上方有路                    */
  97.                 (GucMapStep[cX][cY + 1] > (ucStep))) {                  /*  上方等高值大于計劃設定值    */
  98.                 cY++;                                                   /*  修改坐標                    */
  99.                 continue;
  100.             }
  101.             if ((GucMapBlock[cX][cY] & 0x02) &&                         /*  右方有路                    */
  102.                 (GucMapStep[cX + 1][cY] > (ucStep))) {                  /*  右方等高值大于計劃設定值    */
  103.                 cX++;                                                   /*  修改坐標                    */
  104.                 continue;
  105.             }
  106.             if ((GucMapBlock[cX][cY] & 0x04) &&                         /*  下方有路                    */
  107.                 (GucMapStep[cX][cY - 1] > (ucStep))) {                  /*  下方等高值大于計劃設定值    */
  108.                 cY--;                                                   /*  修改坐標                    */
  109.                 continue;
  110.             }
  111.             if ((GucMapBlock[cX][cY] & 0x08) &&                         /*  左方有路                    */
  112.                 (GucMapStep[cX - 1][cY] > (ucStep))) {                  /*  左方等高值大于計劃設定值    */
  113.                 cX--;                                                   /*  修改坐標                    */
  114.                 continue;
  115.             }
  116.         }
  117.     }
  118. }
  119. /*********************************************************************************************************
  120. ** Function name:       mouseSpurt
  121. ** Descriptions:        電腦鼠從起點以最短路徑跑向終點
  122. ** input parameters:    無
  123. ** output parameters:  無
  124. ** Returned value:      無
  125. *********************************************************************************************************/
  126. void mouseSpurt (void)
  127. {
  128.     uint8 ucTemp = 0xff;
  129.     int8    cXdst = 0,    cYdst = 0;
  130.     /*
  131.      *  對終點的四個坐標分別制作等高圖
  132.      *  取離起點最近的一個點作為目標點
  133.      */
  134.     if (GucMapBlock[GucXGoal0][GucYGoal0] & 0x0c) {                     /*  判斷該終點坐標是否有出口    */
  135.         mapStepEdit(GucXGoal0,GucYGoal0);                               /*  制作等高圖                  */
  136.         if (ucTemp > GucMapStep[GucXStart][GucYStart]) {                /*  保存離起點最近的坐標        */
  137.             cXdst  = GucXGoal0;
  138.             cYdst  = GucYGoal0;
  139.             ucTemp = GucMapStep[GucXStart][GucYStart];
  140.         }
  141.     }
  142.     if (GucMapBlock[GucXGoal0][GucYGoal1] & 0x09) {                     /*  判斷該終點坐標是否有出口    */
  143.         mapStepEdit(GucXGoal0,GucYGoal1);                               /*  制作等高圖                  */
  144.         if (ucTemp > GucMapStep[GucXStart][GucYStart]) {                /*  保存離起點最近的坐標        */
  145.             cXdst  = GucXGoal0;
  146.             cYdst  = GucYGoal1;
  147.             ucTemp = GucMapStep[GucXStart][GucYStart];
  148.         }
  149.     }
  150.     if (GucMapBlock[GucXGoal1][GucYGoal0] & 0x06) {                     /*  判斷該終點坐標是否有出口    */
  151.         mapStepEdit(GucXGoal1,GucYGoal0);                               /*  制作等高圖                  */
  152.         if (ucTemp > GucMapStep[GucXStart][GucYStart]) {                /*  保存離起點最近的坐標        */
  153.             cXdst  = GucXGoal1;
  154.             cYdst  = GucYGoal0;
  155.             ucTemp = GucMapStep[GucXStart][GucYStart];
  156.         }
  157.     }
  158.     if (GucMapBlock[GucXGoal1][GucYGoal1] & 0x03) {                     /*  判斷該終點坐標是否有出口    */
  159.         mapStepEdit(GucXGoal1,GucYGoal1);                               /*  制作等高圖                  */
  160.         if (ucTemp > GucMapStep[GucXStart][GucYStart]) {                /*  保存離起點最近的坐標        */
  161.             cXdst  = GucXGoal1;
  162.             cYdst  = GucYGoal1;
  163.             ucTemp = GucMapStep[GucXStart][GucYStart];
  164.         }
  165.     }
  166.     zlg7289Download(1, 0, 1, 1);
  167.     zlg7289Download(1, 1, 1, 1);
  168.     zlg7289Download(1, 2, 1, 2);
  169.     zlg7289Download(1, 3, 1, 3);   
  170.     zlg7289Download(1, 4, 1, 4);   

  171.     objectGoTo(cXdst,cYdst);                                            /*  運行到指定目標點            */
  172. }
  173. /*********************************************************************************************************
  174. ** Function name:       objectGoTo
  175. ** Descriptions:        使電腦鼠運動到指定坐標
  176. ** input parameters:    cXdst: 目的地的橫坐標
  177. **                      cYdst: 目的地的縱坐標
  178. ** output parameters:   無
  179. ** Returned value:      無
  180. *********************************************************************************************************/
  181. void objectGoTo (int8  x, int8  y)
  182. {
  183.     uint8 ucStep = 1;
  184.     int8  cNBlock = 0, cDirTemp;
  185.     int8 cX,cY;
  186.     cX = GmcMouse.cX;
  187.     cY = GmcMouse.cY;
  188.     mapStepEdit(x,y);                                           /*  制作等高圖                  */
  189.     /*
  190.      *  根據等高值向目標點運動,直到達到目的地
  191.      */
  192.     while ((cX != x) || (cY != y)) {
  193.         ucStep = GucMapStep[cX][cY];
  194.         /*
  195.          *  任選一個等高值比當前自身等高值小的方向前進
  196.          */
  197.         if ((GucMapBlock[cX][cY] & 0x01) &&                             /*  上方有路                    */
  198.             (GucMapStep[cX][cY + 1] < ucStep)) {                        /*  上方等高值較小              */
  199.             cDirTemp = UP;                                              /*  記錄方向                    */
  200.             if (cDirTemp == GucMouseDir) {                              /*  優先選擇不需要轉彎的方向    */
  201.                 cNBlock++;                                              /*  前進一個方格                */
  202.                 cY++;
  203.                 continue;                                               /*  跳過本次循環                */
  204.             }
  205.         }
  206.         if ((GucMapBlock[cX][cY] & 0x02) &&                             /*  右方有路                    */
  207.             (GucMapStep[cX + 1][cY] < ucStep)) {                        /*  右方等高值較小              */
  208.             cDirTemp = RIGHT;                                           /*  記錄方向                    */
  209.             if (cDirTemp == GucMouseDir) {                              /*  優先選擇不需要轉彎的方向    */
  210.                 cNBlock++;                                              /*  前進一個方格                */
  211.                 cX++;
  212.                 continue;                                               /*  跳過本次循環                */
  213.             }
  214.         }
  215.         if ((GucMapBlock[cX][cY] & 0x04) &&                             /*  下方有路                    */
  216.             (GucMapStep[cX][cY - 1] < ucStep)) {                        /*  下方等高值較小              */
  217.             cDirTemp = DOWN;                                            /*  記錄方向                    */
  218.             if (cDirTemp == GucMouseDir) {                              /*  優先選擇不需要轉彎的方向    */
  219.                 cNBlock++;                                              /*  前進一個方格                */
  220.                 cY--;
  221.                 continue;                                               /*  跳過本次循環                */
  222.             }
  223.         }
  224.         if ((GucMapBlock[cX][cY] & 0x08) &&                             /*  左方有路                    */
  225.             (GucMapStep[cX - 1][cY] < ucStep)) {                        /*  左方等高值較小              */
  226.             cDirTemp = LEFT;                                            /*  記錄方向                    */
  227.             if (cDirTemp == GucMouseDir) {                              /*  優先選擇不需要轉彎的方向    */
  228.                 cNBlock++;                                              /*  前進一個方格                */
  229.                 cX--;
  230.                 continue;                                               /*  跳過本次循環                */
  231.             }
  232.         }
  233.         cDirTemp = (cDirTemp + 4 - GucMouseDir)%4;                      /*  計算方向偏移量              */
  234.         
  235.         if (cNBlock) {
  236.             mouseGoahead(cNBlock);                                      /*  前進cNBlock步               */
  237.         }        
  238.         cNBlock = 0;                                                    /*  任務清零                    */
  239.         
  240.         /*
  241.          *  控制電腦鼠轉彎
  242.          */
  243.         switch (cDirTemp) {

  244.         case 1:
  245.             mouseTurnright();
  246.             break;

  247.         case 2:
  248.             mouseTurnback();
  249.             break;

  250.         case 3:
  251.             mouseTurnleft();
  252.             break;

  253.         default:
  254.             break;
  255.         }
  256.     }
  257.     /*
  258.      *  判斷任務是否完成,否則繼續前進
  259.      */
  260.     if (cNBlock) {
  261.         mouseGoahead(cNBlock);
  262.     }
  263. }
  264. /*********************************************************************************************************
  265. ** Function name:       mazeBlockDataGet
  266. ** Descriptions:        根據電腦鼠的相對方向,取出該方向上迷宮格的墻壁資料
  267. ** input parameters:    ucDir: 電腦鼠的相對方向
  268. ** output parameters:   無
  269. ** Returned value:      GucMapBlock[cX][cY] : 墻壁資料
  270. *********************************************************************************************************/
  271. uint8 mazeBlockDataGet (uint8  ucDirTemp)
  272. {
  273.     int8 cX = 0,cY = 0;
  274.    
  275.     /*
  276.      *  把電腦鼠的相對方向轉換為絕對方向
  277.      */
  278.     switch (ucDirTemp) {

  279.     case MOUSEFRONT:
  280.         ucDirTemp = GucMouseDir;
  281.         break;

  282.     case MOUSELEFT:
  283.         ucDirTemp = (GucMouseDir + 3) % 4;
  284.         break;

  285.     case MOUSERIGHT:
  286.         ucDirTemp = (GucMouseDir + 1) % 4;
  287.         break;

  288.     default:
  289.         break;
  290.     }
  291.    
  292.     /*
  293.      *  根據絕對方向計算該方向上相鄰格的坐標
  294.      */
  295.     switch (ucDirTemp) {

  296.     case 0:
  297.         cX = GmcMouse.cX;
  298.         cY = GmcMouse.cY + 1;
  299.         break;
  300.         
  301.     case 1:
  302.         cX = GmcMouse.cX + 1;
  303.         cY = GmcMouse.cY;
  304.         break;
  305.         
  306.     case 2:
  307.         cX = GmcMouse.cX;
  308.         cY = GmcMouse.cY - 1;
  309.         break;
  310.         
  311.     case 3:
  312.         cX = GmcMouse.cX - 1;
  313.         cY = GmcMouse.cY;
  314.         break;
  315.         
  316.     default:
  317.         break;
  318.     }
  319.    
  320.     return(GucMapBlock[cX][cY]);                                        /*  返回迷宮格上的資料          */
  321. }
  322. /*********************************************************************************************************
  323. ** Function name:       rightMethod
  324. ** Descriptions:        右手法則,優先向右前進
  325. ** input parameters:    無
  326. ** output parameters:   無
  327. ** Returned value:      無
  328. *********************************************************************************************************/
  329. void rightMethod (void)
  330. {
  331.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) &&         /*  電腦鼠的右邊有路            */
  332.         (mazeBlockDataGet(MOUSERIGHT) == 0x00)) {                       /*  電腦鼠的右邊沒有走過        */
  333.         //delay(20000);
  334.        // delay(10000);
  335.         mouseTurnright();                                               /*  電腦鼠右轉                  */
  336.         return;
  337.     }
  338.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) &&         /*  電腦鼠的前方有路            */
  339.         (mazeBlockDataGet(MOUSEFRONT) == 0x00)) {                       /*  電腦鼠的前方沒有走過        */
  340.         return;                                                         /*  電腦鼠不用轉彎              */
  341.     }
  342.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) &&         /*  電腦鼠的左邊有路            */
  343.         (mazeBlockDataGet(MOUSELEFT ) == 0x00)) {                       /*  電腦鼠的左邊沒有走過        */
  344.        // delay(20000);
  345.        // delay(10000);
  346.         mouseTurnleft();                                                /*  電腦鼠左轉                  */
  347.         return;
  348.     }
  349. }
  350. /*********************************************************************************************************
  351. ** Function name:       leftMethod
  352. ** Descriptions:        左手法則,優先向左運動
  353. ** input parameters:    無
  354. ** output parameters:   無
  355. ** Returned value:      無
  356. *********************************************************************************************************/
  357. void leftMethod (void)
  358. {
  359.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) &&         /*  電腦鼠的左邊有路            */
  360.         (mazeBlockDataGet(MOUSELEFT ) == 0x00)) {                       /*  電腦鼠的左邊沒有走過        */
  361.         //delay(20000);
  362.        // delay(10000);
  363.         mouseTurnleft();                                                /*  電腦鼠左轉                  */
  364.         return;
  365.     }
  366.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) &&         /*  電腦鼠的前方有路            */
  367.         (mazeBlockDataGet(MOUSEFRONT) == 0x00)) {                       /*  電腦鼠的前方沒有走過        */
  368.         return;                                                         /*  電腦鼠不用轉彎              */
  369.     }
  370.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) &&         /*  電腦鼠的右邊有路            */
  371.         (mazeBlockDataGet(MOUSERIGHT) == 0x00)) {                       /*  電腦鼠的右邊沒有走過        */
  372.         //delay(20000);
  373.        // delay(10000);
  374.         mouseTurnright();                                               /*  電腦鼠右轉                  */
  375.         return;
  376.     }
  377. }
  378. /*********************************************************************************************************
  379. ** Function name:       frontRightMethod
  380. ** Descriptions:        中右法則,優先向前運行,其次向右
  381. ** input parameters:    無
  382. ** output parameters:   無
  383. ** Returned value:      無
  384. *********************************************************************************************************/
  385. void frontRightMethod (void)
  386. {
  387.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) &&         /*  電腦鼠的前方有路            */
  388.         (mazeBlockDataGet(MOUSEFRONT) == 0x00)) {                       /*  電腦鼠的前方沒有走過        */
  389.         return;                                                         /*  電腦鼠不用轉彎              */
  390.     }
  391.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) &&         /*  電腦鼠的右邊有路            */
  392.         (mazeBlockDataGet(MOUSERIGHT) == 0x00)) {                       /*  電腦鼠的右邊沒有走過        */
  393.         //delay(20000);
  394.         //delay(10000);
  395.         mouseTurnright();                                               /*  電腦鼠右轉                  */
  396.         return;
  397.     }
  398.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) &&         /*  電腦鼠的左邊有路            */
  399.         (mazeBlockDataGet(MOUSELEFT ) == 0x00)) {                       /*  電腦鼠的左邊沒有走過        */
  400.         //delay(20000);
  401.        // delay(10000);
  402.         mouseTurnleft();                                                /*  電腦鼠左轉                  */
  403.         return;
  404.     }
  405. }
  406. /*********************************************************************************************************
  407. ** Function name:       frontLeftMethod
  408. ** Descriptions:        中左法則,優先向前運行,其次向左
  409. ** input parameters:    無
  410. ** output parameters:   無
  411. ** Returned value:      無
  412. *********************************************************************************************************/
  413. void frontLeftMethod (void)
  414. {
  415.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) &&         /*  電腦鼠的前方有路            */
  416.         (mazeBlockDataGet(MOUSEFRONT) == 0x00)) {                       /*  電腦鼠的前方沒有走過        */
  417.         return;                                                         /*  電腦鼠不用轉彎              */
  418.     }
  419.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) &&         /*  電腦鼠的左邊有路            */
  420.         (mazeBlockDataGet(MOUSELEFT ) == 0x00)) {                       /*  電腦鼠的左邊沒有走過        */
  421.         //delay(20000);
  422.        // delay(10000);
  423.         mouseTurnleft();                                                /*  電腦鼠左轉                  */
  424.         return;
  425.     }
  426.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) &&         /*  電腦鼠的右邊有路            */
  427.         (mazeBlockDataGet(MOUSERIGHT) == 0x00)) {                       /*  電腦鼠的右邊沒有走過        */
  428.         //delay(20000);
  429.        // delay(10000);
  430.         mouseTurnright();                                               /*  電腦鼠右轉                  */
  431.         return;
  432.     }
  433. }
  434. /*********************************************************************************************************
  435. ** Function name:       centralMethod
  436. ** Descriptions:        中心法則,根據電腦鼠目前在迷宮中所處的位置覺定使用何種搜索法則
  437. ** input parameters:    無
  438. ** output parameters:   無
  439. ** Returned value:      無
  440. *********************************************************************************************************/
  441. void centralMethod (void)
  442. {
  443.     if (!(GmcMouse.cX & 0x08)) {
  444.         if (!(GmcMouse.cY & 0x08)) {
  445.          
  446.             /*
  447.              *  此時電腦鼠在迷宮的左下角
  448.              */   
  449.             switch (GucMouseDir) {
  450.                
  451.             case UP:                                                    /*  當前電腦鼠向上              */
  452.             //    delay(20000);  
  453.                 frontRightMethod();                                     /*  中右法則                    */
  454.                 break;

  455.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  456.             //    delay(20000);
  457.                 frontLeftMethod();                                      /*  中左法則                    */
  458.                 break;

  459.             case DOWN:                                                  /*  當前電腦鼠向下              */
  460.             //    delay(20000);
  461.                 leftMethod();                                           /*  左手法則                    */
  462.                 break;

  463.             case LEFT:                                                  /*  當前電腦鼠向左              */
  464.             //    delay(20000);
  465.                 rightMethod();                                          /*  右手法則                    */
  466.                 break;

  467.             default:
  468.                 break;
  469.             }

  470.         } else {
  471.          
  472.             /*
  473.              *  此時電腦鼠在迷宮的左上角
  474.              */   
  475.             switch (GucMouseDir) {
  476.                
  477.             case UP:                                                    /*  當前電腦鼠向上              */
  478.             //    delay(20000);
  479.                 rightMethod();                                          /*  右手法則                    */
  480.                 break;

  481.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  482.             //    delay(20000);
  483.                 frontRightMethod();                                     /*  中右法則                    */
  484.                 break;

  485.             case DOWN:                                                  /*  當前電腦鼠向下              */
  486.             //    delay(20000);
  487.                 frontLeftMethod();                                      /*  中左法則                    */
  488.                 break;

  489.             case LEFT:                                                  /*  當前電腦鼠向左              */
  490.             //    delay(20000);
  491.                 leftMethod();                                           /*  左手法則                    */
  492.                 break;

  493.             default:
  494.                 break;
  495.             }
  496.         }
  497.     } else {
  498.         if (!(GmcMouse.cY & 0x08)) {
  499.          
  500.             /*
  501.              *  此時電腦鼠在迷宮的右下角
  502.              */   
  503.             switch (GucMouseDir) {
  504.                
  505.             case UP:                                                    /*  當前電腦鼠向上              */
  506.             //    delay(20000);
  507.                 frontLeftMethod();                                      /*  中左法則                    */
  508.                 break;

  509.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  510.             //    delay(20000);
  511.                 leftMethod();                                           /*  左手法則                    */
  512.                 break;

  513.             case DOWN:                                                  /*  當前電腦鼠向下              */
  514.             //    delay(20000);
  515.                 rightMethod();                                          /*  右手法則                    */
  516.                 break;

  517.             case LEFT:                                                  /*  當前電腦鼠向左              */
  518.            //     delay(20000);
  519.                 frontRightMethod();                                     /*  中右法則                    */
  520.                 break;

  521.             default:
  522.                 break;
  523.             }
  524.             
  525.         } else {

  526.             /*
  527.              *  此時電腦鼠在迷宮的右上角
  528.              */
  529.             switch (GucMouseDir) {
  530.                
  531.             case UP:                                                    /*  當前電腦鼠向上              */
  532.            //     delay(20000);
  533.                 leftMethod();                                           /*  左手法則                    */
  534.                 break;

  535.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  536.            //     delay(20000);
  537.                 rightMethod();                                          /*  右手法則                    */
  538.                 break;

  539.             case DOWN:                                                  /*  當前電腦鼠向下              */
  540.            //     delay(20000);
  541.                 frontRightMethod();                                     /*  中右法則                    */
  542.                 break;

  543.             case LEFT:                                                  /*  當前電腦鼠向左              */
  544.             //    delay(20000);
  545.                 frontLeftMethod();                                      /*  中左法則                    */
  546.                 break;

  547.             default:
  548.                 break;
  549.             }            
  550.         }
  551.     }
  552. }

  553. //搜索返回的法則
  554. void mazeBackChoice()
  555. {
  556.     if (!(GmcMouse.cX & 0x08)) {
  557.         if (!(GmcMouse.cY & 0x08)) {
  558.          
  559.             /*
  560.              *  此時電腦鼠在迷宮的左下角
  561.              */   
  562.             switch (GucMouseDir) {
  563.                
  564.             case UP:                                                    /*  當前電腦鼠向上              */
  565.             //    delay(20000);  
  566.                 frontRightMethod();                                     /*  中右法則                    */
  567.                 break;

  568.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  569.             //    delay(20000);
  570.                 frontLeftMethod();                                      /*  中左法則                    */
  571.                 break;

  572.             case DOWN:                                                  /*  當前電腦鼠向下              */
  573.             //    delay(20000);
  574.                 leftMethod();                                           /*  左手法則                    */
  575.                 break;

  576.             case LEFT:                                                  /*  當前電腦鼠向左              */
  577.             //    delay(20000);
  578.                 rightMethod();                                          /*  右手法則                    */
  579.                 break;

  580.             default:
  581.                 break;
  582.             }

  583.         } else {
  584.          
  585.             /*
  586.              *  此時電腦鼠在迷宮的左上角
  587.              */   
  588.             switch (GucMouseDir) {
  589.                
  590.             case UP:                                                    /*  當前電腦鼠向上              */
  591.             //    delay(20000);
  592.                 rightMethod();                                          /*  右手法則                    */
  593.                 break;

  594.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  595.             //    delay(20000);
  596.                 frontRightMethod();                                     /*  中右法則                    */
  597.                 break;

  598.             case DOWN:                                                  /*  當前電腦鼠向下              */
  599.             //    delay(20000);
  600.                 frontLeftMethod();                                      /*  中左法則                    */
  601.                 break;

  602.             case LEFT:                                                  /*  當前電腦鼠向左              */
  603.             //    delay(20000);
  604.                 leftMethod();                                           /*  左手法則                    */
  605.                 break;

  606.             default:
  607.                 break;
  608.             }
  609.         }
  610.     } else {
  611.         if (!(GmcMouse.cY & 0x08)) {
  612.          
  613.             /*
  614.              *  此時電腦鼠在迷宮的右下角
  615.              */   
  616.             switch (GucMouseDir) {
  617.                
  618.             case UP:                                                    /*  當前電腦鼠向上              */
  619.             //    delay(20000);
  620.                 frontLeftMethod();                                      /*  中左法則                    */
  621.                 break;

  622.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  623.             //    delay(20000);
  624.                 leftMethod();                                           /*  左手法則                    */
  625.                 break;

  626.             case DOWN:                                                  /*  當前電腦鼠向下              */
  627.             //    delay(20000);
  628.                 rightMethod();                                          /*  右手法則                    */
  629.                 break;

  630.             case LEFT:                                                  /*  當前電腦鼠向左              */
  631.            //     delay(20000);
  632.                 frontRightMethod();                                     /*  中右法則                    */
  633.                 break;

  634.             default:
  635.                 break;
  636.             }
  637.             
  638.         } else {

  639.             /*
  640.              *  此時電腦鼠在迷宮的右上角
  641.              */
  642.             switch (GucMouseDir) {
  643.                
  644.             case UP:                                                    /*  當前電腦鼠向上              */
  645.            //     delay(20000);
  646.                 leftMethod();                                           /*  左手法則                    */
  647.                 break;

  648.             case RIGHT:                                                 /*  當前電腦鼠向右              */
  649.            //     delay(20000);
  650.                 rightMethod();                                          /*  右手法則                    */
  651.                 break;

  652.             case DOWN:                                                  /*  當前電腦鼠向下              */
  653.            //     delay(20000);
  654.                 frontRightMethod();                                     /*  中右法則                    */
  655.                 break;

  656.             case LEFT:                                                  /*  當前電腦鼠向左              */
  657.             //    delay(20000);
  658.                 frontLeftMethod();                                      /*  中左法則                    */
  659.                 break;

  660.             default:
  661.                 break;
  662.             }            
  663.         }
  664.     }
  665. }
  666. /*********************************************************************************************************
  667. ** Function name:       crosswayCheck
  668. ** Descriptions:        統計某坐標存在還未走過的支路數
  669. ** input parameters:    ucX,需要檢測點的橫坐標
  670. **                      ucY,需要檢測點的縱坐標
  671. ** output parameters:   無
  672. ** Returned value:      ucCt,未走過的支路數
  673. *********************************************************************************************************/
  674. uint8 crosswayCheck (int8  cX, int8  cY)
  675. {
  676.     uint8 ucCt = 0;
  677.     if ((GucMapBlock[cX][cY] & 0x01) &&                                 /*  絕對方向,迷宮上方有路      */
  678.         (GucMapBlock[cX][cY + 1]) == 0x00) {                            /*  絕對方向,迷宮上方未走過    */
  679.         ucCt++;                                                         /*  可前進方向數加1             */
  680.     }
  681.     if ((GucMapBlock[cX][cY] & 0x02) &&                                 /*  絕對方向,迷宮右方有路      */
  682.         (GucMapBlock[cX + 1][cY]) == 0x00) {                            /*  絕對方向,迷宮右方沒有走過  */
  683.         ucCt++;                                                         /*  可前進方向數加1             */
  684.     }
  685.     if ((GucMapBlock[cX][cY] & 0x04) &&                                 /*  絕對方向,迷宮下方有路      */
  686.         (GucMapBlock[cX][cY - 1]) == 0x00) {                            /*  絕對方向,迷宮下方未走過    */
  687.         ucCt++;                                                         /*  可前進方向數加1             */
  688.     }
  689.     if ((GucMapBlock[cX][cY] & 0x08) &&                                 /*  絕對方向,迷宮左方有路      */
  690.         (GucMapBlock[cX - 1][cY]) == 0x00) {                            /*  絕對方向,迷宮左方未走過    */
  691.         ucCt++;                                                         /*  可前進方向數加1             */
  692.     }
  693.     return ucCt;
  694. }
  695. /*********************************************************************************************************
  696. ** Function name:       crosswayChoice
  697. ** Descriptions:        選擇一條支路作為前進方向
  698. ** input parameters:    無
  699. ** output parameters:   無
  700. ** Returned value:      無
  701. *********************************************************************************************************/
  702. void crosswayChoice (void)
  703. {
  704.     switch (SEARCHMETHOD) {
  705.         
  706.     case RIGHTMETHOD:
  707.         rightMethod();
  708.         break;
  709.    
  710.     case LEFTMETHOD:
  711.         leftMethod();
  712.         break;
  713.    
  714.     case CENTRALMETHOD:
  715.         centralMethod();
  716.         break;

  717.     case FRONTRIGHTMETHOD:
  718.         frontRightMethod();
  719.         break;

  720.     case FRONTLEFTMETHOD:
  721.         frontLeftMethod();
  722.         break;

  723.     default:
  724.         break;
  725.     }
  726. }
  727. /*********************************************************************************************************
  728. ** Function name:      StopMazeSearch
  729. ** Descriptions:      停止向前搜索的函數   
  730. ** input parameters:    當前的坐標
  731. ** output parameters:     無
  732. ** Returned value:      0代表結束,1代表繼續
  733. *********************************************************************************************************/
  734. int8 StopMazeSearch(int8 cX,int8 cY)
  735. {
  736.     if(cX==7 && cY==7)
  737.         return 1;
  738.     if(cX==8 && cY==7)
  739.         return 1;
  740.     if(cX==7 && cY==8)
  741.         return 1;
  742.     if(cX==8 && cY==8)
  743.         return 1;
  744.     return 0;
  745. }
  746. /*********************************************************************************************************
  747. ** Function name:      FastOperating
  748. ** Descriptions:     對特殊格子處理的函數  
  749. ** input parameters:    當前的坐標
  750. ** output parameters:     無
  751. ** Returned value:      1表示前方,2表示右方,3表示后方,4表示左方
  752. *********************************************************************************************************/
  753. int8 FastOperating(int8 cX,int8 cY)
  754. {
  755.   if(cX==5 && cY==7){
  756.       if(GucMapBlock[cX][cY] & 0x02)
  757.         return 2;
  758.   }
  759.   if(cX==5 && cY==8){
  760.       if(GucMapBlock[cX][cY] & 0x02)
  761.         return 2;
  762.   }
  763.   
  764.   if(cX==6 && cY==7){
  765.       if(GucMapBlock[cX][cY] & 0x02)
  766.         return 2;
  767.   }
  768.   if(cX==6 && cY==8){
  769.       if(GucMapBlock[cX][cY] & 0x02)
  770.         return 2;
  771.   }
  772.   
  773.   if(cX==7 && cY==5){
  774.       if(GucMapBlock[cX][cY] & 0x01)
  775.         return 1;
  776.   }
  777.   if(cX==8 && cY==5){
  778.       if(GucMapBlock[cX][cY] & 0x01)
  779.         return 1;
  780.   }
  781.   if(cX==7 && cY==6){
  782.       if(GucMapBlock[cX][cY] & 0x01)
  783.         return 1;
  784.   }
  785.   if(cX==8 && cY==6){
  786.       if(GucMapBlock[cX][cY] & 0x01)
  787.         return 1;
  788.   }
  789.   
  790.   if(cX==10 && cY==7){
  791.       if(GucMapBlock[cX][cY] & 0x08)
  792.         return 4;
  793.   }
  794.   if(cX==10 && cY==8){
  795.       if(GucMapBlock[cX][cY] & 0x08)
  796.         return 4;
  797.   }
  798.   if(cX==9 && cY==7){
  799.       if(GucMapBlock[cX][cY] & 0x08)
  800.         return 4;
  801.   }
  802.   if(cX==9 && cY==8){
  803.       if(GucMapBlock[cX][cY] & 0x08)
  804.         return 4;
  805.   }
  806.   
  807.   if(cX==8 && cY==10){
  808.       if(GucMapBlock[cX][cY] & 0x04)
  809.         return 3;
  810.   }
  811.   if(cX==7 && cY==10){
  812.       if(GucMapBlock[cX][cY] & 0x04)
  813.         return 3;
  814.   }
  815.   if(cX==8 && cY==9){
  816.       if(GucMapBlock[cX][cY] & 0x04)
  817.         return 3;
  818.   }
  819.   if(cX==7 && cY==9){
  820.       if(GucMapBlock[cX][cY] & 0x04)
  821.         return 3;
  822.   }
  823.   return 0;
  824. }
  825. /*********************************************************************************************************
  826. ** Function name:       piontMethod
  827. ** Descriptions:        向點法則,電腦鼠從終點找起點
  828. ** input parameters:    無
  829. ** output parameters:   無
  830. ** Returned value:      無
  831. *********************************************************************************************************/
  832. void piontMethod(void)
  833. {
  834.     switch(GucMouseDir)
  835.     {
  836.     case UP:
  837.       leftMethod();
  838.       break;
  839.     case RIGHT:
  840.       rightMethod();
  841.       break;
  842.     case DOWN:
  843.       frontRightMethod();
  844.       break;
  845.     case LEFT:
  846.       frontLeftMethod();
  847.       break;
  848.     default:
  849.       break;
  850.     }
  851. }
  852. /*********************************************************************************************************
  853. ** Function name:      StopMazeSearch
  854. ** Descriptions:      停止向前搜索的函數   
  855. ** input parameters:    當前的坐標
  856. ** output parameters:     無
  857. ** Returned value:      0代表結束,1代表繼續
  858. *********************************************************************************************************/
  859. int8 StopSearch(int8 cX,int8 cY,int8 n)
  860. {
  861.    int8 i;
  862.    for(i=0;i<n;i++){
  863.       if(GmcCrossway[i].cX == cX && GmcCrossway[i].cY == cY){
  864.           return 1;
  865.       }
  866.    }
  867.    if(cX==7 && cY==7)
  868.        return 1;
  869.    if(cX==8 && cY==7)
  870.        return 1;
  871.    if(cX==7 && cY==8)
  872.        return 1;
  873.    if(cX==8 && cY==8)
  874.        return 1;
  875.     return 0;
  876. }
  877. /*********************************************************************************************************
  878. ** Function name:       main
  879. ** Descriptions:      主函數
  880. ** input parameters:    無
  881. ** output parameters:   無
  882. ** Returned value:      無
  883. *********************************************************************************************************/
  884. main (void)
  885. {
  886.     uint8 n          = 0;                                               /*  GmcCrossway[]下標           */  
  887.     uint8 ucRoadStat = 0;                                               /*  統計某一坐標可前進的支路數  */
  888.     uint8 ucTemp     = 0;                                               /*  用于START狀態中坐標轉換     */
  889.    
  890.     //用戶自定義變量
  891.     int8    cXdst = 0,    cYdst = 0;
  892.    
  893.     mouseInit();                                                        /*  底層驅動的初始化            */
  894.     zlg7289Init();                                                      /*  顯示模塊初始化              */

  895.     while (1) {
  896.         switch (GucMouseTask) {                                         /*  狀態機處理                  */
  897.             
  898.         case WAIT:
  899.             sensorDebug();
  900.             voltageDetect();
  901.             delay(100000);
  902.             if (keyCheck() == true) {                                   /*  檢測按鍵等待啟動            */
  903.                 zlg7289Reset();                                         /*  復位ZLG7289                 */
  904.                 GucMouseTask = START;
  905.             }
  906.             break;
  907.             
  908.         case START:                                                     /*  判斷電腦鼠起點的橫坐標      */
  909.             mazeSearch();                                               /*  向前搜索                    */
  910.             if (GucMapBlock[GmcMouse.cX][GmcMouse.cY] & 0x08) {         /*  判斷電老鼠左邊是否存在出口  */
  911.                 if (MAZETYPE == 8) {                                    /*  修改四分之一迷宮的終點坐標  */
  912.                     GucXGoal0 = 1;
  913.                     GucXGoal1 = 0;
  914.                 }
  915.                 GucXStart   = MAZETYPE - 1;                             /*  修改電腦鼠起點的橫坐標      */
  916.                 GmcMouse.cX = MAZETYPE - 1;                             /*  修改電腦鼠當前位置的橫坐標  */   
  917.                 /*
  918.                  *  由于默認的起點為(0,0),現在需要把已記錄的墻壁資料轉換過來
  919.                  */
  920.                 ucTemp = GmcMouse.cY;
  921.                 do {
  922.                     GucMapBlock[MAZETYPE - 1][ucTemp] = GucMapBlock[0][ucTemp];
  923.                     GucMapBlock[0 ][ucTemp] = 0;
  924.                 }while (ucTemp--);
  925.                 /*
  926.                  *  在OFFSHOOT[0]中保存起點坐標
  927.                  */
  928.                 GmcCrossway[n].cX = MAZETYPE - 1;
  929.                 GmcCrossway[n].cY = 0;
  930.                 n++;
  931.                 GucMouseTask = MAZESEARCH;                              /*  狀態轉換為搜尋狀態          */
  932.             }
  933.             if (GucMapBlock[GmcMouse.cX][GmcMouse.cY] & 0x02) {         /*  判斷電老鼠右邊是否存在出口  */
  934.                 /*
  935.                  *  在OFFSHOOT[0]中保存起點坐標
  936.                  */
  937.                 GmcCrossway[n].cX = 0;
  938.                 GmcCrossway[n].cY = 0;
  939.                 n++;
  940.                 GucMouseTask = MAZESEARCH;                              /*  狀態轉換為搜尋狀態          */
  941.             }
  942.             break;
  943.             
  944.         case MAZESEARCH:
  945.               //從起點搜索找終點
  946.               if(StopMazeSearch(GmcMouse.cX,GmcMouse.cY)==1){
  947.                     cXdst=GmcMouse.cX,cYdst=GmcMouse.cY;
  948.                     mouseTurnback();
  949.                     GucMouseTask = BACKSEARCH;
  950.                     n--;
  951.                     objectGoTo(GmcCrossway[n].cX,GmcCrossway[n].cY);
  952.                     break;
  953.                }
  954.                ucRoadStat = crosswayCheck(GmcMouse.cX,GmcMouse.cY);
  955.                if (ucRoadStat) {                                           /*  有可前進方向                */                  
  956.                     if (ucRoadStat > 1) {                                   /*  有多條可前進方向,保存坐標  */
  957.                         GmcCrossway[n].cX = GmcMouse.cX;
  958.                         GmcCrossway[n].cY = GmcMouse.cY;
  959.                         n++;                                       
  960.                     }
  961.                     switch(FastOperating(GmcMouse.cX,GmcMouse.cY)){
  962.                         case 0:
  963.                             centralMethod();
  964.                             mazeSearch();
  965.                             break;
  966.                         case 1:
  967.                            objectGoTo(GmcMouse.cX,GmcMouse.cY+1);
  968.                            //  mazeSearch();
  969.                             break;
  970.                         case 2:
  971.                           objectGoTo(GmcMouse.cX+1,GmcMouse.cY);
  972.                           //    mazeSearch();
  973.                             break;
  974.                         case 3:
  975.                            objectGoTo(GmcMouse.cX,GmcMouse.cY-1);
  976.                           //   mazeSearch();
  977.                             break;
  978.                         case 4:
  979.                            objectGoTo(GmcMouse.cX-1,GmcMouse.cY);
  980.                            //  mazeSearch();
  981.                             break;
  982.                        default:
  983.                             break;
  984.                     }
  985.                }else{                    /*  沒有可前進方向,回到最近支路*/
  986.                     while (--n) {
  987.                           ucRoadStat = crosswayCheck(GmcCrossway[n].cX,GmcCrossway[n].cY);
  988.                           if (ucRoadStat) {
  989.                               objectGoTo(GmcCrossway[n].cX,GmcCrossway[n].cY);
  990.                               if (ucRoadStat > 1) {
  991.                                   n++;
  992.                               }
  993.                               centralMethod();
  994.                               mazeSearch();
  995.                               break;
  996.                           }
  997.                     
  998.                      }
  999.                    if (n == 0){                                           /*  走完了所有的支路,回到起點  */
  1000.                         objectGoTo(GmcCrossway[0].cX, GmcCrossway[0].cY);
  1001.                         mouseTurnback();
  1002.                            //異常處理那種死迷宮(即根本走不出去的迷宮)
  1003.                         if(GmcMouse.cX==GucXStart && GmcMouse.cY==GucYStart){
  1004.                             while(1){
  1005.                                 if(keyCheck()==true){
  1006.                                     break;
  1007.                                 }
  1008.                                 sensorDebug();
  1009.                                 delay(20000);
  1010.                             }
  1011.                         }
  1012.                     }
  1013.                 }
  1014.                 break;
  1015.          case BACKSEARCH:
  1016.              //從終點搜索找起點
  1017.              /*  while(1){
  1018.                     if(keyCheck()==true){
  1019.                          break;
  1020.                     }
  1021.                     sensorDebug();
  1022.                     delay(20000);
  1023.                 }*/
  1024.                 ucRoadStat = crosswayCheck(GmcMouse.cX,GmcMouse.cY);               
  1025.                 if (ucRoadStat) {                                           /*  有可前進方向                */
  1026.                     if (ucRoadStat > 1) {                                   /*  有多條可前進方向,保存坐標  */
  1027.                         GmcCrossway[n].cX = GmcMouse.cX;
  1028.                         GmcCrossway[n].cY = GmcMouse.cY;
  1029.                         n++;                                       
  1030.                     }
  1031.                     piontMethod();       //設定為向點法則                                
  1032.                     mazeSearch();          // 前進一格               
  1033.                     }else{                    /*  沒有可前進方向,回到最近支路*/
  1034.                         while (--n) {
  1035.                             if(GmcMouse.cX==0 && GmcMouse.cY==0){
  1036.                                 mouseTurnback();
  1037.                                 GucMouseTask=SPURT;
  1038.                                 break;
  1039.                             }
  1040.                             ucRoadStat = crosswayCheck(GmcCrossway[n].cX,GmcCrossway[n].cY);
  1041.                             if(ucRoadStat) {
  1042.                                 objectGoTo(GmcCrossway[n].cX,GmcCrossway[n].cY);
  1043.                                 if (ucRoadStat > 1) {
  1044.                                     n++;
  1045.                                 }
  1046.                                 piontMethod();
  1047.                                 mazeSearch();
  1048.                                 break;
  1049.                            }
  1050.                            if(n==0){
  1051.                              GucMouseTask=SPURT;
  1052.                              break;
  1053.                         }
  1054.                     }
  1055.                 }
  1056.                 break;
  1057.         case SPURT:
  1058.           //  mouseSpurt ();
  1059.             objectGoTo(cXdst,cYdst);
  1060.             n--;
  1061.             objectGoTo(GmcCrossway[n].cX, GmcCrossway[n].cY);
  1062.             GucMouseTask = BACKSEARCH;
  1063.             break;
  1064.         default:
  1065.             break;
  1066.         }
  1067.     }
  1068. }


  1069. /*********************************************************************************************************
  1070.   END FILE
  1071. *********************************************************************************************************/





  1072. /*********************************************************************************************************
  1073. ** Function name:       piontMethod
  1074. ** Descriptions:        向點法則,電腦鼠從終點找起點
  1075. ** input parameters:    無
  1076. ** output parameters:   GmcMouse.cX,GmcMouse.cY
  1077. ** Returned value:      無
  1078. *********************************************************************************************************/

  1079. void piontMethod(int8 cX,int8 cY)
  1080. {
  1081.         if (!(GmcMouse.cX & 0x08))
  1082.         {
  1083.         if (!(GmcMouse.cY & 0x08))
  1084.                 {
  1085.                                 /*
  1086.                                  *  此時電腦鼠在迷宮的左下角
  1087.                                  */  
  1088.                                 switch (GucMouseDir)
  1089.                                 {
  1090.                         
  1091.                                 case UP:                                                    /*  當前電腦鼠向上              */
  1092.                                         LeftMethod();                                                                                        /*  左手法則                    */
  1093.                                         break;

  1094.                                 case RIGHT:                                                 /*  當前電腦鼠向右              */
  1095.                                         RightMethod();                                          /*  右手法則                    */
  1096.                                         break;

  1097.                                 case DOWN:                                                  /*  當前電腦鼠向下              */
  1098.                                         frontRightMethod();                                     /*  中右手法則                    */
  1099.                                         break;

  1100.                                 case LEFT:                                                  /*  當前電腦鼠向左              */
  1101.                                         frontLeftMethod();                                      /*  中左手法則                    */
  1102.                                         break;

  1103.                                 default:
  1104.                                         break;
  1105.                         }
  1106.                 }
  1107.     }
  1108.         else
  1109.         {
  1110.         
  1111.             frontLeftMethod();                                      /*  中左法則                    */


  1112.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) &&         /*  電腦鼠的前方有路            */
  1113.         (mazeBlockDataGet(MOUSEFRONT) == 0x00)) {                       /*  電腦鼠的前方沒有走過        */
  1114.         return;                                                         /*  電腦鼠不用轉彎              */
  1115.     }
  1116.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) &&         /*  電腦鼠的左邊有路            */
  1117.         (mazeBlockDataGet(MOUSELEFT ) == 0x00)) {                       /*  電腦鼠的左邊沒有走過        */
  1118.         //delay(20000);
  1119.        // delay(10000);
  1120.         mouseTurnleft();                                                /*  電腦鼠左轉                  */
  1121.         return;
  1122.     }
  1123.     if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) &&         /*  電腦鼠的右邊有路            */
  1124.         (mazeBlockDataGet(MOUSERIGHT) == 0x00)) {                       /*  電腦鼠的右邊沒有走過        */
  1125.         //delay(20000);
  1126.        // delay(10000);
  1127.         mouseTurnright();                                               /*  電腦鼠右轉                  */
  1128.         return;
  1129.     }
  1130.     }
  1131. }
復制代碼

所有資料51hei提供下載:
.rar (198.73 KB, 下載次數: 18)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:687193 發表于 2020-1-18 17:24 | 只看該作者
有這個代碼的頭文件嗎
回復

使用道具 舉報

板凳
ID:687193 發表于 2020-1-18 17:25 | 只看該作者
有這個代碼的頭文件嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 亚洲精品成人在线 | 亚洲综合成人网 | 成人精品一区二区三区中文字幕 | 91久久久精品国产一区二区蜜臀 | 国产精品免费观看 | 日韩免费毛片 | 久久国产精品免费 | 欧美另类视频在线 | 成人一区二区三区视频 | 中文字幕一区二区三区不卡 | 99视频在线免费观看 | 欧美在线视频一区二区 | 亚洲一区二区三区四区五区午夜 | 国产精品国产精品国产专区不卡 | 国产精品一区久久久 | 国产免费视频 | 亚洲精品视频免费观看 | 爱综合 | 欧美美女被c | 一呦二呦三呦国产精品 | 久久久久精| 精品综合久久久 | 精品国产乱码久久久久久丨区2区 | 2022精品国偷自产免费观看 | 欧美在线视频一区二区 | 日韩在线不卡 | 精品一区二区三区在线视频 | 99久久99| 亚洲手机视频在线 | 精品视频一区二区三区 | 久久久久国产 | 欧美福利精品 | 精品国产欧美一区二区三区成人 | 久久com| 日韩精品视频在线观看一区二区三区 | 在线观看www | 亚洲啊v在线 | 国产一区二区三区网站 | 亚洲精品久久久久久久久久久久久 | 国产一级片在线观看视频 |