Advertisement
xXx_Fortis_xXx

Untitled

Jun 19th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.57 KB | None | 0 0
  1. function calculateBoards (R)
  2.     [HIGHT, LENGTH] = calibrate(R);
  3.     XCOORD = 0;
  4.     YCOORD = 0;
  5.     BOARDS = 0;
  6.     [XCOORD, YCOORD, BOARDS] = scanHor(R, LENGTH, HIGHT, XCOORD, YCOORD);
  7.     BOARDS
  8. end
  9.  
  10. function [Hight, Length] = calibrate (R)
  11.     while ~R.is_bord('n') || ~R.is_bord('o')
  12.         if ~R.is_bord('n')
  13.             R.step('n')
  14.         end
  15.         if ~R.is_bord('o')
  16.             R.step('o')
  17.         end
  18.     end
  19.     length = 0;
  20.     hight = 0;
  21.     while ~R.is_bord('s')
  22.         hight++;
  23.         R.step('s')
  24.     end
  25.     while ~R.is_bord('w')
  26.         length++;
  27.         R.step('w')
  28.     end
  29.     Hight = hight;
  30.     Length = length;
  31. end
  32.  
  33. function [XCoord, YCoord, Boards] = scanHor (R, length, hight, xCoord, yCoord)
  34.     boards = 0;
  35.     dBoards = 0;
  36.     dXCoord = 1;
  37.     for i = [1:length+1]
  38.         vertBoards{i} = 0;
  39.     end
  40.     for i = [0:hight]
  41.         [xCoord, yCoord, dBoards, vertBoards] = scanRow(R, dXCoord, length,
  42.                                                         vertBoards,
  43.                                                         xCoord, yCoord);
  44.         boards += dBoards;
  45.         if ~R.is_bord('n')
  46.             [xCoord, yCoord] = trueStep(R, 'n', xCoord, yCoord);
  47.         end
  48.         dXCoord *= -1;
  49.     end
  50.     XCoord = xCoord;
  51.     YCoord = yCoord;
  52.     Boards = boards;
  53. end
  54.  
  55. function [XCoord, YCoord, Boards, VertBoards] = scanRow (R, dXCoord, length,
  56.                                                          vertBoards,
  57.                                                          xCoord, yCoord)
  58.     boards = 0;
  59.     prev = R.is_bord('n');
  60.     for i = [1:length]
  61.         [xCoord, yCoord] = moveFromTo(R, xCoord, yCoord,
  62.                                       xCoord+dXCoord, yCoord);
  63.         if (prev == 1) && ~R.is_bord('n')
  64.             boards++;
  65.         end
  66.         prev = R.is_bord('n');
  67.         if vertBoards{xCoord+1} && ~R.is_bord('o')
  68.             boards++;
  69.         end
  70.         vertBoards{xCoord+1} = R.is_bord('o');
  71.     end
  72.     XCoord = xCoord;
  73.     YCoord = yCoord;
  74.     Boards = boards;
  75.     VertBoards = vertBoards;
  76. end
  77.  
  78. function [XCoord, YCoord] = trueStep (R, direction, xCoord, yCoord)
  79.     if direction == 'n'
  80.         XCoord = xCoord;
  81.         YCoord = yCoord + 1;
  82.     elseif direction == 'o'
  83.         XCoord = xCoord + 1;
  84.         YCoord = yCoord;
  85.     elseif direction == 's'
  86.         XCoord = xCoord;
  87.         YCoord = yCoord - 1;
  88.     else
  89.         XCoord = xCoord - 1;
  90.         YCoord = yCoord;
  91.     end
  92.     R.step(direction)
  93. end
  94.  
  95. function [XCoord, YCoord] = moveFromTo (R, xCoord, yCoord, xCoordNew, yCoordNew)
  96.     while ~(xCoord == xCoordNew) || ~(yCoord == yCoordNew)
  97.         if xCoord < xCoordNew
  98.             if ~R.is_bord('o')
  99.                 [xCoord, yCoord] = trueStep(R, 'o', xCoord, yCoord);
  100.             else
  101.                 [xCoord, yCoord] = getRoundWall(R, 'o', xCoord, yCoord);
  102.             end
  103.         elseif xCoord > xCoordNew
  104.             if ~R.is_bord('w')
  105.                 [xCoord, yCoord] = trueStep(R, 'w', xCoord, yCoord);
  106.             else
  107.                 [xCoord, yCoord] = getRoundWall(R, 'w', xCoord, yCoord);
  108.             end
  109.         end
  110.         if yCoord < yCoordNew
  111.             if ~R.is_bord('n')
  112.                 [xCoord, yCoord] = trueStep(R, 'n', xCoord, yCoord);
  113.             else
  114.                 [xCoord, yCoord] = getRoundWall(R, 'n', xCoord, yCoord);
  115.             end
  116.         elseif yCoord > yCoordNew
  117.             if ~R.is_bord('s')
  118.                 [xCoord, yCoord] = trueStep(R, 's', xCoord, yCoord);
  119.             else
  120.                 [xCoord, yCoord] = getRoundWall(R, 's', xCoord, yCoord);
  121.             end
  122.         end
  123.     end
  124.     XCoord = xCoord;
  125.     YCoord = yCoord;
  126. end
  127.  
  128. function [XCoord, YCoord] = getRoundWall (R, wallDirection, xCoord, yCoord)
  129.     if wallDirection == 'n'
  130.         direction = 'o';
  131.     elseif wallDirection == 'o'
  132.         direction = 's';
  133.     elseif wallDirection == 's'
  134.         direction = 'w';
  135.     else
  136.         direction = 'n';
  137.     end
  138.     iterator = 1;
  139.     while R.is_bord(wallDirection)
  140.         for i = [1:iterator]
  141.             [xCoord, yCoord] = trueStep(R, direction, xCoord, yCoord);
  142.         end
  143.         direction = changeDirection(direction);
  144.         iterator++;
  145.     end
  146.     [xCoord, yCoord] = trueStep(R, wallDirection, xCoord, yCoord);
  147.     XCoord = xCoord;
  148.     YCoord = yCoord;
  149. end
  150.  
  151. function Direction = changeDirection (direction)
  152.     if direction == 'n'
  153.         Direction = 's';
  154.     elseif direction == 'o'
  155.         Direction = 'w';
  156.     elseif direction == 's'
  157.         Direction = 'n';
  158.     else
  159.         Direction = 'o';
  160.     end
  161. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement