这是OC第一节课,

:是一组具有相同特征和行为的食物的抽象      对象就是例的实例

类的定义分两部分:借口部分和实现部分,通常写在两个文件中

接口部分:声明了类名.父类名.实例变量(行为)

实现部分:方法的具体实现(具体行为)

接口跟实现分别放在.h和.m文件中,并且.m文件中必须实现,.h中声明的方法

PerPerson * p = [[Person alloc]init];

通过调用init方法为清空的内存重新赋值

OO(Object Oriented) 面向对象

OO(Object Oriented Programming)面向对象编程

main.m

#import <Foundation/Foundation.h>
//1.引用类的头文件
#import "Student.h"
#import "Teather.h"
#import "Cup.h"
int main(int argc, const char * argv[])
{
    //2.使用类 给对象分配内存空间
                                                                                                                                                                                                                                                                                                                                                         
  //[谁调用  方法名];
  Student * stu = [Student alloc];
                                                                                                                                                                                                                                                                                                                                                         
    //3.对 对象 初始化
                                                                                                                                                                                                                                                                                                                                                         
    stu = [stu init];
                                                                                                                                                                                                                                                                                                                                                         
    //类 *  对象  =
    Student * stu1 =[[Student alloc] init];
                                                                                                                                                                                                                                                                                                                                                         
    //利用 stu1对象 调用自身方法
    [stu1 study];
    [stu1 sleep];
                                                                                                                                                                                                                                                                                                                                                         
    Teather * ter = [[Teather alloc]init];
    [ter singing];
                                                                                                                                                                                                                                                                                                                                                         
    Cup * c = [[Cup alloc]init];
    [c drinking];
                                                                                                                                                                                                                                                                                                                                                         
    //实例变量被改变为public后,调用对象的实例变量
                                                                                                                                                                                                                                                                                                                                                         
    stu1->_name = @"深情君";
    NSLog(@"%@",stu1->_name);
                                                                                                                                                                                                                                                                                                                                                         
    return 0;
}



Student.h

#import <Foundation/Foundation.h>
@interface Student : NSObject{
                                                                                                                                                                                                                                                                                                                                                   
    //1.借口部分(所属的文件以.h结尾)
                                                                                                                                                                                                                                                                                                                                                   
    //实例变量的列表 类的特征列表
    @public
    NSString * _name;  //姓名
    NSString * _sex;   //性别
    int _age;          //年龄
                                                                                                                                                                                                                                                                                                                                                   
    //实例变量的使用:
                                                                                                                                                                                                                                                                                                                                                   
    //1.类的内部
    //在类的内部,所有方法 都必须在实现部分实现
                                                                                                                                                                                                                                                                                                                                                   
    //2.外部访问实例变量时,有坑监督的设置
    //三种访问权限(可见度)
    //@publec 公开的 表示实例变量可以 在外部 随意调用和改动
                                                                                                                                                                                                                                                                                                                                                   
    //@protected 受保护的表示实例变量不可以在外部呗调用和修改(OC默认)
                                                                                                                                                                                                                                                                                                                                                   
    //@private 私有的 不可以在外部被调用和改变
}
//类的行为列表
//方法列表(类的方法在接口部分,只是生命,不实现)
-(void) study; //学习
-(void) sleep; //睡觉
@end


Student.m

#import "Student.h"
@implementation Student
//实现部分:(.m文件)
//接口部分中的 所有方法 都必须在实现部分实现
-(void)study
{
                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                             
    _name = @"赵云龙";
    _age = 30;
    _sex = @"女W";
                                                                                                                                                                                                                                                                                                                                             
    NSLog(@"我在打球,%@ %d",_name,_age);
}
-(void)sleep
{
                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                             
 //   _name = @"伊泽瑞尔";
                                                                                                                                                                                                                                                                                                                                             
    _sex = @"爷们";
    NSLog(@"我在做梦");
}
@end

打僵尸。需求:

  定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。

定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。

定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。

For循环 模拟***,创建3个僵尸对象。

(1)、普通僵尸。总血量50,每次失血3.

