最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)模擬RPG格斗

 更新時(shí)間:2015年03月30日 15:08:09   投稿:hebedich  
這篇文章主要介紹了java實(shí)現(xiàn)模擬RPG格斗,每個(gè)英雄具有以下幾個(gè)屬性:生命值(為0時(shí)英雄倒下)、攻擊力(每次攻擊時(shí)扣除對(duì)方的生命值點(diǎn)數(shù))、攻擊間隔(每次攻擊過(guò)后都要等待間隔時(shí)間才能進(jìn)行下次攻擊首次攻擊之前也要先等待間隔時(shí)間)簡(jiǎn)單設(shè)置了下吧,小伙伴可以參考下

三個(gè)英雄角色參與PK

每個(gè)英雄具有以下幾個(gè)屬性:生命值(為0時(shí)英雄倒下)、攻擊力(每次攻擊時(shí)扣除對(duì)方的生命值點(diǎn)數(shù))、攻擊間隔(每次攻擊過(guò)后都要等待間隔時(shí)間才能進(jìn)行下次攻擊,首次攻擊之前也要先等待間隔時(shí)間)

另外,每個(gè)英雄都擁有兩個(gè)技能:攻擊技能和防御技能,攻擊技能在攻擊對(duì)方時(shí)有一定概率發(fā)動(dòng),防御技能在被對(duì)方攻擊時(shí)有一定概率發(fā)動(dòng),具體參數(shù)如下

BM:
生命650 攻擊力40 攻擊間隔1.5s
攻擊技能(跳劈):每次攻擊時(shí)有30%幾率造成雙倍傷害
防御技能(反彈):每次被攻擊時(shí)有30%幾率把我方受到的傷害反彈給對(duì)方,例如我方被攻擊,對(duì)方攻擊力30,扣除我方30點(diǎn)生命值,如果技能發(fā)動(dòng),則對(duì)方也要扣除30點(diǎn)生命值,傷害只能反彈一次(兩個(gè)BM相互PK的時(shí)候不出現(xiàn)連續(xù)反彈)

DH:生命600 攻擊力30 攻擊間隔1s
攻擊技能(吸血):每次攻擊時(shí)有30%幾率把造成的傷害轉(zhuǎn)變?yōu)樽约旱纳担▽?duì)被攻擊者造成傷害,并且將攻擊傷害轉(zhuǎn)變成自己的生命值),但不能超過(guò)上限,例如我方攻擊,扣除對(duì)方30的生命值,同時(shí)給自己增加30點(diǎn)生命值
防御技能(閃避):每次被攻擊時(shí)有30%幾率閃避不受傷害

MK:
生命700 攻擊力50 攻擊間隔2.5s
攻擊技能(重?fù)簦好看喂魰r(shí)有30%幾率造成對(duì)方眩暈3s的效果(對(duì)方受到傷害后附加眩暈),對(duì)方英雄眩暈期間不能發(fā)起攻擊,只能挨打,被攻擊時(shí)也不能發(fā)起防御技能,且眩暈結(jié)束后對(duì)方英雄要重新等待攻擊間隔,眩暈時(shí)間不能疊加,如果對(duì)方已經(jīng)處于眩暈,我方又發(fā)動(dòng)攻擊技能,那么對(duì)方眩暈時(shí)間重新開(kāi)始計(jì)算
防御技能(天神):每次被攻擊時(shí)有60%的幾率防御一半傷害,例如我方被攻擊,對(duì)方攻擊力為40,如果技能發(fā)動(dòng),則只扣除我方20點(diǎn)生命值

1.程序啟動(dòng)后,監(jiān)聽(tīng)控制臺(tái)輸入
2.輸入任意兩個(gè)英雄名稱(逗號(hào)分隔)發(fā)起PK,格式:BM,DH
3.系統(tǒng)輸出PK詳細(xì)過(guò)程,直到有一方勝出,格式如下:
BM攻擊DH,BM發(fā)動(dòng)攻擊技能,DH未發(fā)動(dòng)防御技能,BM:350->350,DH:280->200
....
BM勝出

