#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; }
时间: 2024-11-09 08:49:43