面对象编程
练习:模拟游戏
英雄类
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!