1、定义普通僵尸类:

实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。

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

2、定义路障僵尸类:

实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。

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

3、定义铁桶僵尸类:

实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。

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

4、在main.m中创建普通僵尸对象,设置总血量50,每次失血量为
3,没有道具。

5、在main.m中创建路障僵尸对象,设置总血量80,每次失血量为
2,设置道具为路障。

6、在main.m中创建铁桶僵尸对象,设置总血量120,每次失血量为
1,设置道具为铁桶。

main.m文件


#import
#import "CommonZombie.h"
#import "BarrierZombie.h"
#import "BucketZombie.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {

        //创建普通僵尸对象
        CommonZombie *xiaoGuang = [[CommonZombie alloc] initWithKind:@"普通僵尸" totalBlood:50];
        //设置每次失血量
        [xiaoGuang setReduceBlood:3];

        //创建路障僵尸
        BarrierZombie *xiaoMeng = [[BarrierZombie alloc] initWithKind:@"路障僵尸" totalBlood:80];
        //设置每次失血量
        [xiaoMeng setReduceBlood:2];
        //设置装备
        [xiaoMeng setProp:@"路障"];

        //创建铁桶僵尸
        BucketZombie *xiaoCui = [[BucketZombie alloc] initWithKind:@"铁桶僵尸" totalBlood:120];
        //设置每次失血量
        [xiaoCui setReduceBlood:1];
        //设置装备
        [xiaoCui setProp:@"铁桶"];

    }
    return 0;
}

普通僵尸CommonZombie.m文件


#import "CommonZombie.h"

@implementation CommonZombie
//customized init method
- (id)initWithKind:(NSString *)kind totalBlood:(NSInteger)totalBlood
{
    _kind = kind;
    _totalBlood = totalBlood;
    return self;
}
//失血
- (void)loseBlood
{
    NSLog(@"哎呀,哎呀,要死啦要死啦,掉了3滴血");
    _totalBlood -= _reduceBlood;
}
//死亡
- (void)death
{
    NSLog(@"哎呀,哎呀,死啦死啦,这次是真死啦");
}
//设置每次的失血量
- (void)setReduceBlood:(NSInteger)reduceBlood
{
    _reduceBlood = reduceBlood;
}
@end

路障僵尸BarrierZombie.m


#import "BarrierZombie.h"

@implementation BarrierZombie
//customized init method
- (id)initWithKind:(NSString *)kind totalBlood:(NSInteger)totalBlood
{
    _kind = kind;
    _totalBlood = totalBlood;
    return self;
}
//失血
- (void)loseBlood
{
    NSLog(@"哎呀,哎呀,要死啦要死啦,掉了3滴血");
    _totalBlood -= _reduceBlood;
}
//死亡
- (void)death
{
    NSLog(@"哎呀,哎呀,死啦死啦,这次是真死啦");
}
//失去装备
- (void)loseProp
{
    NSLog(@"哎呀,哎呀,要死啦,要死啦,装备没了");
}
//设置每次的失血量
- (void)setReduceBlood:(NSInteger)reduceBlood
{
    _reduceBlood = reduceBlood;
}
//设置装备
- (void)setProp:(NSString *)prop
{
    _prop = prop;
}
@end

铁桶僵尸BucketZombie.m


#import "BucketZombie.h"

@implementation BucketZombie
//customized init method
- (id)initWithKind:(NSString *)kind totalBlood:(NSInteger)totalBlood
{
    _kind = kind;
    _totalBlood = totalBlood;
    return self;
}
//失血
- (void)loseBlood
{
    NSLog(@"哎呀,哎呀,要死啦要死啦,掉了3滴血");
    _totalBlood -= _reduceBlood;
}
//死亡
- (void)death
{
    NSLog(@"哎呀,哎呀,死啦死啦,这次是真死啦");
}
//失去装备
- (void)loseProp
{
    NSLog(@"哎呀,哎呀,要死啦,要死啦,装备没了");
}
//设置每次的失血量
- (void)setReduceBlood:(NSInteger)reduceBlood
{
    _reduceBlood = reduceBlood;
}
//设置装备
- (void)setProp:(NSString *)prop
{
    _prop = prop;
}
@end

