1.(main.m)
#import <Foundation/Foundation.h>
#import "Zombie.h"
#import "ToolZombie.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Zombie *z1 = [[Zombie alloc] initWithName:@"普通僵尸" blood:50 loseBlood:3];//创建一个普通僵尸对象z1
ToolZombie *tz1 = [[ToolZombie alloc] initWithName:@"道具僵尸" blood:50 loseBlood:3];//创建一个有道具僵尸对象tz1
while ((z1.dieFlag == NO) || (tz1.dieFlag == NO)) {//如果普通僵尸没死或者道具僵尸没死,则执行循环条件
[z1 beingAttacked];
[tz1 beingAttacked];
}
}
return 0;
#import "Zombie.h"
#import "ToolZombie.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Zombie *z1 = [[Zombie alloc] initWithName:@"普通僵尸" blood:50 loseBlood:3];//创建一个普通僵尸对象z1
ToolZombie *tz1 = [[ToolZombie alloc] initWithName:@"道具僵尸" blood:50 loseBlood:3];//创建一个有道具僵尸对象tz1
while ((z1.dieFlag == NO) || (tz1.dieFlag == NO)) {//如果普通僵尸没死或者道具僵尸没死,则执行循环条件
[z1 beingAttacked];
[tz1 beingAttacked];
}
}
return 0;
}
2.(Zombie.h)
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
{
// 名字
NSString *_name;
// 血量
NSInteger _blood;
//失血量
NSInteger _loseBlood;
// 死亡标记
BOOL _dieFlag;
}
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood;
// 被攻击
- (void)beingAttacked;
// 死亡
- (BOOL)die;
// getter
- (BOOL)dieFlag;
@interface Zombie : NSObject
{
// 名字
NSString *_name;
// 血量
NSInteger _blood;
//失血量
NSInteger _loseBlood;
// 死亡标记
BOOL _dieFlag;
}
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood;
// 被攻击
- (void)beingAttacked;
// 死亡
- (BOOL)die;
// getter
- (BOOL)dieFlag;
@end
3.(Zombie.m)
#import "Zombie.h"
@implementation Zombie
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{//初始化
if (self = [super init]) {//获取根类的初始化
_name = name;//给实例变量赋值一个变量
_blood = blood;
_loseBlood = loseBlood;
_dieFlag = NO;//此处值得借鉴,判断是否死亡的标志
}
return self;//返回调用的对象
}
// 被攻击
- (void)beingAttacked{
if (_dieFlag == NO) {//死亡标志,判断是否死亡,NO没有死亡,执行if条件语句
if ([self die] == YES) {//self使用死亡方法,返回值_dieFlag如果为YES,
//死亡
NSLog(@"已经死亡");//输出已经死亡
}else{//否则,开始掉血
_blood -= _loseBlood;//剩余血量等于总血量-每次掉血量
if (_blood < 0) {//如果总血量小于0,
_blood = 0;//强制总血量为0
}
NSLog(@"%@剩余血量:%ld", _name ,_blood);//输出当前僵尸的剩余血量
}
}
}
// 死亡
- (BOOL)die{//布尔值判断死亡方法
if (_blood > 0) {//如果血量大于0
return _dieFlag;//返回死亡标志
}else{//如果血量小于等于0
_dieFlag = YES;//死亡标志为YES
return _dieFlag;//返回死亡标志
}
}
// getter
- (BOOL)dieFlag{//死亡标志获取器
return _dieFlag;//返回死亡标志
}
@implementation Zombie
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{//初始化
if (self = [super init]) {//获取根类的初始化
_name = name;//给实例变量赋值一个变量
_blood = blood;
_loseBlood = loseBlood;
_dieFlag = NO;//此处值得借鉴,判断是否死亡的标志
}
return self;//返回调用的对象
}
// 被攻击
- (void)beingAttacked{
if (_dieFlag == NO) {//死亡标志,判断是否死亡,NO没有死亡,执行if条件语句
if ([self die] == YES) {//self使用死亡方法,返回值_dieFlag如果为YES,
//死亡
NSLog(@"已经死亡");//输出已经死亡
}else{//否则,开始掉血
_blood -= _loseBlood;//剩余血量等于总血量-每次掉血量
if (_blood < 0) {//如果总血量小于0,
_blood = 0;//强制总血量为0
}
NSLog(@"%@剩余血量:%ld", _name ,_blood);//输出当前僵尸的剩余血量
}
}
}
// 死亡
- (BOOL)die{//布尔值判断死亡方法
if (_blood > 0) {//如果血量大于0
return _dieFlag;//返回死亡标志
}else{//如果血量小于等于0
_dieFlag = YES;//死亡标志为YES
return _dieFlag;//返回死亡标志
}
}
// getter
- (BOOL)dieFlag{//死亡标志获取器
return _dieFlag;//返回死亡标志
}
@end
4.(ToolZombie.h)
#import "Zombie.h"
@interface ToolZombie : Zombie
{
BOOL _toolFlat;
}
// 丢失道具
- (void)loseTool;
@interface ToolZombie : Zombie
{
BOOL _toolFlat;
}
// 丢失道具
- (void)loseTool;
@end
5.(ToolZombie.m)
#import "ToolZombie.h"
@implementation ToolZombie
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{
if (self = [super initWithName:name blood:blood loseBlood:loseBlood]) {//初始化父类的时候要注意
_toolFlat = YES; //初始化子类的实例变量
}
return self;//返回
}
// 丢失道具
- (void)loseTool{//丢失道具方法
NSLog(@"%@丢失道具", _name);//道具丢失,输出“丢失道具”
_toolFlat = NO;//道具标志为NO
}
// 重写被攻击方法
- (void)beingAttacked{//被攻击方法
if (_dieFlag == NO) {//判断死亡标志,NO未死亡,执行if条件
if ([self die] == YES) {//判断self执行的死亡方法,返回值为YES,已经死亡
NSLog(@"%@已经死亡",_name);//输出当前僵尸死亡
}else{//没有死亡
if (_toolFlat == YES) {//判断有无道具,YES是有道具
_blood -= (_loseBlood - 1);//少掉1滴血
}else{//没有道具
_blood -= _loseBlood;//掉血量正常
}
if ((_blood <= 30) && (_toolFlat == YES)) {//判断如果血量少于等于30,并且有道具
[self loseTool];// 丢失装备
}
if (_blood < 0) {//如果判断总血量小于0
_blood = 0;//强制总血量为0
}
NSLog(@"%@剩余血量:%ld",_name,_blood);//输出当前僵尸的血量 } }}
@implementation ToolZombie
// 初始化方法
- (instancetype)initWithName:(NSString *)name blood:(NSInteger)blood loseBlood:(NSInteger)loseBlood{
if (self = [super initWithName:name blood:blood loseBlood:loseBlood]) {//初始化父类的时候要注意
_toolFlat = YES; //初始化子类的实例变量
}
return self;//返回
}
// 丢失道具
- (void)loseTool{//丢失道具方法
NSLog(@"%@丢失道具", _name);//道具丢失,输出“丢失道具”
_toolFlat = NO;//道具标志为NO
}
// 重写被攻击方法
- (void)beingAttacked{//被攻击方法
if (_dieFlag == NO) {//判断死亡标志,NO未死亡,执行if条件
if ([self die] == YES) {//判断self执行的死亡方法,返回值为YES,已经死亡
NSLog(@"%@已经死亡",_name);//输出当前僵尸死亡
}else{//没有死亡
if (_toolFlat == YES) {//判断有无道具,YES是有道具
_blood -= (_loseBlood - 1);//少掉1滴血
}else{//没有道具
_blood -= _loseBlood;//掉血量正常
}
if ((_blood <= 30) && (_toolFlat == YES)) {//判断如果血量少于等于30,并且有道具
[self loseTool];// 丢失装备
}
if (_blood < 0) {//如果判断总血量小于0
_blood = 0;//强制总血量为0
}
NSLog(@"%@剩余血量:%ld",_name,_blood);//输出当前僵尸的血量 } }}
@end