国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java實現模擬RPG格斗

java實現模擬RPG格斗

2019-12-14 15:03hebedich JAVA教程

這篇文章主要介紹了java實現模擬RPG格斗,每個英雄具有以下幾個屬性:生命值(為0時英雄倒下)、攻擊力(每次攻擊時扣除對方的生命值點數)、攻擊間隔(每次攻擊過后都要等待間隔時間才能進行下次攻擊首次攻擊之前也要先等

三個英雄角色參與PK

每個英雄具有以下幾個屬性:生命值(為0時英雄倒下)、攻擊力(每次攻擊時扣除對方的生命值點數)、攻擊間隔(每次攻擊過后都要等待間隔時間才能進行下次攻擊,首次攻擊之前也要先等待間隔時間)

另外,每個英雄都擁有兩個技能:攻擊技能和防御技能,攻擊技能在攻擊對方時有一定概率發動,防御技能在被對方攻擊時有一定概率發動,具體參數如下

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

DH:生命600 攻擊力30 攻擊間隔1s
攻擊技能(吸血):每次攻擊時有30%幾率把造成的傷害轉變為自己的生命值(對被攻擊者造成傷害,并且將攻擊傷害轉變成自己的生命值),但不能超過上限,例如我方攻擊,扣除對方30的生命值,同時給自己增加30點生命值
防御技能(閃避):每次被攻擊時有30%幾率閃避不受傷害

MK:
生命700 攻擊力50 攻擊間隔2.5s
攻擊技能(重擊):每次攻擊時有30%幾率造成對方眩暈3s的效果(對方受到傷害后附加眩暈),對方英雄眩暈期間不能發起攻擊,只能挨打,被攻擊時也不能發起防御技能,且眩暈結束后對方英雄要重新等待攻擊間隔,眩暈時間不能疊加,如果對方已經處于眩暈,我方又發動攻擊技能,那么對方眩暈時間重新開始計算
防御技能(天神):每次被攻擊時有60%的幾率防御一半傷害,例如我方被攻擊,對方攻擊力為40,如果技能發動,則只扣除我方20點生命值

1.程序啟動后,監聽控制臺輸入
2.輸入任意兩個英雄名稱(逗號分隔)發起PK,格式:BM,DH
3.系統輸出PK詳細過程,直到有一方勝出,格式如下:
BM攻擊DH,BM發動攻擊技能,DH未發動防御技能,BM:350->350,DH:280->200
....
BM勝出

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.lxi;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
 
//三個人物的基類
abstract class Person {
  int val;       //生命值
  double coldTime;   //冷卻時間
  int waitTime;    //暈眩時間
  int fight;     //攻擊力
  int chanceHit;   //發起主動技能的概率
  int chanceDefense; //發起防御技能的概率
 
  abstract void hit(Person p);  //攻擊技能
 
  abstract int defense(Person p); //防御技能,返回被傷害點數
}
 
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;   //主動技能發動的標識
  boolean defenseFlag = false; //防御技能發動的標識
 
  public void hit(Person p) {
    if (rand.nextInt(10) < chanceHit) { //發動主動技能
      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;   //標記主動技能已經發動
    } else { //進行普通攻擊
      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 ? "發動攻擊技能  " : "未發動攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發動防御技能  " : "未發動防御技能  ")
        + 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 0;
    } else {
      return p.fight;
    }
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class BM extends Person {
  public BM() {
    val = 650;
    coldTime = 1.5;
    fight = 40;
    chanceHit = 3;
    chanceDefense = 3;
    waitTime = 0;
  }
 
  int count = 0//防御技能發動的次數
  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//發動雙倍攻擊
      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 ? "發動攻擊技能  " : "未發動攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發動防御技能  " : "未發動防御技能  ")
        + 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//使對方暈眩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 ? "發動攻擊技能  " : "未發動攻擊技能  ")
        + p.getClass().getSimpleName()
        + (this.defenseFlag ? "發動防御技能  " : "未發動防御技能  ")
        + 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//防御技能發動,傷害減半
    }
    return p.fight;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class Rpg {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws Exception {
    System.out.println("在這里輸入兩個人物進行PK,以英文逗號分隔: [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("輸入格式有誤,按默認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); //發動攻擊的時間
      System.out.println("---游戲開始---");
      while (true) {
        long currenTime = System.currentTimeMillis();
 
        if (nextTime1 < currenTime) { //時間到則發動攻擊
          p1.hit(p2);
          nextTime1 += p1.coldTime*1000 + p1.waitTime*1000; //下次攻擊時間=冷卻時間+被暈眩時間
          p1.waitTime = 0; //回合結束,重置被暈眩時間為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();
    }
  }
}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 波多野结衣三区 | 久久精品亚洲一区 | 日本末发育嫩小xxxx | 国产精品久久久久久久久大全 | 日本少妇一区二区三区 | 欧美在线综合 | 国产欧美日韩在线 | 在线播放视频一区 | 色网站在线 | 国产欧美在线观看 | 久久久久久高清 | 天天爽夜夜爽夜夜爽精品视频 | 天天操网| 久久夜色精品国产 | 国产精品尤物在线观看 | 精品亚洲永久免费精品 | 欧美一级免费 | 亚洲精品中文字幕 | 午夜免费福利视频 | 国产精品原创av片国产免费 | 高清av网站 | 中文字幕国产一区 | 国产成人精品一区二 | 伊人婷婷| 欧美一区二区三区在线观看视频 | 亚洲欧洲成人 | 亚洲精品白浆高清久久久久久 | 黄色毛片在线视频 | а√天堂资源中文最新版地址 | 色吧av| 韩日一区二区三区 | 成人a级网站| 国产毛片一区二区 | 国产羞羞视频 | 在线视频一区二区三区 | 一区二区三区 在线 | 日韩福利电影 | 综合久久网 | 欧美精品日韩 | 国产中文视频 | 99999色 |