package com.lxi;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
 
//三個(gè)人物的基類(lèi)
abstract class Person {
  int val;       //生命值
  double coldTime;   //冷卻時(shí)間
  int waitTime;    //暈眩時(shí)間
  int fight;     //攻擊力
  int chanceHit;   //發(fā)起主動(dòng)技能的概率
  int chanceDefense; //發(fā)起防御技能的概率
 
  abstract void hit(Person p);  //攻擊技能
 
  abstract int defense(Person p); //防御技能,返回被傷害點(diǎn)數(shù)
}
 
class DH extends Person {
  public DH() {
    val = 600;
    coldTime = 1.0;
    fight = 30;
    chanceHit = 3;   //表示30%的概率
    chanceDefense = 3;
    waitTime = 0;
  }
 
  Random rand = new Random();
  boolean hitFlag = false;   //主動(dòng)技能發(fā)動(dòng)的標(biāo)識(shí)
  boolean defenseFlag = false; //防御技能發(fā)動(dòng)的標(biāo)識(shí)
 
  public void hit(Person p) {
    if (rand.nextInt(10) < chanceHit) { //發(fā)動(dòng)主動(dòng)技能
      int hurt = p.defense(this);
      p.val = p.val - hurt;
      if (p.val <= 0) {
        System.out.println(this.getClass().getSimpleName() + "勝出!");
        System.exit(0);
      }
      val = val + hurt;
      if (val > 600)
        val = 600;
      hitFlag = true;   //標(biāo)記主動(dòng)技能已經(jīng)發(fā)動(dòng)
    } else { //進(jìn)行普通攻擊
      int hurt = p.defense(this);
      p.val = p.val - hurt;
      if (p.val <= 0) {
        System.out.println(this.getClass().getSimpleName() + "勝出!");
        System.exit(0);
      }
    }
    System.out.println(this.getClass().getSimpleName() + "攻擊"
        + p.getClass().getSimpleName() + ","
        + this.getClass().getSimpleName()
        + (this.hitFlag ? "發(fā)動(dòng)攻擊技能  " : "未發(fā)動(dòng)攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發(fā)動(dòng)防御技能  " : "未發(fā)動(dòng)防御技能  ")
        + this.getClass().getSimpleName() + ":" + this.val + ","
        + p.getClass().getSimpleName() + ":" + p.val);
    hitFlag = false;   //
    defenseFlag = false; //重置標(biāo)記,下次重用
  }
 
  public int defense(Person p) {
    if (rand.nextInt(10) < chanceDefense) {
      defenseFlag = true;  //標(biāo)記防御技能已經(jīng)發(fā)動(dòng)
      return 0;
    } else {
      return p.fight;
    }
  }
}
class BM extends Person {
  public BM() {
    val = 650;
    coldTime = 1.5;
    fight = 40;
    chanceHit = 3;
    chanceDefense = 3;
    waitTime = 0;
  }
 
  int count = 0;  //防御技能發(fā)動(dòng)的次數(shù)
  int temp = 40;  //攻擊力,值同fight
  boolean hitFlag = false;
  boolean defenseFlag = false;
  Random rand = new Random();
 
  public void hit(Person p) {
    if (rand.nextInt(10) < chanceHit) {
      fight = fight * 2;  //發(fā)動(dòng)雙倍攻擊
      hitFlag = true;
    }
    int hurt = p.defense(this);
    p.val = p.val - hurt;
    fight = temp;   //還原為單倍攻擊
    if (p.val <= 0) {
      System.out.println(this.getClass().getSimpleName() + "勝出!");
      System.exit(0);
    }
    System.out.println(this.getClass().getSimpleName() + "攻擊"
        + p.getClass().getSimpleName() + ","
        + this.getClass().getSimpleName()
        + (this.hitFlag ? "發(fā)動(dòng)攻擊技能  " : "未發(fā)動(dòng)攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發(fā)動(dòng)防御技能  " : "未發(fā)動(dòng)防御技能  ")
        + this.getClass().getSimpleName() + ":" + this.val + ","
        + p.getClass().getSimpleName() + ":" + p.val);
    hitFlag = false;
    defenseFlag = false;
  }
 
