2014-03-13 3 views
0

매우 명확한 답변이있는 것 같습니다. 그래서 바보가되면 나를 용서하십시오. 저는 마법사로 게임하는 사용자가 다양한 주문 카드를 혼합하여 강력한 용을 퇴치해야하는 초등 학생들을위한 간단한 텍스트 기반 게임을 만들고 있습니다. (제 경우에는 값을 곱해서 시도해보십시오. 용의 약점 번호에 가장 가까운). 이 약점 수는 드래곤이 HP가 0보다 작거나 같을 때까지 매 턴마다 바뀌며, 그 시점에서 다른 드래곤이 스폰되고 플레이어도 그와 같은 값을 지정해야합니다. 전체 프로젝트는 5 개의 클래스를 차지하는데, 하나는 플레이어 용이고 다른 하나는 카드 용, 다른 하나는 드래곤 용, 다른 하나는 게임의 플레이 방식, 다섯 번째는 드라이버입니다. 내 게임 클래스에서 if 문에 의해두 정수 중 Java에서 세 번째 정수와 가장 가까운 값을 테스트하고 싶습니다.

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

다음 '플레이 방법 :

if(isClosestToo(num1) > isClosestToo(num2){ 
     /*do something*/ 
    } 
나를 위해 먼저 떠오르는 것은 이런 식 Player.java의 방법을 만드는 것입니다

이 방법이 효과가 있다는 것을 알고 있지만, 내가 할 수있는 명백하고 단순한 무언가를 놓치지 않도록하고 싶습니다. 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; 
} 
} 

그리고 마지막으로, 카드. 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() 루프입니다. 여기서 플레이어가하는 손상을 계산해야합니다. 분명히 (내가 원소 논리에서 프로그램하기 전에), 그 피해가 실제로 음수로 끝나고 용을 얻는 대신에 피해를 주길 원합니다. 모든 도움이 크게 감사 할 것입니다. 고맙습니다! 방법 "입니다"는 부울을 반환로 시작할 때 -Nick는

+0

당신이 최대 걸릴 수 있습니다 할 수있는 INT2을 0에 가장 가까운 경우' – mig

+1

당신의 가장 가까운 INT 것 중 (Math.abs (max-num1) exception1

+0

Math.abs (max-num1)

답변

0

이다. 그러나 프로젝트는 아마도 당신 자신에 의해 유지 될 것입니다. 그것은 당신이 원하는 것이 될 수 있습니다. isClosestToo 메서드는 num 및 max 인 두 개의 인수를 사용하지만 두 개의 인수를 호출 할 때는 하나의 인수 만 사용합니다.

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


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

메소드 이름 자체가 혼란, 공용 INT의 ClosestTo을 수행 할 수 있습니다 (INT [] NUM, INT 최대)이 걸릴 수의 목록과 가장 가까운 수를 반환하거나 취할 DiffMax (INT 인분)을 수행하는 이 경우 max를 메소드 범위에서 액세스 할 수 있어야합니다.INT1 및 최대 - -

public int ClosestTo(int[] num,int max) 
{ 
    1.declare a variable to store the closest num 
    2.for every element in num, if Math.abs(max-num) < closestNum, store num to closestNum 
    3.return closestNum 
} 

또는

다음
public int DiffMax(int num) 
{ 
    1. return Math.abs(max-num) < closestNum 
} 

당신은

if(DiffMax(num1) > DiffMax(num2){ 
     /*do something*/ 
    } 
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 
}