我想比较石头剪刀布游戏文本框中的字符串。比较后,将结果显示在另一个文本框中。但它无法比较。有人可以帮我吗?
if strcmp('Rock'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Draw');
elseif strcmp('Rock'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Rock'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Draw');
elseif strcmp('Paper'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Draw');
end
问题在于比较两个文本框的字符串的方式:
if strcmp('Rock'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
在此声明中:
'Rock'==get(handles.computer,'string')
逐个元素地比较两个字符串的字符。
此比较返回一个类型为
logical
的数组(如果第一个字符串的第 i 个字符等于第二个字符串的第 i 个字符,则为 1
,否则为 0
)
请注意,如果两个字符串的长度不同,您将收到诸如
Matrix dimensions must agree.
之类的错误
这同样适用于声明的第二部分:
'Rock'==get(handles.player,'string')
如果 computer 和 player 都插入相同的字符串(例如 Rock),那么您可以使用
strcmp
来比较两个 logical
数组,并且会失败。
cases
因此,您必须直接比较字符串。
一个可能的解决方案是使用
switch
语句:
lower case
(Rock 和 rock ... 相同)cases
的switch
拥有不同的组合一个可能的实现可能是:
% Get the Computer string (in lower case)
computer=lower(get(handles.computer,'string'))
% Get the Player string (in lower case)
player=lower(get(handles.player,'string'))
% Concatenate the two string
res=[computer player]
% Check for the different combination
switch(res)
case 'rockrock'
set(handles.result,'string','Draw');
case 'rockpaper'
set(handles.result,'string','Player wins');
case 'rockscissor'
set(handles.result,'string','Computer wins');
case 'paperrock'
set(handles.result,'string','Computer wins');
case 'paperpaper'
set(handles.result,'string','Draw');
case 'paperscissor'
set(handles.result,'string','Player wins');
case 'scissorrock'
set(handles.result,'string','Player wins');
case 'scissorpaper'
set(handles.result,'string','Computer wins');
case 'scissorscissor'
set(handles.result,'string','Draw');
otherwise
set(handles.result,'string','Invalid text');
end
希望这有帮助,
卡普拉'
作为 @il_raffa 的替代方案,我建议分别将
rock
、scissor
、paper
映射到 [1,2,3]
。然后从 computer
中减去 player
的值。
那么你就可以轻松做到
if, else if, else
。
if ismember(player - computer, [-1 2]) %This mean player got a
'player wins'
elseif ismember(player - computer, [1 -2])
'computer wins'
else
'draw'
end
当只有9个条件时,
switch, case
可能没什么大不了的,但如果条件数量更多,这样的技术会让工作变得更容易。