植物大战僵尸

1.(main.m)
#import <Foundation/Foundation.h>
#import "Zombie.h"
#import "ToolZombie.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        Zombie *z1 = [[Zombie alloc] initWithName:@"普通僵尸" blood:50 loseBlood:3];//创建一个普通僵尸对象z1
       
        ToolZombie *tz1 = [[ToolZombie alloc] initWithName:@"道具僵尸" blood:50 loseBlood:3];//创建一个有道具僵尸对象tz1
       
        while ((z1.dieFlag == NO) || (tz1.dieFlag == NO)) {//如果普通僵尸没死或者道具僵尸没死,则执行循环条件
            [z1 beingAttacked];
            [tz1 beingAttacked];
        }
       
    }
    return 0;
}
2.(Zombie.h)
#import <Foundation/Foundation.h>

@interface Zombie : NSObject
{
    // 名字
    NSString *_name;
    // 血量
    NSInteger _blood;
    //失血量
    NSInteger _loseBlood;
    // 死亡标记
    BOOL _dieFlag;
}

// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood;

// 被攻击
- (void)beingAttacked;

// 死亡
- (BOOL)die;

// getter
- (BOOL)dieFlag;

@end
3.(Zombie.m)
#import "Zombie.h"

@implementation Zombie

// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{//初始化

    if (self = [super init]) {//获取根类的初始化
        _name = name;//给实例变量赋值一个变量
        _blood = blood;
        _loseBlood = loseBlood;
       
        _dieFlag = NO;//此处值得借鉴,判断是否死亡的标志
    }
   
    return self;//返回调用的对象
}

// 被攻击
- (void)beingAttacked{
   
    if (_dieFlag == NO) {//死亡标志,判断是否死亡,NO没有死亡,执行if条件语句
        if ([self die] == YES) {//self使用死亡方法,返回值_dieFlag如果为YES
            //死亡
            NSLog(@"已经死亡");//输出已经死亡
        }else{//否则,开始掉血
            _blood -= _loseBlood;//剩余血量等于总血量-每次掉血量
            if (_blood < 0) {//如果总血量小于0
                _blood = 0;//强制总血量为0
            }
            NSLog(@"%@剩余血量:%ld", _name ,_blood);//输出当前僵尸的剩余血量
        }
    }
   
}

// 死亡
- (BOOL)die{//布尔值判断死亡方法

    if (_blood > 0) {//如果血量大于0
        return _dieFlag;//返回死亡标志
    }else{//如果血量小于等于0
        _dieFlag = YES;//死亡标志为YES
        return _dieFlag;//返回死亡标志
    }
}

// getter
- (BOOL)dieFlag{//死亡标志获取器

    return _dieFlag;//返回死亡标志
}

@end
4.(ToolZombie.h)
#import "Zombie.h"

@interface ToolZombie : Zombie
{
    BOOL _toolFlat;
}

// 丢失道具
- (void)loseTool;

@end
5.(ToolZombie.m)
#import "ToolZombie.h"

@implementation ToolZombie

// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{

    if (self = [super initWithName:name blood:blood loseBlood:loseBlood]) {//初始化父类的时候要注意
    
        _toolFlat = YES; //初始化子类的实例变量
    }
   
    return self;//返回
}

// 丢失道具
- (void)loseTool{//丢失道具方法
   
        NSLog(@"%@丢失道具", _name);//道具丢失,输出丢失道具
        _toolFlat = NO;//道具标志为NO
}

// 重写被攻击方法
- (void)beingAttacked{//被攻击方法
   
    if (_dieFlag == NO) {//判断死亡标志,NO未死亡,执行if条件
        if ([self die] == YES) {//判断self执行的死亡方法,返回值为YES,已经死亡
            NSLog(@"%@已经死亡",_name);//输出当前僵尸死亡
        }else{//没有死亡
           
            if (_toolFlat == YES) {//判断有无道具,YES是有道具
                _blood -= (_loseBlood - 1);//少掉1滴血
            }else{//没有道具
                _blood -= _loseBlood;//掉血量正常
            }
           
            if ((_blood <= 30) && (_toolFlat == YES)) {//判断如果血量少于等于30,并且有道具
               
                [self loseTool];// 丢失装备
            }
           
            if (_blood < 0) {//如果判断总血量小于0
                _blood = 0;//强制总血量为0
            }
            NSLog(@"%@剩余血量:%ld",_name,_blood);//输出当前僵尸的血量        }    }}
@end
原文地址:https://www.cnblogs.com/gnhxsk/p/5170721.html