  public int defense(Person p) {
    if (rand.nextInt(10) < chanceDefense) {
      if (count != 0) {
        p.val = p.val - p.fight;
        count++;
        defenseFlag = true;
        if (p.val <= 0) {
          System.out.println(this.getClass().getSimpleName() + "勝出!");
          System.exit(0);
        }
      }
    }
    return p.fight;
  }
}
 
class MK extends Person {
  public MK() {
    val = 700;
    coldTime = 2.5;
    fight = 50;
    chanceDefense = 6;
    chanceHit = 3;
    waitTime = 0;
  }
 
  boolean hitFlag = false;
  boolean defenseFlag = false;
  Random rand = new Random();
 
  public void hit(Person p) {
    if (rand.nextInt(10) < chanceHit) {
      p.waitTime = 3;  //使對(duì)方暈眩3s
      hitFlag = true;
    }
    int hurt = p.defense(this);
    p.val = p.val - hurt;
    if (p.val <= 0) {
      System.out.println(this.getClass().getSimpleName() + "勝出!");
      System.exit(0);
    }
    System.out.println(this.getClass().getSimpleName() + "攻擊"
        + p.getClass().getSimpleName() + ","
        + this.getClass().getSimpleName()
        + (this.hitFlag ? "發(fā)動(dòng)攻擊技能  " : "未發(fā)動(dòng)攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發(fā)動(dòng)防御技能  " : "未發(fā)動(dòng)防御技能  ")
        + this.getClass().getSimpleName() + ":" + this.val + ","
        + p.getClass().getSimpleName() + ":" + p.val);
    hitFlag = false;
    defenseFlag = false;
  }
 
  public int defense(Person p) {
    if (rand.nextInt(10) < chanceDefense) {
      defenseFlag = true;
      return p.fight / 2;  //防御技能發(fā)動(dòng),傷害減半
    }
    return p.fight;
  }
}
public class Rpg {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws Exception {
    System.out.println("在這里輸入兩個(gè)人物進(jìn)行PK,以英文逗號(hào)分隔: [BM,DH,MK]");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Class<Person> c1;
    Class<Person> c2;
    try {
      String temp = br.readLine();
      String[] str = temp.split(",");
      if (str.length != 2) {
        throw new Exception("輸入格式有誤,按默認(rèn)PK");
      }
      c1 = (Class<Person>) Class.forName("com.lxi."
          + str[0].toUpperCase());
      c2 = (Class<Person>) Class.forName("com.lxi."
          + str[1].toUpperCase());
    } catch (Exception e) {
      // TODO Auto-generated catch block
      c1 = (Class<Person>) Class.forName("com.lxi.BM");
      c2 = (Class<Person>) Class.forName("com.lxi.DH");
    }
    try {
      Person p1 = c1.newInstance();
      Person p2 = c2.newInstance();
      long time = System.currentTimeMillis();
      long nextTime1 = (long) (time + p1.coldTime*1000); //
      long nextTime2 = (long) (time + p2.coldTime*1000); //發(fā)動(dòng)攻擊的時(shí)間
      System.out.println("---游戲開(kāi)始---");
      while (true) {
        long currenTime = System.currentTimeMillis();
 
        if (nextTime1 < currenTime) { //時(shí)間到則發(fā)動(dòng)攻擊
          p1.hit(p2);
          nextTime1 += p1.coldTime*1000 + p1.waitTime*1000; //下次攻擊時(shí)間=冷卻時(shí)間+被暈眩時(shí)間
          p1.waitTime = 0; //回合結(jié)束,重置被暈眩時(shí)間為0
        }
        if (nextTime2 < currenTime) {
          p2.hit(p1);
          nextTime2 += p2.coldTime*1000 + p2.waitTime*1000;
          p2.waitTime = 0;
        }
      }
    } catch (ClassCastException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InstantiationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • SpringBoot項(xiàng)目集成FTP的方法步驟

    SpringBoot項(xiàng)目集成FTP的方法步驟

    本文主要介紹了SpringBoot項(xiàng)目集成FTP的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java生成jar包的方法

    java生成jar包的方法

    這篇文章主要介紹了java生成jar包的方法,對(duì)Java生成jar包的具體步驟及方法進(jìn)行了較為詳細(xì)的描述,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi)示例

    Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi)示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類(lèi),結(jié)合實(shí)例形式分析了java對(duì)文件的進(jìn)行zip壓縮及解壓縮的具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • spring-gateway網(wǎng)關(guān)聚合swagger實(shí)現(xiàn)多個(gè)服務(wù)接口切換的示例代碼

