注:此項(xiàng)目主要用來(lái)鞏固面向?qū)ο?/code>以及父類子類繼承這一塊的知識(shí),其中涉及循環(huán)以及隨機(jī)函數(shù)的靈活運(yùn)用
一、定義父類(怪獸類)和父類(玩家類)
1.怪獸類的屬性和方法
屬性:攻擊力,生命值;
方法:怪獸普通攻擊玩家后,玩家的剩余生命值等于玩家原有生命值減去怪獸的攻擊力。
package daguaishou;
public class GS {
private int gj;//定義私有屬性攻擊
private int sm;//定義私有屬性生命值
public void setGj(int gj) {
this.gj = gj;
}//設(shè)置攻擊屬性值
public int getGj() {
return gj;
}//獲取攻擊屬性值
public int getSm() {
return sm;
}//獲取生命屬性值
public void setSm(int sm) {
this.sm = sm;
}//設(shè)置生命屬性值
public void ptgj_w(WJ wj1){
wj1.setSm(wj1.getSm()-gj);//玩家的生命值等于原有生命值減去怪獸攻擊力
System.out.println("怪獸1攻擊了玩家1,造成了"+gj+"點(diǎn)傷害,玩家1的剩余生命值為:"+wj1.getSm());
}//構(gòu)造怪獸打玩家的方法
}
2.玩家類的屬性和方法
屬性:攻擊力,生命值;
方法:玩家普通攻擊怪獸后,怪獸的剩余生命值等于怪獸原有生命值減去玩家的攻擊力。
package daguaishou;
public class WJ {
private int gj;//定義私有屬性攻擊
private int sm;//定義私有屬性生命值
public void setGj(int gj) {
this.gj = gj;
}//設(shè)置攻擊屬性值
public int getGj() {
return gj;
}//獲取攻擊屬性值
public int getSm() {
return sm;
}//獲取生命屬性值
public void setSm(int sm) {
this.sm = sm;
}//設(shè)置生命屬性值
public void ptgj_g(GS gs1){
gs1.setSm(gs1.getSm()-gj);//怪獸的生命值等于原有生命值減去玩家攻擊力
System.out.println("玩家1攻擊了怪獸1,造成了"+gj+"點(diǎn)傷害,怪獸1的剩余生命值為:"+gs1.getSm());
}//構(gòu)造玩家打怪獸的方法
}
二、定義兩個(gè)子類(法師類)(刺客類)
1.創(chuàng)建子類法師類
(1)法師的屬性:藍(lán)條,法術(shù)傷害,攻擊力
package daguaishou;
public class Fashi extends GS {//構(gòu)造法師子類,繼承怪獸類
private int lt;//定義子類屬性藍(lán)量
private int fssh=20;//定義屬性法術(shù)傷害
private int gj=10;//定義攻擊力
public int getLt() {
return lt;
}
public void setLt(int lt) {
this.lt = lt;
}
public int getFssh() {
return fssh;
}
public void setFssh(int fssh) {
this.fssh = fssh;
}
}
(2)法師的方法:
法術(shù)攻擊,每次攻擊積攢一層藍(lán)量,滿三層藍(lán)量,則釋放一次技能,造成魔法傷害。
public void fsgj_w(Cike tanglang){
tanglang.setSm(tanglang.getSm()-gj);
System.out.println("九尾妖狐(法師)發(fā)動(dòng)了攻擊,造成了"+gj+"點(diǎn)物理傷害,攻擊對(duì)象剩余生命值為:"+tanglang.getSm());
lt++;//每普通攻擊一次,藍(lán)量條加一
if(lt%3==0) {//每積滿三層能量條,釋放一次技能,造成魔法傷害
tanglang.setSm(tanglang.getSm()-fssh);
System.out.println("九尾妖狐(法師)蓄力三次,發(fā)動(dòng)了技能“欺詐寶珠”,造成了"+fssh+"點(diǎn)魔法傷害,攻擊對(duì)象的剩余生命值為:"+tanglang.getSm());
}
}
注:這里需要注意的是每滿三層則釋放一次技能,所以要套在循環(huán)里
2.創(chuàng)建子類刺客類
(1)刺客的屬性:暴擊傷害,攻擊力
package daguaishou;
import java.util.Random;
public class Cike extends WJ {//構(gòu)造子類刺客,繼承玩家
public int getBjsh() {
return bjsh;
}
public void setBjsh(int bjsh) {
this.bjsh = bjsh;
}
private int bjsh=30;//定義私有屬性暴擊傷害
private int gj=5;
}
(2)刺客的方法:暴擊傷害,每次攻擊時(shí),有%66的幾率造成暴擊傷害
public void bj_g(Fashi huli){
int randombj=new Random().nextInt(3); //引入隨機(jī)函數(shù),設(shè)置暴擊幾率
if(randombj!=1) {//百分之33概率普通攻擊
huli.setSm(huli.getSm()-gj);
System.out.println("螳螂(刺客)攻擊了您,造成了"+gj+"點(diǎn)物理傷害,您的剩余生命值為:"+huli.getSm());
}
if(randombj==1) {//百分之66概率暴擊
huli.setSm(huli.getSm()-bjsh);
System.out.println("螳螂(刺客)發(fā)動(dòng)了技能“大殺四方”,造成了"+bjsh+"點(diǎn)暴擊傷害,您的剩余生命值為:"+huli.getSm());
}
}
注:此處注意需要調(diào)用隨機(jī)函數(shù),定義隨機(jī)數(shù)為randombj,在0,1,2三個(gè)數(shù)字中隨機(jī),若randombj=1則相當(dāng)于在三個(gè)數(shù)字中,取一個(gè)數(shù)字的概率為三分之一。若nextInt(3)中,若將3換成4,則當(dāng)randombj=1時(shí),在四個(gè)數(shù)字中取1的幾率為四分之一(0,1,2,3取頭不取尾)。
三、主函數(shù):
1.游戲入口
package daguaishou;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
System.out.println("歡迎來(lái)到召喚師峽谷!");
System.out.print("請(qǐng)給自己設(shè)置一個(gè)想要的昵稱:");
Scanner nc = new Scanner(System.in);
String x = nc.nextLine();//輸入召喚師昵稱
System.out.print("你好,"+x+"!"+"請(qǐng)選擇你想打的怪獸編號(hào)(1或2):");
Scanner s = new Scanner(System.in);
int y = s.nextInt();//輸入編號(hào)
switch(y) {//根據(jù)所選編號(hào)判斷
case 1:System.out.println("你選擇的怪獸是:九尾妖狐(法師)");break;
case 2:System.out.println("你選擇的怪獸是:虛空螳螂(刺客)");break;
}
注:此處調(diào)用了scanner類讓玩家進(jìn)行輸入想要的昵稱和編號(hào),在玩家選擇怪獸時(shí),運(yùn)用switch/case結(jié)構(gòu)。
2.創(chuàng)建實(shí)例對(duì)象,并賦初值
WJ wj1=new WJ();//創(chuàng)建對(duì)象wj1
GS gs1=new GS();//創(chuàng)建對(duì)象gs1
Fashi huli =new Fashi();//創(chuàng)建對(duì)象huli
Cike tanglang = new Cike();//創(chuàng)建對(duì)象tanglang
wj1.setSm(100);//設(shè)置wj1生命值為100
wj1.setGj(10);//設(shè)置wj1攻擊力為10
gs1.setSm(60);//設(shè)置gs1生命值為100
gs1.setGj(20);//設(shè)置gs1攻擊力為100
huli.setFssh(20);//設(shè)置huli法術(shù)傷害為20
huli.setGj(10);//設(shè)置huli攻擊力為10
huli.setSm(100);//設(shè)置huli生命值為100
huli.setLt(1);//設(shè)置huli藍(lán)量為1
tanglang.setSm(100);//設(shè)置tanglang生命值為100
tanglang.setGj(10);//設(shè)置tanglang攻擊力為10
tanglang.setBjsh(30);//設(shè)置tanglang暴擊傷害為30
Fenghuang ss= new Fenghuang();
ss.setGj(20);
ss.setSm(100);
3.設(shè)置打怪獸規(guī)則:雙方有一人血量低于或等于0,則游戲結(jié)束。
while(huli.getSm()>0&&tanglang.getSm()>0) {//設(shè)置循環(huán)條件為雙方都存活時(shí)進(jìn)行戰(zhàn)斗
huli.fsgj_w(tanglang);//狐貍打螳螂
tanglang.bj_g(huli);//螳螂打狐貍
}
if(huli.getSm()<=0) { //設(shè)置取勝條件為誰(shuí)生命值小于等于0,誰(shuí)失敗
System.out.println("刺客螳螂取勝!");
}
else if(tanglang.getSm()<=0) {
System.out.println("法師狐貍?cè)伲?);
}
}
四、代碼效果圖:

注:
綠色部分為玩家手動(dòng)輸入部分,可任意輸入昵稱和編號(hào)