• 属性练习+NSTimer


    1

    定义游戏相关类: 1. 怪物类:当前生命值,原始生命值,当前位置,原始位置,攻击力,防御力,移动行为,攻击英雄行为,逃跑行为... ...。 2. 关卡类:关卡名称,关卡编号,关卡时间,关卡怪物们。 3. 英雄类:角色名称,等级,经验,当前生命值,原始生命值,当前位置,原始位置,移动行为,攻击怪物行为... ...。 4. 游戏类:游戏名称,游戏描述,游戏关卡,当前英雄。

    实体类中的一些数据变量封装成属性。并做正确性检测。


    Monster.h

    @interface Monster : NSObject
    {
        int _HP;         //当前hp
        int _oriHP;    //原始hp
        CGPoint _currentLoc;  //当前位置
        CGPoint _oriLoc;    //原始位置
        int _attack;       //攻击
        int _defense;      //防御
    }
    
    @property(nonatomic,assign) int HP;
    @property(nonatomic,assign,readonly) int oriHP;
    @property(nonatomic,assign) CGPoint currentLoc;
    @property(nonatomic,assign,readonly) CGPoint oriLoc;
    @property(nonatomic,assign) int attack;
    @property(nonatomic,assign) int defense;
    
    -(Monster *) initWithHP:(int)aHP
                        Loc:(CGPoint)aPoint
                     Attack:(int)aAttack
                    Defense:(int)aDefense;
    
    -(void) move;
    -(void) attack:(id)aHero;
    -(void) escape;
    @end

    Monster.m

    #import "Monster.h"
    #import "Hero.h"
    @implementation Monster
    @synthesize HP = _HP,oriHP = _oriHP,oriLoc = _oriLoc,currentLoc = _currentLoc,attack = _attack,defense = _defense;
    -(Monster *) initWithHP:(int)aHP
                        Loc:(CGPoint)aPoint
                     Attack:(int)aAttack
                    Defense:(int)aDefense;
    {
        self = [super init];
        if (self)
        {
         //当前的值不用变,因此这样赋值 _oriHP
    = 100; CGPoint p = {100,100}; //CGPoint的实质是float结构体,结构的的赋值方式是这样。 _oriLoc = p; self.HP = aHP; self.currentLoc = aPoint; self.attack = aAttack; self.defense = aDefense; } return self; } -(void) move { CGPoint p = self.currentLoc; p.x++; p.y++; self.currentLoc = p; } -(void) attack:(Hero *)aHero { aHero.HP -= self.attack; } -(void) escape { NSLog(@"逃跑"); } @end

    Hero.h

    @interface Hero : NSObject
    {
        NSString *_name;
        int _HP;         //当前
        int _oriHP;
        CGPoint _currentLoc;
        CGPoint _oriLoc;
        int _attack;
        int _defense;
    }
    
    @property(nonatomic,retain) NSString *name;
    @property(nonatomic,assign) int HP;
    @property(nonatomic,assign,readonly) int oriHP;
    @property(nonatomic,assign) CGPoint currentLoc;
    @property(nonatomic,assign,readonly) CGPoint oriLoc;
    @property(nonatomic,assign) int attack;
    @property(nonatomic,assign) int defense;
    
    -(Hero *) initWithHP:(int)aHP
                        Loc:(CGPoint)aPoint
                     Attack:(int)aAttack
                    Defense:(int)aDefense
                HeroName:(NSString *)aName;
    
    
    -(void) move;
    -(void) attack:(id)aMonster;
    -(void) escape;
    
    @end

    Level.m

    #import "Hero.h"
    #import "Monster.h"
    @implementation Hero
    @synthesize name = _name,HP = _HP,oriHP = _oriHP,
                oriLoc = _oriLoc,currentLoc = _currentLoc,
                attack = _attack,defense = _defense;
    -(Hero *) initWithHP:(int)aHP
                        Loc:(CGPoint)aPoint
                     Attack:(int)aAttack
                    Defense:(int)aDefense
                   HeroName:(NSString *)aName;
    {
        self = [super init];
        if (self)
        {
            _oriHP = 100;
            CGPoint p = {100,100};
            _oriLoc = p;
            
            self.HP = aHP;
            self.currentLoc = aPoint;
            self.attack = aAttack;
            self.defense = aDefense;
        }
        return self;
    }
    
    -(void) move
    {
        CGPoint p = self.currentLoc;
        p.x++;
        p.y++;
        self.currentLoc = p;
    }
    
    -(void) attack:(Monster *)aMonster
    {
        aMonster.HP -= self.attack;
    }
    
    -(void) escape
    {
        NSLog(@"逃跑");
    }
    @end

    Level.h

    @interface Level : NSObject
    {
        
    }
    
    @property(nonatomic,retain)NSString *name;
    @property(nonatomic,retain)NSString *code;
    @property(nonatomic,retain)NSString *time;
    
    -(Level *)initWithNum:(int)aNum;
    @end

    Game.m

    #import "Level.h"
    #import "Monster.h"
    @implementation Level
    @synthesize code = _code,name = _name,time = _time;
    
    -(Level *)initWithNum:(int)aNum
    {
        self = [super init];
        if (self)
        {
            //默认妖怪
            Monster *mons[aNum];
            for (int i = 0; i < aNum; i++)
            {
                Monster *m = [[Monster alloc]init];
                mons[i] = m;
            }
        }
        return self;
    }
    @end

    Game.h

    #import "Hero.h"
    #import "Level.h"
    #import "Monster.h"
    @interface Game : NSObject
    {
        Hero *_hero;
        Level *_level;
    }
    @property(nonatomic,retain)Level *level;
    @property(nonatomic,retain)Hero *hero;
    @end

     AppDelegate.h(定义全局变量)

    #import "Monster.h"
    #import "Hero.h"
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    {
        Monster *m;
        Hero *h;
      
    NSTimer *t;
    }
    @property (strong, nonatomic) UIWindow *window;
    
    @end

    AppDelegate.m

    #import "AppDelegate.h"
    #import "Hero.h"
    #import "Monster.h"
    #import "Level.h"
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        //.................................................................
        CGPoint p1 = {100,100};
        m = [[Monster alloc]initWithHP:100
                                            Loc:p1
                                         Attack:50
                                        Defense:50];
        
        h = [[Hero alloc]initWithHP:100
                                      Loc:p1
                                   Attack:100
                                  Defense:100
                                 HeroName:@"超人"];
        
        [h attack:m];
        NSLog(@"妖怪的生命:%d",m.HP);
        //.................................................................
      

        t = [NSTimerscheduledTimerWithTimeInterval:1

    
    

                                                 target:self

    
    

                                               selector:@selector(MoveAndAttack)

    
    

                                               userInfo:nil//方法间传递参数用

    
    

                                                repeats:YES];

    
    

     //........................................................................


    [self.window makeKeyAndVisible]; return YES; }

    -(void)MoveAndAttack

    
    

    {

    
    

        [h move];

    
    

        [h attack:m];

    
    

        NSLog(@"loc %@",NSStringFromCGPoint(h.currentLoc));

    
    

        NSLog(@"怪兽生命值为%d",m.hp);

      if (m.hp == 90)

        {

            [t invalidate];

        }

    }

     
  • 相关阅读:
    cygwin mysql forget root password
    emacs 复制粘贴的正确姿势
    yarn
    mysql 和 postgresql 区别
    hdfs
    spark
    hbase
    kafka
    flume
    java jar
  • 原文地址:https://www.cnblogs.com/huen/p/3509411.html
Copyright © 2020-2023  润新知