OC:打僵尸问题(类的问题)的更多相关文章

  1. [BS-18] 对OC中不可变类的理解

    对OC中不可变类的理解 OC中存在很多不可变的类(如NSString,NSAttributedString,NSArray,NSDictionary,NSSet等),用它们创建的对象存在于堆内存中,但 ...

  2. (转载)OC学习篇之---类的定义

    之前已经介绍了OC中的一个程序HelloWorld,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那 ...

  3. OC语言的面向对象—类和对象、方法

    1. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ➢ 打开电脑 ➢ ...

  4. OC学习篇之---类的定义

    OC中类的相关知识 OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言 ...

  5. OC第一讲:类和对象

    今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句,其用法和printf差不多,但是还是有差别的 1,NSLog是自动换行的,不用像printf那样还需要加'\n': ...

  6. (转载)OC学习篇之---类的延展

    前一篇文章我们介绍了类的类目概念和使用,那么这篇文章我们继续来介绍一下OC中的一个特性:延展. 其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前 ...

  7. (转载)OC学习篇之---类目的概念和使用

    上一篇文章介绍了OC中的@class关键字的使用,这一篇我们介绍一下,OC中的一个特有的亮点:类目 首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首 ...

  8. (转载)OC学习篇之---类的三大特性:封装,继承,多态

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...

  9. (转载)OC学习篇之---类的初始化方法和点语法的使用

    昨天介绍了OC中类的定义和使用,今天我们来继续学习类的初始化方法和点语法的使用. 一.首先来看一下类的初始化方法 在Java中我们知道一个每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的, ...

随机推荐

  1. iOS多线程编程--NSOperation(转)

    这篇文章写得非常不错,基础用法都涉及到了,我把文章提到的例子都写到了demo里面, 原文地址: iOS多线程--彻底学会多线程之『NSOperation』 demo下载:https://github. ...

  2. 监控undo空间和临时段的使用情况

    --1.监控undo空间情况 ),) free_space from dba_free_space where tablespace_name='UNDOTBS1' group by tablespa ...

  3. Python3 错误和异常

    Python有两种错误很容易辨认:语法错误和异常. 语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 >>> while True print('He ...

  4. 粗糙的es6 -> es5转换正则集

    (r'() => {}','function () {return {}}'), # (r'\{\.\.\.(.+?)\}','Object.assign({}, \\1)') , # (r'( ...

  5. 操作系统内核Hack:(一)实验环境搭建

    操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...

  6. Android系统对话框——自定义关闭

    Android系统对话框--自定义关闭 Dialog是我们在项目中经常用到的,5.x以后的Dialog也很好看,很安卓风,Android也给我们提供了新的包,低版本可以显示一样的效果.我们在使用的导入 ...

  7. Dynamics CRM2016 关闭错误报告弹框提示

    在之前的版本中错误报告的弹框提示是可以在隐私首选项中设置关闭的,如下图所示 但是在2016中这个设置没了 有人说在右上角的选项中设置,但那个只能是设置个人的无法修改系统级别的.在系统中找了半天还是没有 ...

  8. iOS 中隐藏UITableView最后一条分隔线

    如何优雅的隐藏UITableView中最后一条分割线? 这个问题是很常见,却又不太容易解决的. 可能通常的做法都是隐藏UITableView的分割线,自定义一条. 最近在使用弹出菜单的时候,同样遇到了 ...

  9. 浅析"Sublabel-Accurate Relaxation of Nonconvex Energies" CVPR 2016 Best Paper Honorable Mention

    今天作了一个paper reading,感觉论文不错,马克一下~ CVPR 2016 Best Paper Honorable Mention "Sublabel-Accurate Rela ...

  10. 两种利用GCD实现分步获取结果的方式和SDWebImage缓存机制的验证

    前段时间写界面,因为数据的请求分成了两部分,所以用到了多线程,实现数据的分步请求,然后自己写了一个Demo,用两种方式实现分步获取内容,其中也包含了验证SDWebImage这个库的缓存机制,在这里给大 ...