概述
今天讲的是开发基础,假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做?
1、设计英雄这个类
LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女,所有这些英雄,都有一些共同的状态
比如,他们都有名字,hp,护甲,移动速度等等
这样我们就可以设计一种东西,叫做类,代表英雄这样一种事物
类: 英雄(Hero)
状态: 名字, 血量,护甲,移动速度
》》代码实现
public class Hero{ String name; float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度}
2、创建具体的英雄
类就像一个模板,根据这样一个模板,可以创建一个个的具体的英雄
一个个具体的英雄,就叫一个个的对象
new Hero() 就是java中创建一个英雄对象的意思
》》代码实现
注意:类的第一个字母大写
public class Hero { String name; float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public static void main(String[] args) {Hero garen = new Hero();garen.name = "盖伦";garen.hp = 616.22f;garen.armor = 27.1f;garen.moveSpeed = 350;Hero timo = new Hero();timo.name = "提莫";timo.hp = 382f;timo.armor = 14f;timo.moveSpeed = 330;}}
3、英雄的状态
一个英雄有姓名,血量,护甲等等状态
这些状态就叫做一个类的属性
属性的类型可以是基本类型,比如int整数,float 浮点数
也可以是类类型,比如String 字符串
》》》代码实现
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度}
4、英雄做什么?
在LOL中,一个英雄可以做很多事情,比如超神,超鬼,坑队友
能做什么在类里面就叫做方法。
方法是一个类的动作行为,所以一般都是以动词开头的,比如 keng ... 如果有多个单词,后面的每个单词的第一个字母使用大写 比如 addSpeed
4.1、方法
比如队友残血正在逃跑,你过去把路给别人挡住了,导致他被杀掉。 这就是坑队友
每个英雄。。。。都可以坑
所以为Hero这个类,设计一个方法: keng
》》代码
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //坑队友 void keng(){ System.out.println("坑队友!"); }}
4.2、方法返回类型
getArmor方法是用来获取一个英雄有多少护甲的,返回类型是float
keng方法不需要返回值,这个时候就把返回类型设置为void,表示该方法不返回任何值
》》代码
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //获取护甲值 float getArmor(){ return armor; } //坑队友 void keng(){ System.out.println("坑队友!"); } }
4.3、方法的参数
英雄在一些特定情况下,可以增加移动速度
这样我们就通过addSpeed这个方法增加移动速度
》》代码
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //坑队友 void keng(){ System.out.println("坑队友!"); } //获取护甲值 float getArmor(){ return armor; } //增加移动速度 void addSpeed(int speed){ //在原来的基础上增加移动速度 moveSpeed = moveSpeed + speed; } public static void main(String[] args) { Hero garen = new Hero(); garen.name = "盖伦"; garen.moveSpeed = 350; garen.addSpeed(100); } }
最后附一个小练习:
为英雄类Hero设计几个新的方法:
1. 超神 legendary(),无参数,无返回类型
2. 获取当前的血量 getHp(), 无参数,有float类型的返回值
3. 回血 recovery(float blood), 有参数 float类型参数 blood表示本次恢复的血量,无返回类型