首页 > 代码库 > 植物大战僵尸

植物大战僵尸

#import <Foundation/Foundation.h>

@interface CommonZomble : NSObject
{
    NSString * _zombleKind;//僵尸种类
    NSInteger _totalBloodVolume;//总血量
    NSInteger _everyTimeBloodloss;//每次被攻击的血量
    NSInteger _residualVolume;//剩余血量
    BOOL _zombleDeath;//僵尸是否死亡
}

- (instancetype)initWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss;

- (void)attack;

- (BOOL)death;

- (BOOL)takeDeath;

+ (CommonZomble *)commonZombleInitWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss;
@end

#import "CommonZomble.h"

@implementation CommonZomble
- (instancetype)initWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss
{
    self = [super init];
    if (self) {
        _totalBloodVolume = totalBloodVolume;
        _residualVolume = _totalBloodVolume;
        _zombleKind = zombleKind;
        _everyTimeBloodloss = everyTimeBloodloss;
        _zombleDeath = NO;
    }
    return self;
}

- (void)attack
{
    _residualVolume = _residualVolume - _everyTimeBloodloss;
    NSLog(@"%@,剩余血量%ld,每次失血量%ld",_zombleKind,_residualVolume,_everyTimeBloodloss);
}

- (BOOL)death
{
    BOOL result = NO;
    if (_residualVolume < _everyTimeBloodloss) {
        _zombleDeath=YES;
         NSLog(@"%@已死",_zombleKind);
        result = YES;
    }
    return result;
}

- (BOOL)takeDeath
{
    return _zombleDeath;
}

+ (CommonZomble *)commonZombleInitWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss
{
    return [[CommonZomble alloc]initWithZombleKind:zombleKind totalBloodVolume:totalBloodVolume everyTimeBloodloss:everyTimeBloodloss];
}
@end
<pre name="code" class="objc">#import "CommonZomble.h"

@interface BarricadeZombie : CommonZomble
{
    NSString * _prop;//道具
    NSString * _weakness;//弱点
}

- (instancetype)initWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss prop:(NSString *)prop weakness:(NSString *)weakness;

- (void)attack;

- (void)lossProp;

- (BarricadeZombie *)barricadeZombieInitWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss prop:(NSString *)prop weakness:(NSString *)weakness;


@end



#import "BarricadeZombie.h"

@implementation BarricadeZombie
- (instancetype)initWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss prop:(NSString *)prop weakness:(NSString *)weakness
{
    self = [super initWithZombleKind:zombleKind totalBloodVolume:totalBloodVolume everyTimeBloodloss:everyTimeBloodloss];
    if (self) {
        _prop = prop;
        _weakness = weakness;
    }
    return self;
}

- (void)attack
{
    _residualVolume = _residualVolume - _everyTimeBloodloss;
      NSLog(@"%@,剩余血量%ld,每次失血量%ld",_zombleKind,_residualVolume,_everyTimeBloodloss);
    if (_residualVolume<= _totalBloodVolume/2 && _residualVolume > _totalBloodVolume/2 - _everyTimeBloodloss) {
        NSLog(@"%@丢失",_prop);
        [self lossProp];
    }
}

- (void)lossProp
{
    _everyTimeBloodloss = 3;
}

- (BarricadeZombie *)barricadeZombieInitWithZombleKind:(NSString *)zombleKind totalBloodVolume:(NSInteger)totalBloodVolume everyTimeBloodloss:(NSInteger)everyTimeBloodloss prop:(NSString *)prop weakness:(NSString *)weakness
{
    return [[BarricadeZombie alloc]
            barricadeZombieInitWithZombleKind:zombleKind totalBloodVolume:totalBloodVolume everyTimeBloodloss:everyTimeBloodloss prop:prop weakness:weakness];
}

@end

#import "BarricadeZombie.h"

@interface DrumZomble : BarricadeZombie
- (void)attack;
@end

#import "DrumZomble.h"

@implementation DrumZomble

- (void)attack
{
    _residualVolume = _residualVolume - _everyTimeBloodloss;
     NSLog(@"%@,剩余血量%ld,每次失血量%ld",_zombleKind,_residualVolume,_everyTimeBloodloss);
    if (_residualVolume <= _totalBloodVolume/3 && _residualVolume > _totalBloodVolume/3 - _everyTimeBloodloss) {
        [self lossProp];
        NSLog(@"%@掉了",_prop);
    }
}
@end
<pre name="code" class="objc">#import <Foundation/Foundation.h>
#import "CommonZomble.h"
#import "BarricadeZombie.h"
#import "DrumZomble.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        CommonZomble * commonZomble = [[CommonZomble alloc]initWithZombleKind:@"普通僵尸" totalBloodVolume:50 everyTimeBloodloss:3];
        BarricadeZombie * barricadeZombie = [[BarricadeZombie alloc]initWithZombleKind:@"路障僵尸" totalBloodVolume:80 everyTimeBloodloss:2 prop:@"路障" weakness:@"怕我"];
        DrumZomble * drumZomble = [[DrumZomble alloc]initWithZombleKind:@"铁桶僵尸" totalBloodVolume:120 everyTimeBloodloss:1 prop:@"铁桶" weakness:@"磁铁"];
        
        NSInteger count = 0;
        while (1) {
            count++;
             NSLog(@"count = %ld",count);
            if (![commonZomble death]) {
                [commonZomble attack];
            }
            
            if (![barricadeZombie death]) {
                [barricadeZombie attack];
            }
            
            if (![drumZomble death]) {
                [drumZomble attack];
            }
            if ([commonZomble takeDeath] && [barricadeZombie takeDeath] && [drumZomble takeDeath]) {
                break;
            }
        }
        NSLog(@"count = %ld",count);
        
        
    }
    return 0;
}