Objiective-C入门学习--------武器类

1、首先了解类的基本框架

    类包括,类的声明部分和类的实现部分

       声明部分:

     @interfce     类名:父类

   {   //成员变量

       @private   //私有

       @pulic       //公有

       @protected   //受保护

     }//一般情况下把成员属性定义为私有,通过公有的方法来访问

    //方法名,及参数类型声明

   -(id)init;  //初始化

   -(返回类型)方法名:(参数类型)参数名   方法名:(参数类型)参数名

  。。。。。

 @end

     实现部分:

   @implementation    类名

   函数实现部分

  @end

2、下面介绍武器类,属性及将要实现的方法

父类:Arm

   属性:名字,价格,攻击力,攻击范围

   方法:初始化,各成员变量的set和get方法,移动,攻击

子类:Gun,Knife,Boom

 Gun:

   属性:子弹数量,射程

   方法:上子弹,开枪

Knife:

   属性:颜色

   方法:飞刀

Boom:

  属性:爆炸范围,爆炸时间

  方法:炸雷

main函数

创建一把刀,一把枪 ,一颗雷

分别移动到10,10;20,20;30,30;(坐标)

分别:飞刀 40,40       投雷 50,50     开枪  60,60  (开10枪)

3、代码部分

一、父类:Arm.h

#import <Foundation/Foundation.h>

@interface Arm : NSObject
{@private
    NSString *  name;//名字
    int price;//价格
    int act;//攻击力
    int area;//范围
}
//初始化init
-(id)init;
//设定名字
-(void)setName:(NSString *)nam;
//获取名字
-(NSString *)getName;
//设定价格
-(void)setPrice:(int )p;
//获取价格
-(int)getPrice;
//设定攻击力
-(void)setAct:(int)p;
//获取攻击力
-(int)getAct;
//设定攻击范围
-(void)setArea:(int)a;
//获取攻击范围
-(int)getArea;
//移动
-(void)moveToX:(int )x ToY:(int)y;
//攻击
-(void)fireToX:(int)x ToY:(int )y;
@end

Arm.m        //实现部分

 

#import "Arm.h"

@implementation Arm
//初始化init
-(id)init{
    if (self=[super init]) {
        self->price=100;
        self->act=10;
        self->area=3;
        self->name=@"武器";
    }else
    {
     return nil;
    }
    return self;
}
//设定名字
-(void)setName:(NSString *)nam{
    self->name=nam;
}
//获取名字
-(NSString *)getName{
    return self->name;
}
//设定价格
-(void)setPrice:(int )p{
    self->price=p;
}
//获取价格
-(int)getPrice{
    return self->price;
}
//设定攻击力
-(void)setAct:(int)p{
    self->act=p;
}
//获取攻击力
-(int)getAct{
    return self->act;
}
//设定攻击范围
-(void)setArea:(int)a{
    self->area=a;
}
//获取攻击范围
-(int)getArea{
    return self->area;
}
//移动
-(void)moveToX:(int )x ToY:(int)y{
    NSLog(@"%@正在移动到%d,%d",name,x,y);
}
//攻击
-(void)fireToX:(int)x ToY:(int )y{
  NSLog(@"%@正在攻击到%d,%d",name,x,y);
}
@end

二、子类Gun.h

 

#import "Arm.h"

@interface Gun : Arm
{
  @private
    int number;//子弹数量
    int far;//射程
}
-(id)init;
-(void)setNumber:(int) n;//上子弹
-(int)getNumber;
-(void)fireToX:(int)x ToY:(int)y;
@end

Gun.m

 

#import "Gun.h"

@implementation Gun
-(id)init{
 if(self=[super init])
     {
     self->number=24;
     }else
    {
    return nil;
    }
    return self;
}
-(void)setNumber:(int) n//上子弹
{
  if(n>=0&&n<=100)
  {
  self->number=n;
  }
}
-(int)getNumber{
    return number;
}
-(void)fireToX:(int)x ToY:(int)y{
    if(self->number>0)
        {
    self->number--;
    NSLog(@"%@正在开枪到 %d,%d",[self getName],x,y);
        }
    else{
        NSLog(@"没子弹了");
    }
}

@end

三、子类Knife.h

 

#import "Arm.h"

@interface Knife : Arm
{ @public
    NSString * color;
}
-(void)fireToX:(int)x ToY:(int)y;
@end

 

Knife.m

 

#import "Knife.h"

@implementation Knife
-(void)fireToX:(int)x ToY:(int)y{
    NSLog(@"%@正在飞刀到%d,%d",[self getName],x,y);
}
@end

四、子类 Boom.h

 

#import "Arm.h"

@interface Boom : Arm
{@public
    int boomArea;//爆炸范围
    int btime;//爆炸时间
}
-(void)fireToX:(int)x ToY:(int)y;
@end

Boom.m

 

#import "Boom.h"

@implementation Boom

-(void)fireToX:(int)x ToY:(int)y{

    NSLog(@"%@在%d秒后爆炸,位置为%d,%d",[self getName],time,x,y);
}
@end

main函数部分


#import "Gun.h"
#import "Knife.h"
#import "Boom.h"
#import "Arm.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Arm * arm;//武器指针

 
        Gun* gun=[[Gun alloc]init];//创建一把枪
        [gun setName:@"ak47"];
      
        Knife * k1=[[Knife alloc]init];//创建一把刀
        [k1 setName:@"小李"];
      
        Boom * b1=[[Boom alloc]init];//创建一颗雷
        [b1 setName:@"c4"];
        
        [gun moveToX:20 ToY:20];
        [k1 moveToX:30 ToY:30];
        [b1 moveToX:40 ToY:40];
        [k1 fireToX:30 ToY:30];
        [b1 fireToX:40 ToY:40];
        ///开10枪
        for(int i=0;i<10;i++)
        {
            [gun fireToX:20 ToY:20];
        }
        NSLog(@"剩余子弹%d",[gun getNumber]);
        //
        arm=gun;//先拿枪
         [arm fireToX:40 ToY:40];
         arm=k1;//再拿刀
        [arm fireToX:40 ToY:40];
        arm=b1;//再拿雷
        [arm fireToX:40 ToY:40];
        //oc中类型解析的方法
        printf("\nisKindOfClass");
        printf("\n%d",[arm isKindOfClass:[Arm class]]);
        printf("\n%d",[arm isKindOfClass:[Boom class]]);
        printf("\n%d",[arm isKindOfClass:[Gun class]]);
        printf("\nisMemberOfClass");
        printf("\n%d",[arm isMemberOfClass:[Arm class]]);
        printf("\n%d",[arm isMemberOfClass:[Boom class]]);
        printf("\n%d",[arm isMemberOfClass:[Gun class]]);
        id obj;
        obj=gun;
        //判断一个对象中是否包含某个方法
        SEL sel=@selector(setNumber:);  //选择器
        printf("\n%d",[obj respondsToSelector:sel]);//返回0或1
        if([obj respondsToSelector:sel])
        {
        [obj performSelector:@selector(setName:) withObject:@"沙鹰"]; //通过选择器来实现赋值
        }
        NSLog(@"gun name%@,number%d",[gun getName],[gun getNumber]);
       
    }
    return 0;
}

 

 

 

 


 

 

 

 

 

 

 

 

 

 

  

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值