您的位置:首页 > 编程语言 > Java开发

(连载)Java基础学习008

2015-05-06 23:54 260 查看

面对象编程

练习:模拟游戏

英雄类

package com.lovoinfo;

/**
* 英雄
*
* @author zenghao
*
*/
public class Zhaoxin {
private static final int MAX_MAGIC = 100;
private String name; // 姓名
private int hp; // 血条
private int mp; // 蓝条

/**
* 构造器
*
* @param name
*/
public Zhaoxin(String name) {

this.name = name;
this.hp = 300;
this.mp = MAX_MAGIC;
}

/**
* 普通攻击
*
* @param m
*            怪兽
*/
public void attack(Monster m) {
int injury = (int) (Math.random() * 18 + 10);
m.setHp(m.getHp() - injury);

}

public int getMp() {// 访问蓝条
return mp;
}

public void setMp(int mp) {// 修改蓝条
this.mp = mp < MAX_MAGIC ? mp : MAX_MAGIC;
}

/**
* 技能攻击
*
* @param m
*            怪兽
*/
public void skill(Monster m) {
m.setHp(m.getHp() - 50);
}

/**
* 魔法攻击
*
* @param ms
*            怪兽的数组
*/
public void magiskll(Monster[] ms) {
mp -= 30;// 魔法每用一次减30
for (int i = 0; i < ms.length; i++) {
Monster m = ms[i];
if (m.isAlive()) {
m.setHp(getHp() - 30);
}// 魔法伤害对活着的怪兽都造成一次伤害。
}
}

public int getHp() {// 访问血条
return hp;
}

public void setHp(int hp) {// 修改血条
this.hp = hp > 0 ? hp : 0;
}

public String toString() {// 打印英雄的姓名和生命和魔法值。
return name + "生命值:" + hp + "魔法值:" + mp;
}
}package com.lovoinfo;

/**
* 英雄
*
* @author zenghao
*
*/
public class Zhaoxin {
private static final int MAX_MAGIC = 100;
private String name; // 姓名
private int hp; // 血条
private int mp; // 蓝条

/**
* 构造器
*
* @param name
*/
public Zhaoxin(String name) {

this.name = name;
this.hp = 300;
this.mp = MAX_MAGIC;
}

/**
* 普通攻击
*
* @param m
*            怪兽
*/
public void attack(Monster m) {
int injury = (int) (Math.random() * 18 + 10);
m.setHp(m.getHp() - injury);

}

public int getMp() {// 访问蓝条
return mp;
}

public void setMp(int mp) {// 修改蓝条
this.mp = mp < MAX_MAGIC ? mp : MAX_MAGIC;
}

/**
* 技能攻击
*
* @param m
*            怪兽
*/
public void skill(Monster m) {
m.setHp(m.getHp() - 50);
}

/**
* 魔法攻击
*
* @param ms
*            怪兽的数组
*/
public void magiskll(Monster[] ms) {
mp -= 30;// 魔法每用一次减30
for (int i = 0; i < ms.length; i++) {
Monster m = ms[i];
if (m.isAlive()) {
m.setHp(getHp() - 30);
}// 魔法伤害对活着的怪兽都造成一次伤害。
}
}

public int getHp() {// 访问血条
return hp;
}

public void setHp(int hp) {// 修改血条
this.hp = hp > 0 ? hp : 0;
}

public String toString() {// 打印英雄的姓名和生命和魔法值。
return name + "生命值:" + hp + "魔法值:" + mp;
}
}


怪兽类

package com.lovoinfo;

/**
* 小怪
*
* @author zenghao
*
*/
public class Monster {
private String name;// 姓名
private int hp; // 血条

/**
* 构造器
*
* @param name
*/
public Monster(String name) {
super();
this.name = name;
this.hp = 300;
}

/**
* 普通攻击
*
* @param u
*            英雄
*/
public void attack(Zhaoxin u) {
int injury = (int) (Math.random() * 15 + 5);
u.setHp(u.getHp() - injury);

}

public int getHp() {// 访问血条
return hp;
}

public void setHp(int hp) {// 修改血条
this.hp = hp > 0 ? hp : 0;
}

public String toString() {// 打印小怪兽的名字和血条。~!
return "小怪兽" + name + "生命值:" + hp;
}

/**
* 用布尔来判断死活
*
* @return 活着返回true死了返回false
*/
public boolean isAlive() {

return hp > 0;
}

public String getName() {// 访问名字
return name;
}

}


PK代码main方法

package com.lovoinfo;

/**
* 赵信VS怪
*
* @author zenghao
*
*/
public class PK {
/**
* 判断十分至少有一只小怪是活着的
*
* @param ms
*            小怪兽的数组
* @return 有活着的小怪兽返回true否则返回false
*/
public static boolean hasAliveMonster(Monster[] ms) {
for (int i = 0; i < ms.length; i++) {
if (ms[i].isAlive()) {
return true;
}
}
return false;
}

public static void main(String[] args) {
Zhaoxin u = new Zhaoxin("赵信");
Monster[] ms = { new Monster("双头巨人"),
new Monster("龙"),
new Monster("三头狼"),
new Monster("炮兵"),
new Monster("内向哥")
};

int round = 1;
do {
System.out.println("====第" + round++ + "回合====");
Monster m = null;
do {
int mIndex = (int) (Math.random() * ms.length);
m = ms[mIndex];// 随机一个怪兽对英雄攻击。
} while (!m.isAlive());
System.out.println(m.getName() + "小怪兽攻击赵信!");
m.attack(u);
System.out.println(u);
if (u.getHp() > 0) {
double rate = Math.random();
if (rate <= 0.8) {
System.out.println("赵信使用普通攻击小怪兽!");
u.attack(m);
} else if (rate <= 0.9) {
}
System.out.println("赵信使用\n枪出如龙\n攻击小怪兽!");
u.skill(m);
} else {
if (u.getMp() >= 30) {
System.out.println("赵信使用\n新月横扫\n攻击小怪兽!");
u.magiskll(ms);
} else {
System.out.println("MP不足!");
}

}
for (Monster termpMonster : ms)
System.out.println(termpMonster);
} while (u.getHp() > 0 && hasAliveMonster(ms));
if (u.getHp() > 0) {
System.out.println("赵信胜利!");
} else {
System.out.println("赵信OVER了。");
}
}
}


自我总结

1.加深了对面对象编程的了解。

每一个对象都是由属性(数据抽象),构造器,方法(行为抽象)组成。

对象有属于自己的类。

对象都有自己的属性和行为。

2.Arrags自动排序功能。(Java还是很强大HOHO~~~)yy下。。

Arrags.sort(数组),规则

3.在Source菜单选项里选中Generate Getters and Setters。。。。调用get..访问器,set..修改器。

4.在Source菜单选项里选中Generate Constructor using Fields…调出构造器。

还待加强

1.对循环调用不是那么的随心所欲,感觉就是很蹩脚。(感觉就像是废了的样子。呵呵)

2.boolean该放在那里很模糊。

3.对数据抽象和行为抽象还不够那么清晰的表达。和一个好的思路。

4.单词量。

晚安吧。!Java!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: