一. 小编有话说
前面一篇文章写了JAVA面向对象编程的思想,本文主要展示关于面向对象编程的实例(一个回合制的战斗游戏:战士,骑兵,法师,电脑互相攻击),小编的基础暂时薄弱,如此一来有助于更深入的理解和灵活的运用,以及打下坚实的基础。
二. 游戏的要求
-
定义一个描述战斗单位的类,此类必须包含以下成员变量:名称,生命值,攻击力,防御力,命中率。此类还必须包含以下成员方法:遭到攻击时的处理函数,阵亡时的处理函数。自行设计生命值,攻击力,防御力,命中率之间的关系。请自行设计各处理函数被执行时的提示信息。
-
此游戏中存在多种战斗角色,每种角色都是由要求1所定义的类派生出来的子类。每种角色类除了继承自父类的成员变量和函数之外,可以增加一些成员变量和成员函数,例如增加防御这一动作的处理函数。
战斗角色例:
战士,生命高,普通攻击敌人,攻击力中,防御力高
骑兵,生命中,普通攻击敌人,攻击力高,防御力高
法师,生命极低,法术攻击敌人,攻击力极高,防御力低 -
此游戏采用回合制,人对人或人对电脑。每个角色对象依次顺序被使用,游戏操作者通过选菜单的方式操作角色对象的攻击、攻击谁、防御等等动作。游戏以某方全体阵亡而结束。
-
游戏必须具有完备的提示信息,例如每个回合都要提示轮到那方的那名角色对象行动,每个回合菜单之前都必须显示敌我双方每一个角色对象的各种参数值,并且每个回合必须重新刷新显示屏幕上的提示内容等。
三. 编程前的准备
- 按上面的描述,该有5个
.java
文件:
- 1个父类文件:
GameUtil.java
- 3个子类文件:
Soilder.java
,Cavalry.java
,Magian.java
- 1个含执行入口的文件:
GameStart.java
- 角色及其成员变量的设置
角色 | 生命值 | 攻击力 | 防御力 | 命中率 |
---|---|---|---|---|
战士 | 100 | 10 | 12 | 80% |
骑兵 | 80 | 10 | 12 | 70% |
法师 | 50 | 20 | 5 | 75% |
电脑 | 80 | 15 | 5 | 75% |
四. 代码及详细注释
GameUtil.java
/*描述战斗单位的类(父类)
* 父类初始化值为电脑
* 成员变量(5个):名称,生命值,攻击力,防御力,命中率
* 方法函数3个:
* 遭到攻击的处理函数
* 阵亡时的处理函数
* 对方没有打中的处理函数
*
* author:@杨陈菊
*/
public class GameUtil {
String name = "电脑"; //名称
int life = 80; //生命值
int attack = 15; //攻击力
int defend = 5; //防御力
double hr = 0.75 ; //命中率
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public int getDefend() {
return defend;
}
public void setDefend(int defend) {
this.defend = defend;
}
public double getHr() {
return hr;
}
public void setHr(double hr) {
this.hr = hr;
}
//遭到攻击时的处理函数
public void fangyu(int attack) {
int hurt = 0; //受到的伤害
int residue_life; //剩余生命值
if (die()) {
//调用下面的阵亡处理函数
if(attack>defend) {
//对手攻击力大于自身防御力则受到伤害,否则受伤值为0
hurt = attack-defend;
}else {
hurt = 0;
}
residue_life = life - hurt; //每回合计算剩余生命值
System.out.println(this.name+"做出了防御,受到"+hurt+"点伤害!");//打印受到多少伤害
if(residue_life<0)
residue_life = 0;
System.out.println("还剩"+residue_life+"点生命值"); //打印剩余生命值
life = residue_life; //当前生命值
}else {
}
}
//阵亡时的处理函数,返回一个布尔值,代表是否死亡
public boolean die() {
boolean flag=true; //初始化,代表活着
if (life <= 0) {
//生命值小于等于0则阵亡
System.out.println(this.name+"阵亡,游戏结束!");
flag = false;
}
return flag; //返回生存状态
}
//没有打中,躲开的处理函数
public void dodge() {
System.out.println("没有击中,"+this.name+"躲过一劫!");
}
}
Soilder.java
/*描述战士的类(子类)
* 成员变量(5个):名称,生命值,攻击力,防御力,命中率
* 1个函数:对方没有打中的处理函数(重写)
* author:@杨陈菊
*/
//定义战士子类,继承父类GameUtil
public class Soilder extends GameUtil {
public Soilder() {
//初始化5个变量
name = "战士"