OC应用:射击游戏

在学OC基础视频过程中,将老师讲的例题改进了一下,写成了一个有意思的小游戏。想想还有点小激动呢……


/* 

 实现:射击游戏

 

1.弹夹类:

 属性:型号,伤害,子弹数

 行为:造成伤害

 

2.枪类:

 属性:型号,弹夹

 行为:发射子弹,装弹

 

3.士兵类:

 属性:姓名,生命,等级

 行为:跑,蹲,跳,开枪,被射,装弹,加血

 */


#import <Foundation/Foundation.h>


#pragma mark 弹夹

// 弹夹的声明

@interface Bullet : NSObject

{

    @public

    // 弹夹的成员变量

    NSString *_size; // 型号

    int _hurt; // 伤害

    int _bulletCount; // 子弹数

}

// 子弹的行为

-(void)doHurt; //造成伤害

@end


// 子弹行为的实现

@implementation Bullet


//造成伤害

-(void)doHurt{

        NSLog(@"%@造成了%d点伤害", _size, _hurt);

        _bulletCount --;

        NSLog(@"%@还剩%d", _size, _bulletCount);

}

@end


#pragma mark 枪类

// 枪类的声明

@interface Gun : NSObject

{

    @public

    // 枪类的成员变量

    NSString *_name; // 型号

    Bullet *_bullet; // 子弹

}

// 枪的行为

-(void)shootByBullet:(Bullet *)bullet; // 射击

-(void)reload; // 装弹

@end


// 枪类行为的实现

@implementation Gun


// 射击

-(void)shootByBullet:(Bullet *)bullet{

    [bullet doHurt];

}

// 装弹

-(void)reload{

    _bullet -> _bulletCount = 6;

    NSLog(@"装弹完毕,%@内的%@数量为%d",_name, _bullet ->_size, _bullet ->_bulletCount);

}


@end


#pragma mark 士兵类

// 士兵类的声明

@interface Soldier : NSObject

{

    @public

    // 士兵类的成员变量

    NSString *_name; // 姓名

    int _life; // 生命

    int _level; // 等级

}

// 士兵的行为

-(void)run; //

-(void)squat; //

-(void)jump; //

-(void)fire:(Soldier *)army ByGun:(Gun *)gun; // 开枪

-(void)shootedByBullet:(Bullet *)bullet; // 被射

-(void)reload:(Gun *)gun; // 装弹

-(void)cure; // 加血

@end


// 士兵行为的实现

@implementation Soldier

//

-(void)run{

    NSLog(@"%@", _name);

}


//

-(void)squat{

    NSLog(@"%@", _name);

}

//

-(void)jump{

    NSLog(@"%@", _name);

}

// 开枪

-(void)fire:(Soldier *)army ByGun:(Gun *)gun{

    if (army ->_life > 0) {

        if (gun ->_bullet ->_bulletCount > 0) {

            NSLog(@"%@%@射了%@",_name, gun ->_name, army ->_name);

            [gun shootByBullet:gun ->_bullet];

            [army shootedByBullet:gun ->_bullet];

        } else{

            NSLog(@"没子弹了还射个毛!赶紧按 R 键装填子弹");

        }

    } else{

        NSLog(@"死了还要射?!!你个禽兽!!赶紧按 W 键给%@补血,补完还能继续射",army ->_name);

    }

    

}

// 被射

-(void)shootedByBullet:(Bullet *)bullet{

        NSLog(@"%@的生命值减少了%d",_name, bullet ->_hurt);

        _life -= bullet ->_hurt;

        NSLog(@"%@的生命值还剩%d", _name, _life);

   }

// 装弹

-(void)reload:(Gun *)gun{

    NSLog(@"%@正在往%@里装填%@……", _name, gun ->_name, gun ->_bullet ->_size);

    [gun reload];

}

// 加血

-(void)cure{

    NSLog(@"%@吃药了,血量增加",_name);

    _life += 30;

    NSLog(@"%@当前血量为:%d",_name, _life);

}


@end

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // 创建子弹对象

        Bullet *bullet1 = [Bullet new];

        bullet1 -> _size = @"萝莉弹";

        bullet1 -> _hurt = 10;

        bullet1 -> _bulletCount = 6;

        

        // 创建枪对象

        Gun *gun1 = [Gun new];

        gun1 -> _name = @"萝莉枪";

        gun1 -> _bullet = bullet1;

        

        // 创建士兵对象

        Soldier *soldier1 = [Soldier new];

        soldier1 -> _name = @"怪叔叔";

        soldier1 -> _life = 100;

        soldier1 -> _level = 2;

        

        // 创建敌人对象

        Soldier *loli =[Soldier new];

        loli -> _name = @"小萝莉";

        loli -> _life = 80;

        

        // 提示用户输入指令

        NSLog(@"请输入指令 d. e. s. f.开枪 r.装弹 w.加血");

        

        // 循环控制

        while (1) {

            

            // 接收用户输入的指令

            int command = getchar();

            getchar();

            // 根据指令执行相应动作

            switch (command) {

                case 'd':

                    [soldier1 run];

                    break;

                case 'e':

                    [soldier1 jump];

                    break;

                case 's':

                    [soldier1 squat];

                    break;

                case 'f':

                    [soldier1 fire:loli ByGun:gun1];

                    break;

                case 'r':

                    [soldier1 reload:gun1];

                    break;

                case 'w':

                    [loli cure];

                    break;

                case 'q':

                    NSLog(@"射累了,不射了。");

                    return 0;

                    break;

                default:

                    break;

            }

        }

        

    return 0;

    }

}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值