面向对象综合训练1
原视频参见:
https://www.bilibili.com/video/BV17F411T7Ao?p=91&vd_source=f1cd818514f39c67988fb38552278ca2
package OOP;
public class Game {
public static void main(String[] args) {
//创建人物
//这里人物的外貌与性别有关,因此直接传入3个参数即可,并且性别随机确定的,具体参见构造函数的部分
Roal r1=new Roal("乔峰",100,'男');
Roal r2=new Roal("鸠摩智",100,'男');
//调用方法,展示人物信息
r1.showRoalInfo();
r2.showRoalInfo();
//采用回合制,直到有一方血量为0才推退出
while(true){
r1.attack(r2);
//当一方血量为0时结束
if(r2.getBlood()==0){
System.out.println(r1.getName()+"KO了"+r2.getName());break;}
r2.attack(r1);
if(r1.getBlood()==0){
System.out.println(r2.getName()+"KO了"+r1.getName());break;}
}
}
}
package OOP;
import java.util.Random;
public class Roal {
//人物有4个属性,都是私有的,需要通过调用方法才能访问
private String name;
private int blood;
private char gender;
private String face;
//空参构造
public Roal() {
}
//实参构造,只用输入3个参数
public Roal(String name, int blood,char gender) {
this.name = name;
this.blood = blood;
this.gender=gender;
//外貌通过调用方法来确定,需要传入性别参数
setFace(gender);
}
//get and set相关方法
public String getName() {
return name;
}
public int getBlood() {
return blood;
}
public void setName(String name) {
this.name = name;
}
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;
}
//外貌的set方法有点不太一样,通过传入gender参数以及随机数来确定的
public void setFace(char gender) {
//此处为外貌相关描述字符串组
String[] boyfaces = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正", "相貌平平", "一塌糊涂", "面目狰狞"};
String[] girlfaces = {"美奂绝伦", "沉鱼落雁", "婷婷玉立", "身材娇好", "相貌平平", "相貌简陋", "惨不忍睹"};
Random r = new Random();
//长相是随机的,调用了随机数方法
if (gender == '男') {
//产生的index与数组的长度一致,且都从0开始,直接赋值即可,下同
int index = r.nextInt(boyfaces.length);
this.face = boyfaces[index];
} else if (gender == '女') {
int index = r.nextInt(girlfaces.length);
this.face = girlfaces[index];
}else{
//设置默认外貌为不男不女
this.face="不男不女";
}
}
//定义一个用于攻击别人的方法,传进去的参数为被攻击者,因为要修改被攻击者血量
public void attack(Roal roal) {
//attack 攻击描述:
String[] attacks_desc = {
"%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
"%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
"%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
"%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
"%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
"%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"
};
//通过随机数来产生随机的攻击方式
Random r=new Random();
int index=r.nextInt(attacks_desc.length);
//前者为this.getName(),表示为方法的调用者,后者为roal.getName,是传入的参数
System.out.printf(attacks_desc[index],this.getName(),roal.getName());
//injured 受伤描述:
String[] injureds_desc = {
"结果%s退了半步,毫发无损",
"结果给%s造成一处瘀伤",
"结果一击命中,%s痛得弯下腰",
"结果%s痛苦地闷哼了一声,显然受了点内伤",
"结果%s摇摇晃晃,一跤摔倒在地",
"结果%s脸色一下变得惨白,连退了好几步",
"结果『轰』的一声,%s口中鲜血狂喷而出",
"结果%s一声惨叫,像滩软泥般塌了下去"
};
//定义随机造成的伤害,为1-20点
int hurt = r.nextInt(20) + 1;
//修改被攻击者的血量
int remainBlood = roal.getBlood() - hurt;
//通过三元运算符,对血量为负的情况进行处理
remainBlood = remainBlood < 0 ? 0 : remainBlood;
roal.setBlood(remainBlood);
//根据血量输出相应的受伤描述
if(roal.getBlood()>90){
System.out.printf(injureds_desc[0],roal.getName());
}else if(roal.getBlood()>70){
System.out.printf(injureds_desc[1],roal.getName());
}else if(roal.getBlood()>50){
System.out.printf(injureds_desc[2],roal.getName());
}else if(roal.getBlood()>40){
System.out.printf(injureds_desc[3],roal.getName());
}else if(roal.getBlood()>30){
System.out.printf(injureds_desc[4],roal.getName());
}else if(roal.getBlood()>20){
System.out.printf(injureds_desc[5],roal.getName());
} else if(roal.getBlood()>10){
System.out.printf(injureds_desc[6],roal.getName());
}else{
System.out.printf(injureds_desc[7],roal.getName());
}
//print在java中并不包含换行符,需要额外进行换行
System.out.println("");
}
//对人物四个属性进行输出
public void showRoalInfo(){
System.out.println("人物信息:");
System.out.println("姓名:"+getName());
System.out.println("血量:"+getBlood());
System.out.println("性别:"+getGender());
System.out.println("外貌:"+getFace());
}
}
输出结果:
人物信息:
姓名:乔峰
血量:100
性别:男
外貌:五官端正
人物信息:
姓名:鸠摩智
血量:100
性别:男
外貌:风流俊雅
乔峰阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向鸠摩智。结果给鸠摩智造成一处瘀伤
鸠摩智阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向乔峰。结果给乔峰造成一处瘀伤
乔峰运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向鸠摩智。结果给鸠摩智造成一处瘀伤
鸠摩智大喝一声,身形下伏,一招【劈雷坠地】,捶向乔峰双腿。结果一击命中,乔峰痛得弯下腰
乔峰大喝一声,身形下伏,一招【劈雷坠地】,捶向鸠摩智双腿。结果一击命中,鸠摩智痛得弯下腰
鸠摩智使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向乔峰。结果一击命中,乔峰痛得弯下腰
乔峰阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向鸠摩智。结果一击命中,鸠摩智痛得弯下腰
鸠摩智运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向乔峰。结果乔峰痛苦地闷哼了一声,显然受了点内伤
乔峰运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向鸠摩智。结果一击命中,鸠摩智痛得弯下腰
鸠摩智大喝一声,身形下伏,一招【劈雷坠地】,捶向乔峰双腿。结果乔峰脸色一下变得惨白,连退了好几步
乔峰使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向鸠摩智。结果鸠摩智痛苦地闷哼了一声,显然受了点内伤
鸠摩智使出了一招【背心钉】,转到对方的身后,一掌向乔峰背心的灵台穴拍去。结果『轰』的一声,乔峰口中鲜血狂喷而出
乔峰大喝一声,身形下伏,一招【劈雷坠地】,捶向鸠摩智双腿。结果鸠摩智痛苦地闷哼了一声,显然受了点内伤
鸠摩智使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向乔峰。结果乔峰一声惨叫,像滩软泥般塌了下去
乔峰上步抢身,招中套招,一招【劈挂连环】,连环攻向鸠摩智。结果鸠摩智摇摇晃晃,一跤摔倒在地
鸠摩智阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向乔峰。结果乔峰一声惨叫,像滩软泥般塌了下去
鸠摩智KO了乔峰