编写一个格斗游戏,每个角色的姓名、血量、性别、面貌,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来
package TestHeiMa.面向对象;
import java.util.Random;
//编写一个格斗游戏,每个角色的姓名、血量、性别、面貌,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来
public class TestObjectOrientedPractice3 {
private String name;
private int blood;
private char gender;
private String face;
//定义数组用于存储角色的长相
String[] boyFaces={"气宇轩昂","风流俊雅","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};
String[] girlFaces={"美奂绝伦","沉鱼落雁","亭亭玉立","身材姣好","相貌平平","惨不忍睹","相貌简陋"};
//攻击的招式
String[] fight_desc={
"%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
"%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
"%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
"%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】推向%s",
"%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向了%s",
"%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s"
};
//攻击后所造成的伤害
String[] injured_desc={
"结果%s退了半步,毫发无伤",
"结果给%s造成了一处瘀伤",
"结果一击命中,%s痛的弯下了腰",
"结果%s痛苦的闷哼一声,显然受了一点内伤",
"结果%s摇摇晃晃,一跤摔倒在地",
"结果%s脸色一下变得惨白,连退了好几步",
"结果“轰”的一声,%s口中鲜血狂喷而出",
"结果%s一声惨叫,像瘫软泥般塌了下去"
};
//空参构造方法
public TestObjectOrientedPractice3() {
}
//有参构造方法
public TestObjectOrientedPractice3(String name, int blood, char gender) {
//将测试类中得到的值赋值给javaBean中的成员变量
this.name = name;
this.blood = blood;
this.gender = gender;
//角色的长相取决于性别
//将上面得到的性别充当参数放进setFace()中,从而获取面貌值
setFace(gender);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getFace() {
return face;
}
//将性别作为参数放进setFace()中,
public void setFace(char gender) {
Random r=new Random();
//如果性别为男
if (gender=='男'){
//随机出一个数(范围是0~boyFaces的长度)充当数组boyFaces()的索引,从而获取boyFaces()中的值
int index=r.nextInt(boyFaces.length);
//将获取到boyFaces()中的值赋值给成员变量的face
this.face = boyFaces[index];
//如果性别为女
}else if (gender=='女'){
//随机出一个数充当数组girlFaces()的索引,从而获取boyFaces()中的值
int index=r.nextInt(girlFaces.length);
//将获取到girlFaces()中的值赋值给成员变量的face
this.face = girlFaces[index];
//设置一个默认的面貌值
}else {
System.out.println("面目狰狞");
}
}
//定义一个fight的方法,用于调用打架的招式并组合在一起
//使用类名作为参数role的类型,可以调用TestObjectOrientedPractice3中的对象
//类也是引用数据类型(当类作为参数的类型的时候,实际上需要的是该类的对象的地址值)
public void fight(TestObjectOrientedPractice3 role){
//随机函数
Random r=new Random();
//随机一个范围是fight_desc.length的数,定义为索引
int index=r.nextInt(fight_desc.length);
//通过随机出来的索引值将数组fight_desc[]中的值赋值给变量KungFu
String KungFu=fight_desc[index];
//打印输出数组fight_desc[]中的语句并将this.getName(),role.getName()中的值赋值给里面相对应的占位符
//this.getName() 是第一个人物名字(攻击者), role.getName() 是第二个人物名字(被攻击者)
System.out.printf(KungFu,this.getName(),role.getName());
//换行(printf没有换行效果)
System.out.println();
//定义一个变量hurt(伤害),存储1~20范围中随机出来的数
int hurt=r.nextInt(20)+1;
//定义一个变量sumBlood(剩下的所有血量),将获取到的总血量减随机伤害掉的血量
int sumBlood=role.getBlood()-hurt;
//三元函数 判断sumBlood是否小于0,为是则返回0,为否则返回sumBlood(血量不做改变),再将结果赋值给sumBlood变量
sumBlood=sumBlood<0?0:sumBlood;
//将参数sumBlood放进setBlood()方法中(此为被打者的血量)
role.setBlood(sumBlood);
//判断被攻击后剩余血量,并输出数组injured_desc()中对应的元素再将被打者的名字role.getName()放进元素中的占位符
if (sumBlood>90){
System.out.printf(injured_desc[0],role.getName());
}else if (sumBlood>80){
System.out.printf(injured_desc[1],role.getName());
}else if (sumBlood>70){
System.out.printf(injured_desc[2],role.getName());
}else if (sumBlood>60){
System.out.printf(injured_desc[3],role.getName());
}else if (sumBlood>40){
System.out.printf(injured_desc[4],role.getName());
}else if (sumBlood>20){
System.out.printf(injured_desc[5],role.getName());
}else if (sumBlood>10){
System.out.printf(injured_desc[6],role.getName());
}else {
System.out.printf(injured_desc[7],role.getName());
}
//执行完判断语句后进行换行
System.out.println();
}
//构造成员变量用于输出打印角色的基本信息
public void showRoleInfo(){
System.out.println("姓名:"+getName());
System.out.println("血量:"+getBlood());
System.out.println("性别:"+getGender());
System.out.println("长相:"+getFace());
}
}
package TestHeiMa.面向对象;
public class TestObjectOrientedPractice4 {
public static void main(String[] args) {
//定义一个变量进行第一个角色的信息赋值
TestObjectOrientedPractice3 p=new TestObjectOrientedPractice3("鲁智深",100,'女');
//定义一个变量进行第二个角色的信息赋值
TestObjectOrientedPractice3 p2=new TestObjectOrientedPractice3("武松",100,'女');
//角色一调用showRoleInfo()成员方法打印角色信息
p.showRoleInfo();
//角色二调用showRoleInfo()成员方法打印角色信息
p2.showRoleInfo();
//创建while循环,循环条件为true直到达到某个特定条件结束循环
while(true){
//角色一(攻击者)调用fight()方法参数为角色二(被攻击者)
p.fight(p2);
//如果角色二血量为0时输出语句并跳出循环
if (p2.getBlood()==0){
System.out.println(p.getName()+"K.O了"+p2.getName());
break;
}
//角色二(攻击者)调用fight()方法参数为角色一(被攻击者)
p2.fight(p);
//如果角色一血量为0时输出语句并跳出循环
if (p.getBlood()==0){
System.out.println(p2.getName()+"K.O了"+p.getName());
break;
}
}
}
}