对象在方法中进行连续的传递 —— 士兵开枪练习

#import <Foundation/Foundation.h>
//子弹声明
@class YLSoldier;
//告诉编译器,这是一个类,但是类中有什么样的东西,@class 是不能告诉编译器的

@interface YLBullet : NSObject
{
    @public
    int _power;
}
- (void) flyTo:(YLSoldier *)someone;
@end
//枪声明
@interface YLGun : NSObject
{
    @public
    int _bulletCoune;
    double _shootRange;
}
- (void) shootTo:(YLSoldier *)someone with:(YLBullet *)bullet;
@end
//声明士兵类
@interface YLSoldier : NSObject
{
    @public
    NSString * _name;
    int _life;
}
- (void) shoot:(YLSoldier *)someone using:(YLGun *)gun andwith:(YLBullet *)bullet;
@end
//士兵实现
@implementation YLSoldier

- (void) shoot:(YLSoldier *)someone using:(YLGun *)gun andwith:(YLBullet *)bullet
{
    NSLog(@"%@ 向 %@ 开了一枪",_name,someone->_name);
    [gun shootTo:someone with:bullet];
}
@end
//枪实现
@implementation YLGun

- (void)shootTo:(YLSoldier *)someone with:(YLBullet *)bullet
{
    NSLog(@"枪向 %@ 射出一颗子弹",someone->_name);
    [bullet flyTo:someone];
}
@end
//子弹实现
@implementation YLBullet

- (void)flyTo:(YLSoldier *)someone
{
    if (someone->_life > self->_power) {
        someone->_life = someone->_life - self->_power;
    }else{
        someone->_life = someone->_life - someone->_life;
    }
    NSLog(@"对方被子弹打中一次,剩余生命:%i",someone->_life);
    if (someone->_life == 0) {
        NSLog(@"对方被打死");
    }
}

@end

int main(int argc, const char * argv[]) {
    YLSoldier *soldier1 = [YLSoldier new];
    YLSoldier *soldier2 = [YLSoldier new];
    soldier1 ->_life = 100;
    soldier1 ->_name = @"士兵一";
    soldier2 ->_life = 20;
    soldier2 ->_name = @"士兵二";

    YLGun *gun = [YLGun new];
    gun -> _bulletCoune = 10;
    gun -> _shootRange = 30;

    YLBullet *bullet = [YLBullet new];
    bullet -> _power = 13;
    [soldier1 shoot:soldier2 using:gun andwith:bullet];
    [soldier1 shoot:soldier2 using:gun andwith:bullet];

    return 0;
}

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值