Я написал класс под названием 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