要求就是我运行要让玩家循环玩,一轮一轮的,我发现现在有一个问题,当玩家走捷径时,它自动就停止了改玩家之后的所有玩家,直接到下一轮 或是走蛇梯子直接停止 大佬看下代码 n = input('How many player?') for i=1:n player{i} = input(['Entering the Name of player' num2str(i)] , 's') end round=0; disp(['rand' num2str(round)]) for k=1:length(player) sp=1; % start point playerRoadCount(k) = sp; %创建所有玩家的各个位置的当前步数 disp([ player(k) 'is now at start point square 1']) end playerFinishNub=0;%记录玩家完成的人数 while playerFinishNub=100)%如果这个玩家已经走到头了,就跳出这次循环 continue; end if (playerRoadCount(k)>=100) rolling=0; else rolling=randi([1,6]); end rollingnumber(k,round)=rolling; playerRoadCount(k)=playerRoadCount(k)+rolling; %当前玩家的位置加骰子的步数 switch playerRoadCount(k) case 4 playerRoadCount(k)=25; break; case 13 playerRoadCount(k)=46; break; case 27 playerRoadCount(k)=5; break; case 33 playerRoadCount(k)=49; break; case 40 playerRoadCount(k)=3; case 42 playerRoadCount(k)=63; break; case 43 playerRoadCount(k)=18; break; case 50 playerRoadCount(k)=69; break; case 54 playerRoadCount(k)=31; break; case 62 playerRoadCount(k)=81; break; case 66 playerRoadCount(k)=45; break; case 74 playerRoadCount(k)=92; break; case 76 playerRoadCount(k)=58; break; case 89 playerRoadCount(k)=53; break; case 99 playerRoadCount(k)=41; break; end if playerRoadCount(k)>=100 %如果有玩家达成目标,则完成数加1 playerFinishNub=playerFinishNub+1; disp(['rolling is a' rollingnumber(k) ',' player(k) 'now at' playerRoadCount(k)]) disp([player(k) 'is end!']) else disp(['rolling is a' rollingnumber(k) ',' player(k) 'now at' playerRoadCount(k)]) end end endn = input('How many player?') for i=1:n player{i} = input(['Entering the Name of player' num2str(i)] , 's') end round=0; disp(['rand' num2str(round)]) for k=1:length(player) sp=1; % start point playerRoadCount(k) = sp; %创建所有玩家的各个位置的当前步数 disp([ player(k) 'is now at start point square 1']) end playerFinishNub=0;%记录玩家完成的人数 while playerFinishNub=100)%如果这个玩家已经走到头了,就跳出这次循环 continue; end if (playerRoadCount(k)>=100) rolling=0; else rolling=randi([1,6]); end rollingnumber(k,round)=rolling; playerRoadCount(k)=playerRoadCount(k)+rolling; %当前玩家的位置加骰子的步数 switch playerRoadCount(k) case 4 playerRoadCount(k)=25; break; case 13 playerRoadCount(k)=46; break; case 27 playerRoadCount(k)=5; break; case 33 playerRoadCount(k)=49; break; case 40 playerRoadCount(k)=3; case 42 playerRoadCount(k)=63; break; case 43 playerRoadCount(k)=18; break; case 50 playerRoadCount(k)=69; break; case 54 playerRoadCount(k)=31; break; case 62 playerRoadCount(k)=81; break; case 66 playerRoadCount(k)=45; break; case 74 playerRoadCount(k)=92; break; case 76 playerRoadCount(k)=58; break; case 89 playerRoadCount(k)=53; break; case 99 playerRoadCount(k)=41; break; end if playerRoadCount(k)>=100 %如果有玩家达成目标,则完成数加1 playerFinishNub=playerFinishNub+1; disp(['rolling is a' rollingnumber(k) ',' player(k) 'now at' playerRoadCount(k)]) disp([player(k) 'is end!']) else disp(['rolling is a' rollingnumber(k) ',' player(k) 'now at' playerRoadCount(k)]) end end end
修改后的代码如下:
n = input('How many player?');
for i=1:n
player{i} = input(['Entering the Name of player' num2str(i)] , 's');
end
round=0;
disp(['rand' num2str(round)])
for k=1:length(player)
sp=1; % start point
playerRoadCount(k) = sp; %创建所有玩家的各个位置的当前步数
disp([ player(k) 'is now at start point square 1'])
end
playerFinishNub=0;%记录玩家完成的人数
while playerFinishNub < n %如果还有未完成的玩家,则继续游戏
for k=1:n %轮流进行每个玩家的操作
if (playerRoadCount(k)>=100)
continue; %如果这个玩家已经走到头了,就跳过这次循环
end
rolling=randi([1,6]);
rollingnumber(k,round)=rolling;
playerRoadCount(k)=playerRoadCount(k)+rolling; %当前玩家的位置加骰子的步数
switch playerRoadCount(k)
case 4
playerRoadCount(k)=25;
break;
case 13
playerRoadCount(k)=46;
break;
case 27
playerRoadCount(k)=5;
break;
case 33
playerRoadCount(k)=49;
break;
case 40
playerRoadCount(k)=3;
case 42
playerRoadCount(k)=63;
break;
case 43
playerRoadCount(k)=18;
break;
case 50
playerRoadCount(k)=69;
break;
case 54
playerRoadCount(k)=31;
break;
case 62
playerRoadCount(k)=81;
break;
case 66
playerRoadCount(k)=45;
break;
case 74
playerRoadCount(k)=92;
break;
case 76
playerRoadCount(k)=58;
break;
case 89
playerRoadCount(k)=53;
break;
case 99
playerRoadCount(k)=41;
break;
end
if playerRoadCount(k)>=100 %如果有玩家达成目标,则完成数加1
playerFinishNub=playerFinishNub+1;
disp(['rolling is a' rollingnumber(k) ',' player{k} 'now at' playerRoadCount(k)])
disp([player{k} 'is end!'])
else
disp(['rolling is a' rollingnumber(k) ',' player{k} 'now at' playerRoadCount(k)])
end
end
end
disp('Game Over!')
在修改后的代码中,我们通过在while循环条件中增加一个判断未完成玩家数量的语句,来保证游戏在所有玩家都到达终点之前不会结束。同时,在主循环中轮流进行每个玩家的操作,如果有玩家达成目标,则完成数加1。
这样,即使有玩家走捷径或者掉蛇或上梯子,也不会影响后续玩家的轮次,从而确保游戏能够无缝地进行下去。