ここから本文です

今、プレイヤーとエネミーを親クラスから継承して戦わせる事をしています。 ここ...

rir********さん

2019/5/1814:20:35

今、プレイヤーとエネミーを親クラスから継承して戦わせる事をしています。
ここで、プレイヤーとエネミーを2人とか10人に増やしたいのですが、手軽に増やす方法ありませんか?

至急誰か教えてください!
以下はソースです

import java.util.Random;

public class character {

private String name;
private int hp;
protected int basicPower;
private int maxHp;

character(String name, int hp, int basicPower) {
this.name = name;
this.hp = hp;
this.basicPower = basicPower;
this.maxHp = hp;
}

public int attack() {
Random rand = new Random();
int attack = basicPower * rand.nextInt(6);
System.out.println(name + "の攻撃");
return attack;
}



/**
* 相手側の攻撃値分現体力から
* @param attack
* @throws BatteleException
*/

public void damage(int attack){
System.out.println(name + "は" + attack + "damege受けた");
hp -= attack;

if (hp <= 0) {
this.status();
throw new BattleException();
}
this.status();
return;
}

/**
* 最大体力と残体力を比較して
* ステータスを表記させるメソッド
*/
public void status() {
if (hp <= 0) {
hp = 0;
}
System.out.println(name + "の残りHPは" + hp + "です。");
System.out.print("ステータス:");
if (hp >= maxHp * 0.5) {
System.out.println("元気");
} else if (hp >= maxHp * 0.2) {
System.out.println("疲れ");
} else if (hp > 0) {
System.out.println("瀕死");
} else {
System.out.println("死亡");
}

System.out.println("----------------");
}

}

public class Player extends character {
private int powerUp;

Player(String name, int hp, int basicPower) {
super(name, hp, basicPower);
this.powerUp = powerUp;

}

public int powerUp(int powerUp) {
basicPower += powerUp;
System.out.println("攻撃力は" + basicPower + "です。");
System.out.println("----------------");


return basicPower;
}

}

import java.util.Random;

public class Battlefield {
Player player;
Enemy enemy;

Battlefield(Player player, Enemy enemy) {
this.player = player;
this.enemy = enemy;
}

public void battle() {
int turn = 1;

System.out.println("敵が現れた!");
System.out.println("BATTLEを開始します");
System.out.println("----------------");

/**
* 乱数0,1の値でどちらが取れるかで先にどちらが攻撃するかを
* ランダムに毎回戦闘を行っている。
*
*/
try {
while (true) {
Random rand = new Random();
int plaattack = player.attack();
int eneattack = enemy.attack();
int x = rand.nextInt(2)+1;

System.out.println(turn + "ターン目");
if (x == 1) {

enemy.damage(plaattack);
player.damage(eneattack);
turn++;

} else {
player.damage(eneattack);
enemy.damage(plaattack);
turn++;
}
}

//戦闘終了後にどちらが死んだかで表示を決める
//playerが死んだならgameover
//enemyが死んだなら経験値を獲得
} catch (BattleException e) {
System.out.println("Battle終了");
}
}
}



import java.util.Scanner;

public class result {

public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
Player pla = new Player("工藤", 50, 20);




System.out.println("基礎攻撃力は" + pla.basicPower + "です。");
System.out.println("装備上昇値を入力して下さい");
System.out.print("上昇値:");
int n = stdIn.nextInt();
pla.powerUp(n);

Enemy ene = new Enemy("スライム", 100, 20, 100);

Battlefield bat = new Battlefield(pla, ene);
bat.battle();





}

}

閲覧数:
22
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

prw********さん

2019/5/1920:41:03

>プレイヤーとエネミーを2人とか10人に増やしたいのですが、手軽に増やす方法ありませんか?

このようになります

***

////rpgRir.java
import java.io.*;
import java.util.*;

