Objective-C中小怪兽的逻辑

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

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

时间: 2024-10-11 10:26:49

Objective-C中小怪兽的逻辑的相关文章

小怪兽的逻辑

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

小怪兽 Java反射技术 等你来打

Java反射技术,是java的难点,也是程序员进化过程中的必打小怪兽,这里就根据java api好好研究一下java的反射技术. Class Fields Methods 请先回忆一下[java类的定义]. 一.反射是什么 反射是什么?百度百科这样定义:JAVA反射机制是在运行状态下,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取对象信息以及动态调用对象方法的功能称为java语言的反射机制. 可以这样理解,大家小时候有木有玩过平

主角需要有个可以殴打的小怪兽:数据模板和个体实例的区别(新手的一个常见错误)

这一篇文章中,主要是要理清一个概念: 虽然都是同一个类的对象,但是个体实例是用来储存独立的个体对象的,个体属性的变化不会影响到其他的个体对象.数据模板则是每个个体对象在实例化时,生成属性所参照的模板.因此,数据模板一定不要作为个体对象来使用(ps,像我这样的初学者很容易犯这类错误,比如改动了一个道具的攻击力,然后发现道具栏中其他的同类道具攻击力都给改动了!!!) 那么,就拿主角喜欢殴打的小怪兽来举例吧. 首先,通过读取xml配置,我们可以获得一套怪物的数据模板: List<Enemy> lEn

Python中“物理行”和“逻辑行”的区别。

物理行:就是程序员所写代码的所在行. 逻辑行:是指源代码经过预编译后,代码所在的那一行. Python假定每个物理行都对应着一个逻辑行.例如:print( "Hello World" ) 就是一个物理行,Python希望每行只有一个语句,因为这样看起来更加易读. 如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(; )来特别地标明这种用法.分号表示一个逻辑行/语句的结束. 例如: count = 5 print ( "count" ) 与下面的语句等同

奥尔曼打小怪兽

怪兽类 1 package com.lovo; 2 3 public class Monster { 4 private String name; 5 private int hp; //血量 6 private int aggressivity; //攻击力 7 private int defense; //防御力 8 9 10 public Monster() { 11 } 12 13 public Monster(String name, int hp, int aggressivity,

objective C中的字符串(三)

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7343561 objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的操作字符串,下面举几个例子: 1.创建: 直接利用等号赋值 NSString *

Android记录22-关于开发中账号绑定的逻辑处理

Android记录22-关于开发中账号绑定的逻辑处理 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要跟大家分享的是开发中我们常常遇到的账号绑定的功能开发,我们先来思考几个问题: 1. 为什么要有账号绑定? 2. 它跟第三方登录有什么不同? 3. 如何来处理账号绑定的相关逻辑? 好,带着这三个疑问,我们来为我们的应用开发账号绑定的功能.给大家看看一个效果图: 前面分享过关于第三方登录.分享的实现的博文:http://blog.c

白盒测试中的几种逻辑覆盖

白盒测试又称为结构测试.透明盒测试.逻辑驱动测试或基于代码的测试.就是在知道软件代码,和内部逻辑结构后进行的一项测试.主要目的是检查内部结构,逻辑.方法是检查每一条路径.与黑盒测试相比,黑盒测试更偏向用户,白盒测试更偏向于开发者.黑盒测试只需要输入和结果.而白盒测试更需要测试,软件内部是如何运行的. 今天我想说一说,白盒测试中的几种逻辑覆盖 白盒测试,为了保证测试的完整性,就要测试软件内部的每一条路径.逻辑覆盖方法能帮助我们设计测试用例,以减少不必要的消耗: 逻辑覆盖包括语句覆盖.判定覆盖.条件

objective C中继承、协议、分类和多态的实现

第一.objective C中继承的实现 在oc中只有实例变量会有权限控制,实例方法和类方法是没有权限控制的,这点与c++不同,OC默认的是protected,并且在声明权限控制时,没有分号 在OC中可以像C++一样用指针运算法来访问实例变量 Rectangle.h 文件代码: #import <Foundation/Foundation.h> @interface Rectangle : NSObject { int _width; int _height; } @property (non