Objective-C中小怪兽的逻辑

简介:

  学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把。在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧。从小怪兽的角度来讲,怪兽都有那些行为和属性呢?最重要的两点是小怪兽要打英雄对吧,“攻击英雄”的行为是少不了的,另一个是小怪兽打不过怎么办呢?打不过就跑呗,顺理成章,得有“逃跑”行为吧。要想跑得会动,所以得有移动”的行为吧。

  小怪兽除了上面的基本行为外,还有那些属性呢?小怪兽在攻击英雄的同时生命力是由变化的,会由一个值变到另一个值,所以得有“当前的生命力”“原来的生命力”,同时“攻击力”“防御力”对于小怪兽来说也是必不可少的,移动时得有“当前位置”“原来位置”。下面的代码运行的环境是XCode5.0.2版本。

  面向对象不就是用代码模拟现实中的对象,将现实中对象的某些行为能力,特征用代码表现出来,然后用这些代码来模拟现实中的问题。下面就是用计算机来模拟一下小怪兽的逻辑,本博文的文文字和代码均属原创,转载请注明出处。

  一.在计算机中位置一般是由坐标来实现的,所以坐标类是要有的。以下是定义坐标的interface, 存放在Location.h文件中

  代码说明:

    1.下面有两个属性表示坐标x和y,分别给x和y编写setter和getter方法

    2.为了初始化为该类定义类便利构造函数

    3.为了方便查看坐标,为该类定义类display方法,便于显示坐标

 

    编写implementation,对于的文件为Location.m

//
//  Location.m
//  HelloOC
//
//  Created by ludashi on 14-7-27.
//  Copyright (c) 2014年 ludashi. All rights reserved.
//

#import "Location.h"

@implementation Location
//实现便利初始化函数
- (id) initWithX : (int)vX
           AndY : (int)vY
{
    if (self = [super init]) {
        self->x = vX;
        self->y = vY;
    }
    return self;
}

//实现便利构造函数
+ (id) locationWithX:(int)vX
                AndY:(int)vY
{
    //实例化位置对象,并赋值
    Location *location = [[Location alloc] initWithX:vX AndY:vY];
    return location;
}

//set方法
-(void) setX:(int)vX
{
    x = vX;
}

-(void) setY:(int)vY
{
    y = vY;
}

//x和y的获取方法
- (int) getLocationX
{
    return x;
}

- (int) getLocationY
{
    return y;
}

- (void) display
{
    NSLog(@"该点的坐标为:(%d, %d)", self->x, self->y);
}

@end

  

 

  二.为了节省篇幅小怪兽类的interface就省略不写了,下面是小怪兽的属性

@private
    //当前生命值
    int currentLifeValue;
    
    //原始生命值
    int originalLifeValue;
    
    //当前位置
    Location *currentLocation;
    
    //原始位置
    Location *originalLocation;
    
    //攻击力
    int attack;
    
    //防御力
    int defense;


  1.为了小怪兽的移动打基础,必须有个方法能够更新位置,也就是实现如果小怪兽要移动,那么必须有新的坐标产生,这个新的坐标就是小怪兽要移动的位置,移动时把原有的坐标更新成现在小怪兽在的地方,而currentLocation跟新成要移动的位置。代码如下:
//设置当前位置
- (void) setCurrentLocation:(Location *)vCurrentLocation
{
    //位置更新
    originalLocation = currentLocation;
    currentLocation = vCurrentLocation;
}

 

  2.小怪兽类要想快速的复制更多的小怪兽,必须得有便利初始化方法和便利构造函数,代码如下

//便利初始化方法,初始化原始生命力和原始位置以及攻击力和防御力
- (id) initWithOriginalLifeValue:(int)vOriginalLifeValue
             AndOriginalLocation:(Location *)vOriginalLocation
                       AndAttack:(int)vAttack
                      AndDefence:(int)vDefence
{
    if (self = [super init]) {
        self->originalLifeValue = vOriginalLifeValue;
        self->originalLocation = vOriginalLocation;
        self->attack = vAttack;
        self->defence = vDefence;
    }
    return self;
}

//便利构造器
+ (id) monsterWithOriginalLifeValue:(int)vOriginalLifeValue
                AndOriginalLocation:(Location *)vOriginalLocation
                          AndAttack:(int)vAttack
                         AndDefence:(int)vDefenceon
{
    //实例化对象
    Monster *monster = [[Monster alloc] initWithOriginalLifeValue:vOriginalLifeValue
                                               AndOriginalLocation:vOriginalLocation
                                                         AndAttack:vAttack
                                                        AndDefence:vDefenceon];
    return monster;
    
}

  

  3.小怪兽用攻击英雄得会动吧,移动时要给小怪兽下达个指令让它去哪,得有个坐标能传入到move函数中,代码如下

