zoukankan      html  css  js  c++  java
  • 植物大战僵尸

    1.(main.m)
    #import <Foundation/Foundation.h>
    #import "Zombie.h"
    #import "ToolZombie.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
           
            Zombie *z1 = [[Zombie alloc] initWithName:@"普通僵尸" blood:50 loseBlood:3];//创建一个普通僵尸对象z1
           
            ToolZombie *tz1 = [[ToolZombie alloc] initWithName:@"道具僵尸" blood:50 loseBlood:3];//创建一个有道具僵尸对象tz1
           
            while ((z1.dieFlag == NO) || (tz1.dieFlag == NO)) {//如果普通僵尸没死或者道具僵尸没死,则执行循环条件
                [z1 beingAttacked];
                [tz1 beingAttacked];
            }
           
        }
        return 0;
    }
    2.(Zombie.h)
    #import <Foundation/Foundation.h>

    @interface Zombie : NSObject
    {
        // 名字
        NSString *_name;
        // 血量
        NSInteger _blood;
        //失血量
        NSInteger _loseBlood;
        // 死亡标记
        BOOL _dieFlag;
    }

    // 初始化方法
    - (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood;

    // 被攻击
    - (void)beingAttacked;

    // 死亡
    - (BOOL)die;

    // getter
    - (BOOL)dieFlag;

    @end
    3.(Zombie.m)
    #import "Zombie.h"

    @implementation Zombie

    // 初始化方法
    - (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{//初始化

        if (self = [super init]) {//获取根类的初始化
            _name = name;//给实例变量赋值一个变量
            _blood = blood;
            _loseBlood = loseBlood;
           
            _dieFlag = NO;//此处值得借鉴,判断是否死亡的标志
        }
       
        return self;//返回调用的对象
    }

    // 被攻击
    - (void)beingAttacked{
       
        if (_dieFlag == NO) {//死亡标志,判断是否死亡,NO没有死亡,执行if条件语句
            if ([self die] == YES) {//self使用死亡方法,返回值_dieFlag如果为YES
                //死亡
                NSLog(@"已经死亡");//输出已经死亡
            }else{//否则,开始掉血
                _blood -= _loseBlood;//剩余血量等于总血量-每次掉血量
                if (_blood < 0) {//如果总血量小于0
                    _blood = 0;//强制总血量为0
                }
                NSLog(@"%@剩余血量:%ld", _name ,_blood);//输出当前僵尸的剩余血量
            }
        }
       
    }

    // 死亡
    - (BOOL)die{//布尔值判断死亡方法

        if (_blood > 0) {//如果血量大于0
            return _dieFlag;//返回死亡标志
        }else{//如果血量小于等于0
            _dieFlag = YES;//死亡标志为YES
            return _dieFlag;//返回死亡标志
        }
    }

    // getter
    - (BOOL)dieFlag{//死亡标志获取器

        return _dieFlag;//返回死亡标志
    }

    @end
    4.(ToolZombie.h)
    #import "Zombie.h"

    @interface ToolZombie : Zombie
    {
        BOOL _toolFlat;
    }

    // 丢失道具
    - (void)loseTool;

    @end
    5.(ToolZombie.m)
    #import "ToolZombie.h"

    @implementation ToolZombie

    // 初始化方法
    - (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{

        if (self = [super initWithName:name blood:blood loseBlood:loseBlood]) {//初始化父类的时候要注意
        
            _toolFlat = YES; //初始化子类的实例变量
        }
       
        return self;//返回
    }

    // 丢失道具
    - (void)loseTool{//丢失道具方法
       
            NSLog(@"%@丢失道具", _name);//道具丢失,输出丢失道具
            _toolFlat = NO;//道具标志为NO
    }

    // 重写被攻击方法
    - (void)beingAttacked{//被攻击方法
       
        if (_dieFlag == NO) {//判断死亡标志,NO未死亡,执行if条件
            if ([self die] == YES) {//判断self执行的死亡方法,返回值为YES,已经死亡
                NSLog(@"%@已经死亡",_name);//输出当前僵尸死亡
            }else{//没有死亡
               
                if (_toolFlat == YES) {//判断有无道具,YES是有道具
                    _blood -= (_loseBlood - 1);//少掉1滴血
                }else{//没有道具
                    _blood -= _loseBlood;//掉血量正常
                }
               
                if ((_blood <= 30) && (_toolFlat == YES)) {//判断如果血量少于等于30,并且有道具
                   
                    [self loseTool];// 丢失装备
                }
               
                if (_blood < 0) {//如果判断总血量小于0
                    _blood = 0;//强制总血量为0
                }
                NSLog(@"%@剩余血量:%ld",_name,_blood);//输出当前僵尸的血量        }    }}
    @end
  • 相关阅读:
    谷歌推开发者培训指南 欲提升Android软件质量
    装饰者模式【java版】
    Java GetBytes 编码方式
    为什么程序员都是夜猫子
    Android的Handler总结
    常见的自然法则及管理启示
    java常用设计模式
    Android optionsmenu例程
    关于程序员成长的一点思考
    Java 字节流读写文件
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5170721.html
Copyright © 2011-2022 走看看