E' possibile che uno script MATLAB esegua due funzioni diverse contemporaneamente se le condizioni richieste per esse sono soddisfatte allo stesso tempo?E 'possibile che uno script MATLAB esegua contemporaneamente due funzioni diverse
In questo caso, sto realizzando un gioco di combattimento a due giocatori su MATLAB come progetto: in qualsiasi momento se entrambi i giocatori dicono di provare a saltare.
Eseguendo questa operazione se le istruzioni separate con cicli for all'interno di esse fanno arrestare un giocatore a mezz'aria mentre l'altro completa il suo salto e quindi il primo giocatore continua il suo salto come al solito.
Attualmente ho "hardcoded" le azioni e vorrei convertirle in funzioni.
Gli esempi dei due salti sono riportati di seguito.
Anche i due giocatori sono attualmente blocchi e dovranno essere convertiti in sprite, quindi ogni azione, come camminare avanti e indietro, avrà anche un ciclo for in linea di principio, quindi questa domanda è fondamentale per il mio progetto.
if double(c(1)) == 30 && double(c(2)) == 0 && jump == 0 % up
jump=1;
for dt=0:18
dy=dy+20*0.1;
y = y + dy;
set(player,'Position',[x y w h]);
pause(0.07)
if double(c(1))==122 || double(c(2))==122 || double(c(3))==122 %check for punch
if abs(x-x2)<=64 && hit2==0
h2=h2-10;
hit2=1;
x=x;
if x<x2
x2=x2+2*dx;
elseif x>x2
x2=x2-2*dx;
end
if h2<=0
disp('YOU WIN');
else
set(health2,'position',[640-h2 0 h2 20])
end
set(player2,'position',[x2 y2 wp hp])
end
elseif double(c(1))==120 || double(c(2))==120 || double(c(3))==120 %check for kick
if abs(x-x2)<=70 && hit2==0
h2=h2-15;
hit2=1;
x=x;
if x<x2
if x2>=580
x2=580;
elseif x2<580
x2=x2+6*dx;
end
elseif x>x2
if x2<=0;
x2=0;
elseif x2>0
x2=x2-6*dx;
end
end
if h2<=0
disp('YOU WIN');
else
set(health2,'position',[640-h2 0 h2 20])
end
set(player2,'position',[x2 y2 wp hp])
end
end
end
dy=-dy;
y=126;
jump=0;
hit2=0;
end
if double(f(1))==105 && double(f(2))==0 && jump2 == 0 %player 2 up
jump2=1;
for dt2=0:1:18
dy2=dy2+20*0.1;
y2=y2+dy2;
set(player2,'position',[x2 y2 wp hp]);
pause(0.07)
if double(f(1))==103 || double(f(2))==103 || double(f(3))==103 %Player 2 check for punch
if abs(x-x2)<=64 && hit1==0
h1=h1-10;
hit1=1;
x2=x2;
if x<x2
if x>=580
x=580;
elseif x<580
x=x-2*dx;
end
elseif x>x2
if x<=0
x=0;
elseif x>0
x=x+2*dx;
end
end
if h1<=0
disp('Player 2 YOU WIN');
else
set(health,'position',[0 0 h1 20])
end
set(player2,'position',[x2 y2 wp hp])
end
elseif double(f(1))==104 || double(f(2))==104 || double(f(3))==104 %check for kick
if abs(x-x2)<=70 && hit1==0
h1=h1-15;
hit1=1;
x=x;
if x<x2
if x>=580
x=580;
elseif x<580
x=x+6*dx;
end
elseif x>x2
if x<=0;
x=0;
elseif x>0
x=x-6*dx;
end
end
if h1<=0
disp('Player 2 YOU WIN');
else
set(health1,'position',[0 0 h1 20])
end
set(player,'position',[x y w h])
end
end
end
dy2=-dy2; %#ok<*NASGU>
y2=126;
jump2=0;
hit1=0;
end
Suggerisco la soluzione di questo in un modo diverso. In qualsiasi momento t, c'è un insieme di azioni date da eseguire (A potrebbe essere vuoto). Raccogli le azioni da eseguire, esegui quindi e mostra i risultati dopo. – mmgp