    spring-gateway網(wǎng)關(guān)聚合swagger實(shí)現(xiàn)多個(gè)服務(wù)接口切換的示例代碼

    這篇文章主要介紹了spring-gateway網(wǎng)關(guān)聚合swagger實(shí)現(xiàn)多個(gè)服務(wù)接口切換的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 通過(guò)JDK源碼角度分析Long類(lèi)詳解

    通過(guò)JDK源碼角度分析Long類(lèi)詳解

    這篇文章主要給大家介紹了關(guān)于通過(guò)JDK源碼角度分析Long類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用long類(lèi)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解

    MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解

    在開(kāi)發(fā)中經(jīng)常遇到多個(gè)實(shí)體類(lèi)有共同的屬性字段,這些字段屬于公共字段,也就是很多表中都有這些字段,能不能對(duì)于這些公共字段在某個(gè)地方統(tǒng)一處理,來(lái)簡(jiǎn)化開(kāi)發(fā)呢?MyBatis-Plus就提供了這一功能,本文就來(lái)為大家詳細(xì)講講
    2022-08-08
  • Java的堵塞隊(duì)列BlockingQueue詳解

    Java的堵塞隊(duì)列BlockingQueue詳解

    這篇文章主要介紹了Java的堵塞隊(duì)列BlockingQueue詳解,阻塞隊(duì)列常用于生產(chǎn)者和消費(fèi)者的場(chǎng)景,生產(chǎn)者是向隊(duì)列里添加元素的線程,消費(fèi)者是從隊(duì)列里取元素的線程,需要的朋友可以參考下
    2023-12-12
  • Java結(jié)構(gòu)型模式之代理模式詳解

    Java結(jié)構(gòu)型模式之代理模式詳解

    這篇文章主要介紹了Java結(jié)構(gòu)型模式之代理模式,代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類(lèi)與委托類(lèi)有同樣的接口,代理類(lèi)主要負(fù)責(zé)為委托類(lèi)預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類(lèi),以及事后處理消息等
    2023-02-02
  • Java實(shí)現(xiàn)發(fā)送手機(jī)短信語(yǔ)音驗(yàn)證功能代碼實(shí)例

    Java實(shí)現(xiàn)發(fā)送手機(jī)短信語(yǔ)音驗(yàn)證功能代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)發(fā)送手機(jī)短信語(yǔ)音驗(yàn)證功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • JAVA 集成 PF4J 插件框架的應(yīng)用場(chǎng)景分析

    JAVA 集成 PF4J 插件框架的應(yīng)用場(chǎng)景分析

    PF4J是一個(gè)強(qiáng)大的Java插件框架,允許開(kāi)發(fā)者將應(yīng)用程序分解為可擴(kuò)展的模塊,本文介紹了PF4J的基本概念和如何在Java項(xiàng)目中集成,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論

永宁县| 寿光市| 凉城县| 高雄市| 当阳市| 宝兴县| 肥城市| 鞍山市| 西充县| 遂川县| 右玉县| 泸水县| 库伦旗| 旌德县| 呼图壁县| 南澳县| 突泉县| 远安县| 若羌县| 柘荣县| 麻栗坡县| 普洱| 张家港市| 新竹县| 陵水| 农安县| 龙南县| 绥宁县| 大英县| 长葛市| 湘潭县| 东至县| 宁河县| 黔东| 平舆县| 铁岭市| 蛟河市| 兴业县| 临沭县| 安平县| 广安市|