public class rpgRir {
public static void main(String[] args) {
List<Player> pls = new ArrayList<Player>();
pls.add( new Player("工藤", 50, 20) );
pls.add( new Player("山田", 60, 35) );
pls.add( new Player("鈴木", 70, 50) );
pls.add( new Player("川西", 80, 60) );
pls.add( new Player("高橋", 90, 70) );
pls.add( new Player("松本", 90, 80) );

List<Enemy> ens = new ArrayList<Enemy>();
ens.add( new Enemy("スライムA", 100, 30, 100) );
ens.add( new Enemy("スライムB", 120, 40, 100) );
ens.add( new Enemy("スライムC", 140, 50, 100) );
ens.add( new Enemy("スライムD", 200, 60, 100) );
//ens.add( new Enemy("スライムE", 250, 60, 120) );
//ens.add( new Enemy("スライムF", 250, 70, 125) );
//ens.add( new Enemy("スライムG", 250, 80, 125) );

for(int i=0; i<pls.size(); i++){
pls.get(i).inputPowerUp();
}

BattleField bt = new BattleField(pls, ens);
bt.battle();
}
}


////Character.java
import java.io.*;
import java.util.*;

public class Character {
protected String name;

protected int hp;
protected int maxHp;

protected int basicPower;//基礎攻撃力
protected int powerUp;//装備上昇値。武器などによる攻撃力の上昇や下降。本来は装備に属している数値。

protected int speed;

protected int exp;
protected int level;

protected boolean isdead;

Character(String name, int hp, int basicPower) {
this.name = name;

this.hp = hp;
this.maxHp = hp;

this.basicPower = basicPower;
this.powerUp = 0;

this.speed = 0;

this.isdead = false;
}

public void setSpeed(int speed){
this.speed = speed;
}

//総合的な攻撃力の取得
public int getPower(){
return basicPower + powerUp;
}

public int attack() {
Random rand = new Random();
int attack = getPower() * rand.nextInt(6);
System.out.println(name + "の攻撃");
return attack;
}

void setHp(int value){
hp += value;
if( hp <= 0 ){
hp = 0;
isdead = true;
}
}

//相手側からの攻撃値分だけ、自分側の現体力値から引く。
public void damage(int attack){
this.setHp(-attack);
System.out.println(name + "は" + attack + "damege受けた");
//this.showStat();
this.say();
if( isdead ){
System.out.println(name + "は死んだ");
}
return;
}

//showStatの簡易版のようなもの
public String say(){
return name + ", " + hp + "/" + maxHp + ", " + getStatStr();
}

//最大体力と残体力を比較して、ステータス文字列を得る
private String getStatStr(){
String statStr;

if (hp >= maxHp * 0.5) {
statStr = "元気";
} else if (hp >= maxHp * 0.2) {
statStr = "疲れ";
} else if (hp > 0) {
statStr = "瀕死";
} else {
statStr = "死亡";
}

return statStr;
}

public void showStat() {
System.out.println(name + "の残りHPは" + hp + "/" + maxHp + "です。");
System.out.println( "ステータス:" + getStatStr() );
System.out.println("----------------");
}

public boolean isalive(){
return !isdead;
}

public Character setTarget(List<Character> group){
return group.get(0);
}

public Character indexOfUke(List<Character> group, int index){
Iterator<Character> itr = group.iterator();
Character uke = itr.next();
for(int i=1; i<index; i++){
uke = itr.next();
}
return uke;
}
}

////Player.java
import java.io.*;
import java.util.*;

public class Player extends Character {
Scanner stdIn;

Player(String name, int hp, int basicPower) {
super(name, hp, basicPower);
this.exp = 0;
this.level = 1;

stdIn = new Scanner(System.in);
}

public int powerUp(int powerUp) {
this.powerUp = powerUp;

System.out.println("攻撃力は" + this.getPower() + "です。");
System.out.println("----------------");

return this.getPower();
}

public void inputPowerUp(){
System.out.println(this.name + "の基礎攻撃力は" + this.basicPower + "です。");
System.out.println("装備上昇値を入力して下さい");
System.out.print("上昇値:");

int n = stdIn.nextInt();
this.powerUp(n);
}

private int inputInt(String caption, int min, int max){
System.out.println(caption);
int value;
while(true){
System.out.print(">>");
value = stdIn.nextInt();
if( min <= value && value <= max ){
break;
}
System.out.println("invalid value");
}
return value;
}

public Character setTarget(List<Character> group){
for(int i=0; i<group.size(); i++){
System.out.println( i + ": " + group.get(i).say() );
}
int index = inputInt("input index", 0, group.size()-1);
return indexOfUke(group, index);
}
}

////Enemy.java
import java.io.*;
import java.util.*;

