属性练习+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];

    }

}

 
原文地址:https://www.cnblogs.com/huen/p/3509411.html