zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Objective-C中小怪兽的逻辑

逻辑 Objective 中小
2023-09-14 08:57:28 时间

学习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- 

@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];



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

 

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


C++ Trick:右值引用、万能引用傻傻分不清楚 C++11标准颁布距今已经十年了,在这个标准中引入了很多新的语言特性,在进一步强化C++的同时,也劝退了很多人,其中就包含右值引用。
只用一行代码就能搞定,博弈论究竟是什么神仙算法? 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 博弈论是一门很庞大的学科,它算是数学的一个分支,也和运筹学甚至是经济学有关。虽然它严格说起来并不是算法领域的内容,但是有不少关于博弈论有趣的算法和问题。
内存中的五大区域 栈:局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
自动释放池的原理 存入到自动释放池中的对象,在自动释放池销毁的时候,会自动调用储存在该自动释放池中的所有对象的release方法. 可以解决的问题: 将创建的对象,存入到自动释放池之中,就不再需要手动的release这个对象了,因为池子销毁的时候,就会自动的调用池中所有的对象release.
NSArray和NSMutableArray数组 存储数据特点:每个元素紧密相连,并且每个元素中都是直接存储的值. 缺点:数组元素下标不固定,都有可能发生变化,无法通过下标来唯一确定数组中的元素.