zoukankan      html  css  js  c++  java
  • 属性练习+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];

        }

    }

     
  • 相关阅读:
    程序员:不要自称为码农
    SpringBoot对静态资源配置
    LeetCode 572. Subtree of Another Tree(子树)
    LeetCode 437. Path Sum III(统计路径和等于sum的路径数量)
    LeetCode 112. Path Sum(判断路径和是否等于一个数)
    LeetCode 617. Merge Two Binary Trees(归并两棵二叉树)
    LeetCode 226. Invert Binary Tree(翻转二叉树)
    Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
    linux-查询某软件的安装的目录
    WebService概念解释
  • 原文地址:https://www.cnblogs.com/huen/p/3509411.html
Copyright © 2011-2022 走看看