• 植物大战僵尸


    #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;
    }
    


    
    


  • 相关阅读:
    初始化toolstrip
    XmlWriter.WriteString() problem__“.”(十六进制值 0x00)是无效的字符。
    C#使用Dotfuscator混淆代码的加密方法(转)
    新软件收钱老软件不能用的思路
    位标记
    编程的严谨性
    制作安装项目后无法保存图片
    学习泛型
    Sql Server 中一个非常强大的日期格式化函数
    淘宝api 桌面程序(cs,客户端)接入规则
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6741953.html
Copyright © 2020-2023  润新知