Matlab: Как создать метод, который зацикливается на свойствах класса? - PullRequest
1 голос
/ 02 мая 2020

Я написал класс под названием Pokemon и хочу создать al oop для битвы между Pokemons.

У меня возникли проблемы с написанием логики c для победителей и проигравших в битве, и я бы Спасибо за любые советы о том, как исправить то, что я написал. Заранее спасибо.

Метод должен вывести «Я проиграл», если первый покемон (obj) проиграл своему противнику, и «Я выиграл» в противном случае. Метод также должен повысить уровень побед покемонов. Параметр winner должен содержать имя (а не объект!) Победившего покемона. Победитель определяется по следующей логике c: водяные покемоны всегда выигрывают огненных покемонов, в противном случае - покемон с более высоким уровнем выигрывает; и если оба покемона имеют одинаковый уровень, побеждает первый покемон (obj).

classdef Pokemon

properties (Access = public)
  Type 
  Name 
  Level
end

methods
    function obj = Pokemon(type,name) 

    obj.Type = type;
    obj.Name = name; 
    end

    function speak(obj) 
        disp(obj.Name);
    end

    function obj=increase_level(obj)
        obj.Level = obj.Level + 1;
    end

    function print_level(obj) 
        disp(obj.Level);
    end

    function [obj, opponent, winner] = battle(obj, opponent)
      if obj.Type == PokemonType.Water && opponent.Type == PokemonType.Fire
          winner = obj.Name;
          disp("I win");
          obj.Level = obj.Level + 1; 

      elseif obj.Level >=opponent.Level
          disp("I win");
          winner = obj.Name;
          obj.Level = obj.Level + 1;



     else
         disp("I lose");
         winner = opponent.Name;
         opponent.Level = opponent.Level + 1;

      end
    end
  end
end

У меня есть код, чтобы проверить, правильно ли написанное мной:

pikachu = Pokemon(PokemonType.Electric, "Pikachu");
charmander = Pokemon(PokemonType.Fire, "Charmander");
squirtle = Pokemon(PokemonType.Water, "Squirtle");  
pikachu.speak();
charmander.speak();
squirtle.speak();  
pikachu = pikachu.increase_level();
charmander = charmander.increase_level();   % [Now pikachu should have level 1, charmander should have level 1, squirtle should have level 0]
% We expect Pikachu to win - both have the same level, Pikachu is the first
[pikachu, charmander, winner] = pikachu.battle(charmander);
disp(winner);   % [Now pikachu should have level 2, charmander should have level 1, squirtle should have level 0]  
% We expect Squirtle to win - water vs. fire
[charmander, squirtle, winner] = charmander.battle(squirtle);
disp(winner);    % [Now pikachu should have level 2, charmander should have level 1, squirtle should have level 1]  
squirtle = squirtle.increase_level();   % [Now pikachu should have level 2, charmander should have level 1, squirtle should have level 2]  
% We expect squirtle to win - same level
[squirtle, pikachu, winner] = squirtle.battle(pikachu);
disp(winner); 

Я должен получить

Pikachu 
Charmander 
Squirtle 
I win 
Pikachu 
I lose 
Squirtle 
I win 
Squirtle

вместо этого я получил:

Pikachu
Charmander
Squirtle
I lose
Charmander
I lose
Squirtle
I lose
Pikachu
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...