#import <Foundation/Foundation.h>
#import "Zombie.h"
#import "BlockZombie.h"
#import "IronHatZombie.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
/*
打僵尸。需求:
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
For循环 模拟攻击,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。
*/
Zombie * zombie = [[Zombie alloc] initWithKind:@"普通僵尸" hp:50 lostHp:3];
while (zombie->_currentHp > 0) {
[zombie lostHpMethod];
}
BlockZombie * blockZombie = [[BlockZombie alloc] initWithKind:@"路障僵尸" hp:80 lostHp:2 equipment:@"英武路障之盔" weakness:2];
while (blockZombie->_currentHp >0) {
[blockZombie lostHpMethod];
}
IronHatZombie * ironZombie = [[IronHatZombie alloc] initWithKind:@"铁桶僵尸" hp:120 lostHp:1 equipment:@"巨鲸之铁桶圣衣" weakness:3];
while (ironZombie->_currentHp >0) {
[ironZombie lostHpMethod];
}
}
return 0;
}
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
{
/*
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
*/
@public
NSString * _kind;//种类
int _hp;
int _lostHp;
int _currentHp;//当前剩余的血量
}
- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp;
- (void)lostHpMethod;//被打击失血
- (void)dead;//死透
@end
#import "Zombie.h"
@implementation Zombie
- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp
{
self = [super init];
if (self) {
_kind = kind;
_hp = hp;
_lostHp = lostHp;
_currentHp = hp;
}
return self;
}
- (void)lostHpMethod
{
_currentHp = _currentHp - _lostHp;
if (_currentHp <= 0) {
//僵尸已经死亡
_currentHp = 0;
NSLog(@"%@被削掉%d血,还有%d血",_kind,_lostHp,_currentHp);
[self dead];//self用来调用自己类中的其他方法
}
else
{
//如果没死,输出血量
NSLog(@"%@被削掉%d血,还有%d血",_kind,_lostHp,_currentHp);
}
}//被打击失血
- (void)dead
{
NSLog(@"%@死啦",_kind);
}//死透
@end
#import "Zombie.h"
@interface BlockZombie : Zombie
{
NSString * _equipment;
int _weakness;
}
- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(int)weakness;
- (void)lostEquipment;//丢失装备
@end
#import "BlockZombie.h"
@implementation BlockZombie
-(id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(int)weakness
{
self = [super initWithKind:kind hp:hp lostHp:lostHp];
if (self) {
_equipment = equipment;
_weakness = weakness;
}
return self;
}
- (void)lostEquipment
{
_lostHp = 3;//装备丢失,每次掉血量增加
NSLog(@"%@的%@丢了",_kind,_equipment);
_equipment = nil;//把装备扔掉
}
//重写掉血的方法
-(void)lostHpMethod
{
//warning _weakness的作用
if ( _equipment!= nil && _currentHp <= _hp/_weakness) {
[self lostEquipment];
}
[super lostHpMethod];
}
@end
#import "BlockZombie.h"
@interface IronHatZombie : BlockZombie
@end
#import "IronHatZombie.h"
@implementation IronHatZombie
@end