學習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
上面就是小怪獸的基本邏輯,利用面向對象來描述小怪獸的好處是好擴充,比如逃跑會有什么其他后果,可以在不改動原來代碼的基礎上增加相應的方法或者類。通過小怪獸的邏輯希望大家會更好的理解面向對象的思想。
![]() |
不含病毒。www.avast.com |