學習objective-c的物件導向也有一段時間了,為了犒勞自己的學習成果,寫個小怪獸來犒勞一下自己把。在lol中有怪獸和英雄的角色吧,接下來就先寫乙個小怪獸的類吧。從小怪獸的角度來講,怪獸都有那些行為和屬性呢?最重要的兩點是小怪獸要打英雄對吧,「攻擊英雄」的行為是少不了的,另乙個是小怪獸打不過怎麼辦呢?打不過就跑唄,順理成章,得有「逃跑」行為吧。要想跑得會動,所以得有「移動」
的行為吧。
小怪獸除了上面的基本行為外,還有那些屬性呢?小怪獸在攻擊英雄的同時生命力是由變化的,會由乙個值變到另乙個值,所以得有「當前的生命力」和「原來的生命力」,同時「攻擊力」和「防禦力」對於小怪獸來說也是必不可少的,移動時得有「當前位置」和「原來位置」
。下面的**執行的環境是xcode5.0.2版本。
一.在計算機中位置一般是由座標來實現的,所以座標類是要有的。以下是定義座標的inte***ce, 存放在location.**件中
**說明:
1.下面有兩個屬性表示座標x和y,分別給x和y編寫setter和getter方法
2.為了初始化為該類定義類便利建構函式
3.為了方便檢視座標,為該類定義類display方法,便於顯示座標
編寫implementation,對於的檔案為location.m
//
// location.m
// hellooc
//// created by ludashi on 14-7-27.
//#import "location.h"
@implementation location
//實現便利初始化函式
- (id) initwithx : (int)vx
andy : (int)vy
return self;
}//實現便利建構函式
+ (id) locationwithx:(int)vx
andy:(int)vy
//set方法
-(void) setx:(int)vx
-(void) sety:(int)vy
//x和y的獲取方法
- (int) getlocationx
- (int) getlocationy
- (void) display
@end
二.為了節省篇幅小怪獸類的inte***ce就省略不寫了,下面是小怪獸的屬性
@private
//當前生命值
int currentlifevalue;
//原始生命值
int originallifevalue;
//當前位置
location *currentlocation;
//原始位置
location *originallocation;
//攻擊力
int attack;
//防禦力
int defense;
1.為了小怪獸的移動打基礎,必須有個方法能夠更新位置,也就是實現如果小怪獸要移動,那麼必須有新的座標產生,這個新的座標就是小怪獸要移動的位置,移動時把原有的座標更新成現在小怪獸在的地方,而currentlocation跟新成要移動的位置。**如下:
//設定當前位置
- (void) setcurrentlocation:(location *)vcurrentlocation
2.小怪獸類要想快速的複製更多的小怪獸,必須得有便利初始化方法和便利建構函式,**如下
//便利初始化方法,初始化原始生命力和原始位置以及攻擊力和防禦力
- (id) initwithoriginallifevalue:(int)voriginallifevalue
andoriginallocation:(location *)voriginallocation
andattack:(int)vattack
anddefence:(int)vdefence
return self;
}//便利構造器
+ (id) monsterwithoriginallifevalue:(int)voriginallifevalue
andoriginallocation:(location *)voriginallocation
andattack:(int)vattack
anddefence:(int)vdefenceon
3.小怪獸用攻擊英雄得會動吧,移動時要給小怪獸下達個指令讓它去哪,得有個座標能傳入到move函式中,**如下
//移動行為
-(void) move : (location *)vcurrentlocation
4.小怪獸的使命是什麼呢,當然是攻擊英雄啦,但是攻擊英雄是有好處的,會提高防禦力,和攻擊力哦,所以攻擊英雄的同時需要更新攻擊力和防禦力
//攻擊英雄行為
- (void) attackhero
5.小怪獸不是什麼正人君子,所以打不過他就跑,下面是逃跑的方法
//逃跑行為
- (void) escape
測試執行結果如下:
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
上面就是小怪獸的基本邏輯,利用物件導向來描述小怪獸的好處是好擴充,比如逃跑會有什麼其他後果,可以在不改動原來**的基礎上增加相應的方法或者類。通過小怪獸的邏輯希望大家會更好的理解物件導向的思想。
python 奧特曼打小怪獸的簡單版
from random import randint 匯入randint函式 class monster object def init self,name,energy self.name name self.energy energy if self.energy 100 print self....
Objective C 定義的型別
以下列出的是objective c內建的型別集合 型別定義 id物件的引用 指向其資料結構的指標 class類物件的引用 指向其資料結構的指標 sel選標 編譯器分配用來區分方法名的編碼 imp指向方法實現的指標,該實現返回id bool布林值,yes or no nil空的物件指標,id 0 ni...
Objective C的記憶體管理
記憶體管理,只要掌握這個原則即可 在變數的生命週期裡,如果此物件是alloc,copy,retain之類的產生的,記得要release或者autorelease。保證引用計數加減後為0。現在來比較詳細的說一下吧。首先,對於變數的生命週期,這裡有幾種 1 方法內部 即變數只存在於方法內部,但是如果此變...