public class Enemy extends Character {
Enemy(String name, int hp, int basicPower, int exp){
super(name, hp, basicPower);
this.exp = exp;
this.level = 1;
}

public Character setTarget(List<Character> group){
Random rand = new Random();
int index = rand.nextInt( group.size() );
return indexOfUke(group, index);
}
}

////BattleField.java
import java.io.*;
import java.util.*;


class CharacterComparator implements Comparator<Character> {
@Override
public int compare(Character a, Character b) {
return b.speed - a.speed;
}
}

public class BattleField {
int turnMax = 1000;

List<Character> pls;
List<Character> ens;

String topName;
int expTotal;

BattleField(List<Player> pls, List<Enemy> ens) {
this.pls = new ArrayList<>();
this.ens = new ArrayList<>();
this.pls.addAll(pls);
this.ens.addAll(ens);

topName = pls.get(0).name;

expTotal = 0;
for(int i=0; i<ens.size(); i++){
expTotal += ens.get(i).exp;
}
}

private void msgEnd(){
if( ens.isEmpty() ){
System.out.println("敵をやつけた!");
}else if( pls.isEmpty() ){
System.out.println(topName + "たちは全滅した……");
}else{
System.out.println("その時何かが起こった!");
}
}

private void showLine(){
System.out.println("----------------");
}

private void showPlsStat(){
for(int i=0; i<pls.size(); i++){
System.out.println( pls.get(i).say() );
}
}

//経験値獲得の処理
private void leveling(){
int expEach = expTotal / pls.size();
for(int i=0; i<pls.size(); i++){
pls.get(i).exp += expEach;
System.out.println(pls.get(i).name + "は" + expEach + "の経験値を得た");
}
}

public void battle() {
System.out.println("敵が現れた!");
System.out.println("BATTLEを開始します");
showLine();

for(int turn=1; turn<=turnMax ; turn++){
Random rand = new Random();

List<Character> active = new ArrayList<Character>();
active.addAll(pls);
active.addAll(ens);

for(int i=0; i<active.size(); i++){
active.get(i).setSpeed( rand.nextInt(100) );
}
Collections.sort( active, new CharacterComparator() );

System.out.println(turn + "ターン目");
System.out.println("ランダムな素早さによる攻撃順");
for(int i=0; i<active.size(); i++){
System.out.println( active.get(i).speed + " " + active.get(i).name );
}
showLine();

Iterator<Character> itr = active.iterator();
while( itr.hasNext() ){
showPlsStat();
showLine();

Character seme = itr.next();//攻め
System.out.println( seme.name + "の行動" );

List<Character> targets = seme instanceof Player ? ens : pls;
Character uke = seme.setTarget( targets );//受け
uke.damage( seme.attack() );

if( uke.isdead ){
targets.remove( targets.indexOf(uke) );
}

if( seme instanceof Enemy ){
System.out.println( "(press enter)" );
try{
int temp = System.in.read();
}catch(IOException e){
System.err.println( "input error" );
}
}

showLine();

System.out.println( "pls size:" + pls.size() );
System.out.println( "ens size:" + ens.size() );
showLine();

if( pls.size() == 0 || ens.size() == 0 ){
break;
}
}

if( pls.size() == 0 || ens.size() == 0 ){
break;
}
}

msgEnd();
if( pls.size() != 0 ){
leveling();
}
showLine();
}
}

質問した人からのコメント

2019/5/20 14:12:28

ありがとうございます!
まさか全文で返してくれるとは…!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

ama********さん

2019/5/1818:28:39

データは こんな感じで

List<Player> plaList = new ArrayList<Player>();
plaList.add(new Player("工藤", 50, 20));
plaList.add(new Player("加藤", 55, 25));
plaList.add(new Player("佐藤", 60, 30));

List<Enemy> eneList = new ArrayList<Enemy>();
eneList.add(new Enemy("スライム1", 110, 20, 100));
eneList.add(new Enemy("スライム2", 120, 25, 110));
eneList.add(new Enemy("スライム3", 130, 30, 120));

サイズの取得:List#size();
要素の取得:List#get(index):

>Battlefield(Player player, Enemy enemy)

Battlefield(List<Player> playerList, List<Enemy> enemyList)

bas********さん

2019/5/1816:20:32

配列 or リスト。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる