Code covered by the BSD License  

Highlights from
Rubik Cube Game

from Rubik Cube Game by Sergii Iglin
Task: to solve Rubik's Cube.

RotateWithMouse(hAxes,Cube)
function Cube = RotateWithMouse(hAxes,Cube)
% to rotate cube or layer with mouse
hFig = get(hAxes,'Parent');
p = get(hFig,'CurrentPoint'); % pointer coordinates
pinpol = 0; % <>0, if Pointer is in any polygon
for k=1:size(Cube.PgRotCubeX,2), % for cube rotation
  if inpolygon(p(1),p(2),Cube.PgRotCubeX(:,k),Cube.PgRotCubeY(:,k))==1,
    pinpol = -k;
    break;
  end
end
if pinpol==0, % for layer rotation
  for k=1:size(Cube.PgRotLayX,2),
    if inpolygon(p(1),p(2),Cube.PgRotLayX(:,k),Cube.PgRotLayY(:,k))==1,
      pinpol = k;
      break;
    end
  end
end
if pinpol<0, % to rotate cube
  Axe = fix((-pinpol-1)/4)+1;
  Direction = 1-mod(fix((-pinpol-1)/2),2)*2;
  Cube = RotateCube(hAxes,Cube,Axe,Direction);
elseif pinpol>0, % to rotate layer
  Axe = fix((pinpol-1)/8)+1;
  Side = 1-mod(fix((pinpol-1)/4),2)*2;
  Direction = 1-mod(fix((pinpol-1)/2),2)*2;
  Cube = RotateLayer(hAxes,Cube,Axe,Side,Direction,1);
end
return

Contact us at files@mathworks.com