(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.

(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.

循环***过程中:每个僵尸被***时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。

最后一个僵尸死亡时,***停止,循环结束。输出总***次数。

#import <Foundation/Foundation.h>
@interface CommonCorpse : NSObject
{
    @public
    NSString * _CorpseType;//僵尸种类
    int _OverallBloodFiow;//总血量
    int _EveryHemorrhage;//每次失血量
}
-(id)initWithcorpsetype;
-(int)hit;//打
-(void)dead;//死
@end
#import "CommonCorpse.h"
@implementation CommonCorpse//普通僵尸
-(id)init
{
    self = [super init];
    if (self) {
        _CorpseType = @"普通僵尸";
        _OverallBloodFiow = 50;
        _EveryHemorrhage = 3;
    }
    return self;
}
-(int)hit
{
    _OverallBloodFiow = _OverallBloodFiow - _EveryHemorrhage;
    NSLog(@"失去掉%d",_EveryHemorrhage);
    NSLog(@"剩%d血", _OverallBloodFiow);
    return _OverallBloodFiow;
}
-(void)dead
{
    NSLog(@"僵尸死了");
}
@end
 CommonCorpse * com = [[CommonCorpse alloc] init];
//    for (int i = 0; com ->_OverallBloodFiow > 0;i++ ) {
//        if ([com hit] <=0) {
//            [com dead];
//        }
//    }



#import <Foundation/Foundation.h>
#import "CommonCorpse.h"
@interface LZCorpse : CommonCorpse
{
    @public
    NSString * _prop;//道具
    NSString * _weakness;//弱点
}
-(void)equip;//装备
@end
#import "LZCorpse.h"
@implementation LZCorpse
- (id)init
{
    self = [super init];
    if (self) {
        _CorpseType = @"路障僵尸";
        _OverallBloodFiow = 80;
        _EveryHemorrhage = 2;
        _prop = @"路障";
        _weakness = @"见光死";
    }
    return self;
}
-(void)equip
{
    NSLog(@"失去装备%@",_prop);
    _prop = Nil;
    _EveryHemorrhage = 3;
}
@end
 LZCorpse * LZ = [[LZCorpse alloc] init];
//    for (int i = 0; LZ ->_OverallBloodFiow > 0; i++) {
//        if (LZ ->_OverallBloodFiow <= 40 && LZ->_prop != nil) {
//            [LZ equip];
//        }
//        if ([LZ hit] <= 0) {
//            [LZ dead];
//        }
//    }


#import <Foundation/Foundation.h>
#import "LZCorpse.h"
@interface Drum :LZCorpse
{
          
}
@end
#import "Drum.h"
@implementation Drum
- (id)init
{
    self = [super init];
    if (self) {
        _CorpseType = @"铁桶僵尸";
        _OverallBloodFiow = 120;
        _EveryHemorrhage = 1;
        _prop = @"铁桶";
        _weakness = @"见光死";
              
    }
    return self;
}
@end
   Drum * drum = [[Drum alloc]init];
//    for (int i = 0; drum ->_OverallBloodFiow > 0; i++) {
//        if (drum ->_OverallBloodFiow <= 40 && drum ->_prop != nil) {
//            [drum equip];
//        }
//        if ([drum hit ]<= 0) {
//            [drum dead];
//        }
//    }



CommonCorpse * com = [[CommonCorpsealloc] init];

LZCorpse * LZ = [[LZCorpsealloc] init];

Drum * drum = [[Drumalloc]init];

for (int i = 1; com ->_OverallBloodFiow > 0 || LZ ->_OverallBloodFiow > 0 || drum ->_OverallBloodFiow > 0; i++) {

if (com ->_OverallBloodFiow > 0) {

int HP1 = [com hit];

if (HP1 <= 0) {

               [com dead];

NSLog(@"打了%d,普通僵尸死了",i);

           }

       }

if (LZ ->_OverallBloodFiow > 0) {

int HP2 = [LZ hit];

if (HP2 <= 40 && LZ->_prop != nil) {

               [LZ equip];

           }

if (HP2 <= 0) {

               [LZ dead];

NSLog(@"打了%d,路障僵尸死了",i);

           }

       }

if (drum ->_OverallBloodFiow > 0) {

int HP3 = [drum hit];

if (HP3 <= 40 && drum->_prop != nil) {

               [drum equip];

           }

if (HP3 <= 0) {

               [drum dead];

NSLog(@"打了%d,铁桶僵尸死了",i);

           }

       }

   }


return0;


}