学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把。在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧。从小怪兽的角度来讲,怪兽都有那些行为和属性呢?最重要的两点是小怪兽要打英雄对吧,“攻击英雄”的行为是少不了的,另一个是小怪兽打不过怎么办呢?打不过就跑呗,顺理成章,得有“逃跑”行为吧。要想跑得会动,所以得有“移动”的行为吧。
小怪兽除了上面的基本行为外,还有那些属性呢?小怪兽在攻击英雄的同时生命力是由变化的,会由一个值变到另一个值,所以得有“当前的生命力”和“原来的生命力”,同时“攻击力”和“防御力”对于小怪兽来说也是必不可少的,移动时得有“当前位置”和“原来位置”。下面的代码运行的环境是XCode5.0.2版本。
面向对象不就是用代码模拟现实中的对象,将现实中对象的某些行为能力,特征用代码表现出来,然后用这些代码来模拟现实中的问题。下面就是用计算机来模拟一下小怪兽的逻辑,本博文的文文字和代码均属原创,转载请注明出处。
一.在计算机中位置一般是由坐标来实现的,所以坐标类是要有的。以下是定义坐标的interface, 存放在Location.h文件中
代码说明:
1.下面有两个属性表示坐标x和y,分别给x和y编写setter和getter方法
2.为了初始化为该类定义类便利构造函数
3.为了方便查看坐标,为该类定义类display方法,便于显示坐标
编写implementation,对于的文件为Location.m
1 // 2 // Location.m 3 // HelloOC 4 // 5 // Created by ludashi on 14-7-27. 6 // Copyright (c) 2014年 ludashi. All rights reserved. 7 // 8 9 #import "Location.h" 10 11 @implementation Location 12 //实现便利初始化函数 13 - (id) initWithX : (int)vX 14 AndY : (int)vY 15 { 16 if (self = [super init]) { 17 self->x = vX; 18 self->y = vY; 19 } 20 return self; 21 } 22 23 //实现便利构造函数 24 + (id) locationWithX:(int)vX 25 AndY:(int)vY 26 { 27 //实例化位置对象,并赋值 28 Location *location = [[Location alloc] initWithX:vX AndY:vY]; 29 return location; 30 } 31 32 //set方法 33 -(void) setX:(int)vX 34 { 35 x = vX; 36 } 37 38 -(void) setY:(int)vY 39 { 40 y = vY; 41 } 42 43 //x和y的获取方法 44 - (int) getLocationX 45 { 46 return x; 47 } 48 49 - (int) getLocationY 50 { 51 return y; 52 } 53 54 - (void) display 55 { 56 NSLog(@"该点的坐标为:(%d, %d)", self->x, self->y); 57 } 58 59 @end
二.为了节省篇幅小怪兽类的interface就省略不写了,下面是小怪兽的属性
1 @private 2 //当前生命值 3 int currentLifeValue; 4 5 //原始生命值 6 int originalLifeValue; 7 8 //当前位置 9 Location *currentLocation; 10 11 //原始位置 12 Location *originalLocation; 13 14 //攻击力 15 int attack; 16 17 //防御力 18 int defense;
1.为了小怪兽的移动打基础,必须有个方法能够更新位置,也就是实现如果小怪兽要移动,那么必须有新的坐标产生,这个新的坐标就是小怪兽要移动的位置,移动时把原有的坐标更新成现在小怪兽在的地方,而currentLocation跟新成要移动的位置。代码如下:
1 //设置当前位置 2 - (void) setCurrentLocation:(Location *)vCurrentLocation 3 { 4 //位置更新 5 originalLocation = currentLocation; 6 currentLocation = vCurrentLocation; 7 }
2.小怪兽类要想快速的复制更多的小怪兽,必须得有便利初始化方法和便利构造函数,代码如下
1 //便利初始化方法,初始化原始生命力和原始位置以及攻击力和防御力 2 - (id) initWithOriginalLifeValue:(int)vOriginalLifeValue 3 AndOriginalLocation:(Location *)vOriginalLocation 4 AndAttack:(int)vAttack 5 AndDefence:(int)vDefence 6 { 7 if (self = [super init]) { 8 self->originalLifeValue = vOriginalLifeValue; 9 self->originalLocation = vOriginalLocation; 10 self->attack = vAttack; 11 self->defence = vDefence; 12 } 13 return self; 14 } 15 16 //便利构造器 17 + (id) monsterWithOriginalLifeValue:(int)vOriginalLifeValue 18 AndOriginalLocation:(Location *)vOriginalLocation 19 AndAttack:(int)vAttack 20 AndDefence:(int)vDefenceon 21 { 22 //实例化对象 23 Monster *monster = [[Monster alloc] initWithOriginalLifeValue:vOriginalLifeValue 24 AndOriginalLocation:vOriginalLocation 25 AndAttack:vAttack 26 AndDefence:vDefenceon]; 27 return monster; 28 29 }
3.小怪兽用攻击英雄得会动吧,移动时要给小怪兽下达个指令让它去哪,得有个坐标能传入到move函数中,代码如下
1 //移动行为 2 -(void) move : (Location *)vCurrentLocation 3 { 4 //传入当前值,调用坐标更新方法 5 [self setCurrentLocation:vCurrentLocation]; 6 7 8 //获取原有位置的坐标 9 int oX = [originalLocation getLocationX]; 10 int oY = [originalLocation getLocationY]; 11 12 //获取现在的位置 13 int cX = [currentLocation getLocationX]; 14 int cY = [currentLocation getLocationY]; 15 16 //获取现在位置的坐标 17 NSLog(@"从位置(%d, %d), 移动到了(%d, %d)", oX, oY, cX, cY); 18 }
4.小怪兽的使命是什么呢,当然是攻击英雄啦,但是攻击英雄是有好处的,会提高防御力,和攻击力哦,所以攻击英雄的同时需要更新攻击力和防御力
1 //攻击英雄行为 2 - (void) attackHero 3 { 4 //攻击一次英雄的攻击力会变化,防御力也会变化,这里用加一模拟 5 attack++; 6 defence++; 7 NSLog(@"攻击英雄,攻击力增为%d, 防御力增加为%d",attack, defence); 8 }
5.小怪兽不是什么正人君子,所以打不过他就跑,下面是逃跑的方法
1 //逃跑行为 2 - (void) escape 3 { 4 //逃跑则会减少 5 attack--; 6 defence--; 7 NSLog(@"打不过就跑吧,攻击力减为%d, 防御力减为:%d", attack, defence); 8 }
测试运行结果如下:
2014-07-27 18:55:19.240 HelloOC[1617:303] 从位置(0, 0), 移动到了(10, 20) 2014-07-27 18:55:19.242 HelloOC[1617:303] 从位置(10, 20), 移动到了(100, 200) 2014-07-27 18:55:19.242 HelloOC[1617:303] 从位置(100, 200), 移动到了(200, 300) 2014-07-27 18:55:19.242 HelloOC[1617:303] 攻击英雄,攻击力增为11, 防御力增加为11 2014-07-27 18:55:19.243 HelloOC[1617:303] 攻击英雄,攻击力增为12, 防御力增加为12 2014-07-27 18:55:19.243 HelloOC[1617:303] 攻击英雄,攻击力增为13, 防御力增加为13 2014-07-27 18:55:19.243 HelloOC[1617:303] 打不过就跑吧,攻击力减为12, 防御力减为:12
上面就是小怪兽的基本逻辑,利用面向对象来描述小怪兽的好处是好扩充,比如逃跑会有什么其他后果,可以在不改动原来代码的基础上增加相应的方法或者类。通过小怪兽的逻辑希望大家会更好的理解面向对象的思想。