0

これは非常に明白な答えだと思うので、私が愚かである場合はご容赦ください。私は小学生向けのシンプルなテキストベースのゲームを作成しています。このゲームでは、ユーザーがメイジとしてプレイし、さまざまなスペル カードを組み合わせて強力なドラゴンを追い払う必要があります (私の場合は、それらの値を乗算して取得しようとします)。ドラゴンの弱点番号に最も近い)。この弱点の数値は、ドラゴンの HP が 0 以下になるまで毎ターン変化します。0 になると、別のドラゴンが出現し、プレイヤーはそのドラゴンも追い払う必要があります。プロジェクト全体で 5 つのクラスが使用されます。1 つはプレイヤー用、もう 1 つはカード用、もう 1 つはドラゴン用、もう 1 つはゲームのプレイ方法用、そして 5 番目はドライバー用です。私にとって最初に頭に浮かぶのは、次のようなメソッドを Player.java で作成することです。

    public int isClosestToo(int num, int max){
        int counter = 0;
        for(int i = num; i <= max; i++){
            counter++
        }
        return counter;    
    }

私のゲームクラスの play メソッドの if ステートメントが続きます:

    if(isClosestToo(num1) > isClosestToo(num2){
        /*do something*/
    }

これでうまくいくことはわかっていますが、私ができることを露骨に明白で単純なものを見逃さないようにしたいと考えています。多分Integerクラスのいくつかのメソッド?これはプロジェクトの非常に初期のバージョンであることを覚えておいてください。後で Slick2D グラフィックスを実装したいと考えています。これまでのコードはすべて次のとおりです。 Game.java から:

import java.util.Scanner;

   public class Game {
Scanner scan = new Scanner(System.in);
public Game(){}

public void play(){
    Player p = new Player();
    while(p.getHP() > 0){
        Dragon d = new Dragon();
        System.out.println("You have " + p.getHP() + " HP");
        System.out.println(d);
        System.out.println(p.elementHandToString());
        System.out.println(p.attackHandToString());
        System.out.println("Choose the two cards that multiply to be closest too the weakness of the dragon for the most damage!");
        int element = scan.nextInt();
        int attack = scan.nextInt();
        int damage = d.getWeakness() - (p.getElementCard(element - 1).getNum() * p.getAttackCard(attack - 1).getNum());
        d.setHP(d.getHP() - damage);
        p.afterTurn(element, attack);
        d.newWeakness();
    }
}
}

そして Player.java:

import java.util.Random;
import java.util.ArrayList;

public class Player {
Random r = new Random();
int hp;
ArrayList<Card> attackHand;
ArrayList<Card> elementHand;
ArrayList<String> elements;
ArrayList<String> attacks;


public Player(){ 
    this.hp = 100;
    this.genHands();
    attackHand = new ArrayList<Card>();
    elementHand = new ArrayList<Card>();

    //arraylist of types of elements, feel free to add more using the .add method
    elements = new ArrayList<String>();
    elements.add("Fire");
    elements.add("Ice");
    elements.add("Water");
    elements.add("Air");
    elements.add("Rock");
    elements.add("Mana");

    //arraylist of types of attacks, feel free to add more using the .add method
    attacks = new ArrayList<String>();
    attacks.add("Projectile");
    attacks.add("Self");
    attacks.add("Explosion");
    attacks.add("Repeated");
    attacks.add("Debuff");
    attacks.add("Melee");
}

public Player(int hp){ this.hp = hp; }

public int getHP(){ return hp; }

public ArrayList<Card> getAttackHand(){ return attackHand; }

public ArrayList<Card> getElementHand(){ return elementHand; }

public Card getAttackCard(int whichCard){ return attackHand.get(whichCard); }

public Card getElementCard(int whichCard){ return elementHand.get(whichCard); }

public void afterTurn(int element, int attack){ 
    attackHand.add(new Card(genRand(1, 12), attacks.get(genRand(1, 12))));
    elementHand.add(new Card(genRand(1, 12), elements.get(genRand(1,12))));
    attackHand.remove(attack - 1);
    elementHand.remove(element - 1);
}

public String elementHandToString(){ return "Card 1: " + elementHand.get(0) + "/nCard 2: " + elementHand.get(1) + "/nCard 3: " + elementHand.get(2) + "/nCard 4: " + elementHand.get(3); }

public String attackHandToString(){ return "Card 1: " + attackHand.get(0) + "/nCard 2: " + attackHand.get(1) + "/nCard 3: " + attackHand.get(2) + "/nCard 4: " + attackHand.get(3); }

//generates the player's hands
public void genHands(){
    //creates a deck of random elemental cards
    for(int x = 0; x <= 4; x++){
        elementHand.add(new Card(genRand(1, 12), elements.get(genRand(0, elements.size() - 1))));
    }

    //creates a deck of random attack cards
    for(int i = 0; i <= 4; i++){
        attackHand.add(new Card(genRand(1, 12), attacks.get(genRand(0, attacks.size() - 1))));
    }
}

//returns a random integer between min and max
//@param1 minimum number for random to be
//@param2 maximum number for random to be
public int genRand(int min, int max){ return r.nextInt(max) + min; }
}

Dragon.java:

package alchemy;

import java.util.Random;
public class Dragon {
int hp;
int weakness;
Random r = new Random();

public Dragon(){
    hp = genRand(1, 144);
    weakness = genRand(1, hp);
}

public int getHP(){
    return hp;
}

public void setHP(int newHP){
    hp = newHP;
}

public String toString(){
    return "A dragon with " + hp + "HP has appeared!" + "/nIts current weakness is " + weakness + "/nPlay two cards that multiply to a number close to its weakness for damage!";
}

public int getWeakness(){
    return weakness;
}

public void newWeakness(){
    weakness = genRand(1, hp);
}

public int genRand(int min, int max){
    return r.nextInt(max) + min;
}
}

そして最後に、Card.java:

import java.util.Random;

public class Card{
int num;
Random r = new Random();
String element;

public Card(){
    num = 0;
    element = "n/a";
}

public Card(int n, String e){
    num = n;
    element = e;
}

public int getNum(){
    return num;
}

public String getElement(){
    return element;
}

public String toString(){
    return "This is a " + element + "card with a value of " + num + ".";
}
}

主に、私が直面している問題は、プレイヤーが与えるダメージを計算する必要がある Game クラスの play() ループです。明らかに、(エレメンタル ロジックでプログラムする前に) そのダメージが負の数になってドラゴンが HP を獲得するのではなく、実際にダメージを与えたいと考えています。ありとあらゆる助けをいただければ幸いです。ありがとうございました!-ニック

4

2 に答える 2

0

これはオプションです

if((max-int1)>(max-int2) && max-int2>=0){
   //do something with int2
}
else if((max-int1)<(max-int2) && max-int1>=0){
   //do something with int1
}
else if(max-int1>=0){
   //do something with int1
}
else if(max-int2>=0){
   //do something with int2
}
else{
   //do something if conditions aren't met
}
于 2014-03-13T01:55:34.747 に答える