//移动行为
-(void) move : (Location *)vCurrentLocation
{
    //传入当前值,调用坐标更新方法
    [self setCurrentLocation:vCurrentLocation];
    
    
    //获取原有位置的坐标
    int oX = [originalLocation getLocationX];
    int oY = [originalLocation getLocationY];
    
    //获取现在的位置
    int cX = [currentLocation getLocationX];
    int cY = [currentLocation getLocationY];
    
    //获取现在位置的坐标
    NSLog(@"从位置(%d, %d), 移动到了(%d, %d)", oX, oY, cX, cY);
}

  

  4.小怪兽的使命是什么呢,当然是攻击英雄啦,但是攻击英雄是有好处的,会提高防御力,和攻击力哦,所以攻击英雄的同时需要更新攻击力和防御力

//攻击英雄行为
- (void) attackHero
{
    //攻击一次英雄的攻击力会变化,防御力也会变化,这里用加一模拟
    attack++;
    defence++;
    NSLog(@"攻击英雄,攻击力增为%d, 防御力增加为%d",attack, defence);
}

 

  5.小怪兽不是什么正人君子,所以打不过他就跑,下面是逃跑的方法

//逃跑行为
- (void) escape
{
    //逃跑则会减少
    attack--;
    defence--;
    NSLog(@"打不过就跑吧,攻击力减为%d, 防御力减为:%d", attack, defence);
}

 

测试运行结果如下:

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

 

  上面就是小怪兽的基本逻辑,利用面向对象来描述小怪兽的好处是好扩充,比如逃跑会有什么其他后果,可以在不改动原来代码的基础上增加相应的方法或者类。通过小怪兽的逻辑希望大家会更好的理解面向对象的思想。

相关文章
|
9月前
|
存储 自然语言处理 算法
【编译原理】LR(1)分析法:C/C++实现
【编译原理】LR(1)分析法:C/C++实现
1096 0
预期违背理论(expectancy violations theory)
预期违背理论(Expectancy Violations Theory)是由心理学家 John Bowlby 提出的,该理论认为人们在社交互动中会根据以往的经验和预期来判断他人的行为。当他人的行为与我们的预期相违背时,我们会产生一种心理上的不适感,这种不适感可能表现为惊讶、失望、愤怒等情绪。预期违背理论可以用来解释人们在社交互动中的情绪反应,以及为什么人们会对他人的行为产生不同的情感体验。
5408 4
|
算法
【计算理论】可判定性 ( 丘奇-图灵论题 | 可判定性引入 | 图灵机语言 | 图灵机结果 | 判定机 | 部分函数与全部函数 | 可判定性定义 )
【计算理论】可判定性 ( 丘奇-图灵论题 | 可判定性引入 | 图灵机语言 | 图灵机结果 | 判定机 | 部分函数与全部函数 | 可判定性定义 )
246 0
|
存储 iOS开发
探寻Objective-C引用计数本质
本文涉及到的CPU架构为arm64,其它架构大同小异。 源码来自苹果开源-runtime。 Objective-C中采用引用计数机制来管理内存,在MRC时代,需要我们手动retain和release,在苹果引入ARC后大部分时间我们不用再关心引用计数问题。
1084 0
|
存储 安全 iOS开发
Objective-C 学习第六天
一、 内存管理 内存的作用: 存储数据. 1). 如何将数据存储到内存之中 声明1个变量,将这个数据存储进去 2). 当数据不再被使用的时候,占用的内存空间如何被释放 内存中的五大区域 栈:局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
1010 0
|
存储 对象存储 iOS开发
Objective-C 学习第十天
一、NSDictionary NSArray和NSMutableArray数组 存储数据特点:每个元素紧密相连,并且每个元素中都是直接存储的值. 缺点:数组元素下标不固定,都有可能发生变化,无法通过下标来唯一确定数组中的元素.
827 0
|
存储 iOS开发 对象存储
Objective-C 学习第九天
一、 框架: 系统或者第三方事先写好的写很牛X功能的类,把这些类交给我们使用,这些类的集合就叫框架. Foundation框架: 是一个包,有很多类和函数,定义了一些数据类型.
964 0
|
存储 iOS开发 编译器
Objective-C 学习第五天
一、 创建一个对象,内存是如何分配 1). 子类对象中有自己的属性和所有父类的属性 2). 代码段中每一个类都有一个isa指针,这个指针指向它的父类. 结构体与类 相同点: 都可以将多个数据封装为1个整体 struct Data{ ...
684 0
|
存储 iOS开发
Objective-C 学习第八天
一、延展 延展: Extension 1). 是一个特殊的分类,所以延展也是类的一部分 2). 特殊之处: a. 延展这个特殊的分类没有名字 b. 只有声明没有实现,和本类共享一个实现 延展的语法 语法: @interface 本类名 () @end 没有实现,和本类共享一个实现.
867 0
|
存储 iOS开发
Objective-C 学习第四天
一、 Xcode文档的安装 1). Xcode文档提供了很多框架, 框架当中有很多类和函数, 提供的一些数据类型. 2). Xcode文档需要单独安装.
935 0

热门文章

最新文章