模拟打僵尸(OC-继承题)

1 篇文章 0 订阅

定义僵尸类:

公共成员变量:类型、总血量、每次失血量

方法:初始化方法(设置僵尸种类,总血量)、被打击失血、死亡


定义有防具僵尸类继承于僵尸类:

特有成员变量:防具类型

特有方法:防具被打烂


定义铁桶僵尸类继承于有防具僵尸:

特有成员变量:弱点

特有方法:防具被磁铁吸走



普通僵尸:Corpse.h
#import <Foundation/Foundation.h>

@interface Corpse : NSObject
/// 普通僵尸
{
    NSString *_type;    //类型
    NSInteger _blood;   //血量
    NSInteger _loss;    //掉血量
}


- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss;
/// 僵尸死亡方法
- (void)die;

/// 僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss;
@end

Corpse.m
#import "Corpse.h"

@implementation Corpse
- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss
{
    self = [super init];
    if (self) {
        _type = type;
        _blood = blood;
        _loss = loss;
    }
    return self;
}
/// 僵尸死亡方法
- (void)die
{
    NSLog(@"我不行了");
}
/// 僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss
{
    _blood = blood - _loss;//初始血量不变,每次打击的血量累加达到每次掉血相同的效果
    _loss += loss;
    if (_blood < 0) {
        NSLog(@"僵尸挂了");
    } else{
        NSLog(@"还有血量%ld", _blood);
    }
    return _blood;
}
@end

路障僵尸:Dedence.h
#import "Corpse.h"

@interface Dedence : Corpse
/// 路障僵尸
{
    NSString *_propType; //防具类型
    
}
- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss
          propType:(NSString *)propType;
- (void)die;

/// 僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss;
@end

Dedence.m
#import "Dedence.h"

@implementation Dedence
- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss
          propType:(NSString *)propType
{
    self = [super initWithType:type blood:blood loss:loss];
    if (self) {
        _propType = propType;
    }
    return self;
}
- (void)die
{
    NSLog(@"我不行了");
}
/// 路障僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss
{
    _blood = blood - _loss;
    _loss += loss;
    if (_blood <= 50) {
        _loss += 1;
        if (_blood <= 0) {
            NSLog(@"我不行了");
        } else {
            NSLog(@"我快不行了");
            NSLog(@"还有血量%ld", _blood);
        }
    } else{
        NSLog(@"还有血量%ld", _blood);
    }
    return _blood;
}
@end

铁桶僵尸:Iron.h
#import "Dedence.h"

@interface Iron : Dedence
/// 铁桶僵尸
{
    NSString *_weakness;  // 弱点
}
- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss
          propType:(NSString *)propType
          weakness:(NSString *)weakness;

/// 僵尸死亡方法
- (void)die;

/// 僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss;
@end

Iron.m
#import "Iron.h"

@implementation Iron
- (id)initWithType:(NSString *)type
             blood:(NSInteger)blood
              loss:(NSInteger)loss
          propType:(NSString *)propType
          weakness:(NSString *)weakness
{
    self = [super initWithType:type blood:blood loss:loss propType:propType];
    if (self) {
        _weakness = weakness;
    }
    return self;
}
/// 僵尸死亡方法
- (void)die
{
    NSLog(@"我不行了");
}
/// 僵尸掉血方法
- (NSInteger)lossBlood:(NSInteger)blood loss:(NSInteger)loss
{
    _blood = blood - _loss;
    _loss += loss;
    if (_blood <= 50) {
        _loss += 2;
        if (_blood <= 0) {
            NSLog(@"我不行了");
        } else {
            NSLog(@"我快不行了");
            NSLog(@"还有血量%ld", _blood);
        }
    } else{
        NSLog(@"还有血量%ld", _blood);
    }
    return _blood;
}
@end

main.m
#import <Foundation/Foundation.h>
#import "Corpse.h"
#import "Dedence.h"
#import "Iron.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Corpse *putong = [[Corpse alloc] initWithType:@"putong" blood:50 loss:3];
        NSInteger leftblood1 = 50;//剩余血量
        while (leftblood1 > 0) {
            leftblood1 = [putong lossBlood:50 loss:3];
        }
        if (leftblood1 < 0) {
            [putong die];
        }
        
        Dedence *road = [[Dedence alloc]initWithType:@"road" blood:80 loss:2];
        NSInteger leftblood2 = 80;
        while (leftblood2 > 0) {
            leftblood2 = [road lossBlood:80 loss:2];
        }
        if (leftblood2 < 0) {
            [road die];
        }
        
        Iron *bucket = [[Iron alloc] initWithType:@"bucket" blood:120 loss:1];
        NSInteger leftblood3 = 120;
        while (leftblood3 > 0) {
            leftblood3 = [bucket lossBlood:120 loss:1];
        }
        if (leftblood3 < 0) {
            [bucket die];
        }
        
    }
    return 0;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值