2016-07-14 23 views
0

ich schreibe einen Code, der GUI und Mfile in MATHLAB verwendet. In meinem Programm habe ich ein Board.Jeder Zeit, Computer legte einen Marmor und drehen Sie das Brett dann ein Marmor Ort und drehen Richtung des Boards vom Benutzer und nach jedem dieser Dinge, ich will es zeigt das Ergebnis in axes1 in GUI. aber es Arbeit in Zeile 9 im Code doesen't unter:wie man Achsen im Führer aktualisiert - Matlab

% some codes... 
1. while(currentDepth < 7) 
2. if(mod(currentDepth,2) ~= (plrC-1)) 
3.  plat(currentDepth); 
4.  drawTable(); % show the result in axes1 --> it works 
5. else 
6.  getMarble(); 
7.  drawTable(); % show the result in axes1 --> it works 
8.  rotate(); 
9.  drawTable(); % show the result in axes1 --> it dosen't work 
10. end 
11. end 
% some codes... 

.

function drawTable() 
global board; 
% some codes... 
imshow(board,[0 4]); 
end 

Haben Sie eine Idee?

es ist Drehfunktion. Die Platine ist in 4 Teile geteilt, nur 1 Teil dreht sich.

function rotate() 
global board; 
block = 0; 
vector = 'non'; 
while(block<1 || block>4) 
    block = str2double(cell2mat(inputdlg('chose a block: 1/2/3/4','board rotation'))); 
end 
switch block 
    case 1 
     k=1; z=1; 
    case 2 
     k=1; z=4; 
    case 3 
     k=4; z=1; 
    case 4 
     k=4; z=4; 
end 
while(~strcmp(vector,'left') && ~strcmp(vector,'right')) 
    vector = questdlg('rotate left or right','Rotation','left','right','right'); 
end 
if(strcmp(vector,'left')) 
    board(k:k+2,z:z+2)=rot90(board(k:k+2,z:z+2)); 
else 
    board(k:k+2,z:z+2)=rot90(board(k:k+2,z:z+2),3); 
end 
end 

ok jetzt hier haben wir einen vereinfachten Code. Erstellen Sie eine neue GUI mit Achsen und führen Sie dann den folgenden Code aus 'OpeningFnc' aus. Du wirst mein Problem sehen.

function test() 
currentDepth = 1; 
plrC = 1; 
plrO = 2; 
board = zeros(6); 
while(currentDepth < 40) 
    if(mod(currentDepth,2) == 1) 
     plat(); 
     drawTable(); % show the result in axes1 --> it works 
    else 
     getMarble(); 
     drawTable(); % show the result in axes1 --> it works 
     rotate(); 
     drawTable(); % show the result in axes1 --> it dosen't work 
    end 
    currentDepth = currentDepth +1; 
end 

function plat() 
    for a=1:5000 
     for b=1:5000 
      for c=1:50 
      m = a + b; 
      end 
     end 
    end 
    row = 1; 
    column = 1; 
    while(board(row,column) ~= 0) 
     row = randi(6); 
     column = randi(6); 
    end 
    board(row,column) = plrC; 
    row = randi([1 4]); 
    column = randi([1 4]); 
    board(row:row+2,column:column+2)=rot90(board(row:row+2,column:column+2)); 
end 
function drawTable() 

    board(board==0) = board(board==0)+4; 
    B = zeros(305); 
    B(:,152:154) = 3; 
    B(152:154,:) = 3; 
    for i=1:6 
     for j=1:6 
      x = (i*5)+1+(i-1)*45; 
      y = (j*5)+1+(j-1)*45; 
      B(x:x+44,y:y+44) = board(i,j); 
     end 
    end 
    imshow(B,[0 4]); 
    board(board==4) = board(board==4)*0; 
end 
function getMarble() 

    board(board==0) = board(board==0)+4; 
    b = zeros(305); 
    b(:,152:154) = 3; 
    b(152:154,:) = 3; 
    for i=1:6 
     for j=1:6 
      x = (i*5)+1+(i-1)*45; 
      y = (j*5)+1+(j-1)*45; 
      b(x:x+44,y:y+44) = board(i,j); 
     end 
    end 
    imshow(b,[0 4]); 
    i = 0; 
    while(i~=4) 
     [x,y] = ginput(1); 
     if(x<0 || x>305 || y<0 || y>305) 
      i = 0; 
     else 
      i = b(ceil(y),ceil(x)); 
     end 
    end 
    y = ceil(y/50); 
    x = ceil(x/50); 
    board(y,x) = plrO; 
end 
function rotate() 

    block = 0; 
    vector = 'non'; 

    while(block<1 || block>4) 
     block = str2double(cell2mat(inputdlg('chose a block: 1/2/3/4','board rotation'))); 
    end 
    switch block 
     case 1 
      k=1; z=1; 
     case 2 
      k=1; z=4; 
     case 3 
      k=4; z=1; 
     case 4 
      k=4; z=4; 
    end 
    while(~strcmp(vector,'left') && ~strcmp(vector,'right')) 
     vector = questdlg('rotate left or right','Rotation','left','right','right'); 
    end 
    if(strcmp(vector,'left')) 
     board(k:k+2,z:z+2)=rot90(board(k:k+2,z:z+2)); 
    else 
     board(k:k+2,z:z+2)=rot90(board(k:k+2,z:z+2),3); 
    end 
end 

Ende

+0

Ist das eine benutzerdefinierte Rotationsfunktion? Wenn ja, geben Sie den Code – Suever

+0

Was genau meinen Sie mit "aber es funktioniert nicht in Zeile 9"? Das ist nicht plotten, dass es etwas falsch plottet, dass es abstürzt, dass es irgendwo anders plottet –

+0

es zeigt nicht aktualisiert bord. es sollte gedrehte Tafel zeigen. – elsa

Antwort

0

ThP wie gesagt, müssen drawNow i() Funktion am Ende des drawTable hinzuzufügen.