2016-04-24 5 views
0

私はこのゲームをクラス&のメソッドに入れたいと思います。クラスとページが異なるため、メインメソッドは1ページに残ります。私はそれをどうやって行うのか分かりません。私はこのゲームを自分で作りました。誰かが私を助けることができれば、それは非常に高く評価されます。基本的に私はクラスの設計と継承(親子クラス)の作成に助けが必要です。また、gameStart()などのメソッドブロック。ここで新しいJavaコーダー。

は私のゲームです:

import java.util.Scanner; 
import java.util.Random; 


public class DungeonGame { 

public static void main (String[] args){ 

    // System Objects 
    Scanner in = new Scanner(System.in); 
    Random rand = new Random(); 

    // Game Variables 
    String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin"}; 
    int maxEnemyHealth = 75; 
    int enemyAttackDamage = 25; 


    // Player Variables 
    int health = 100;  // How much health we have 
    int attackDamage = 50; // How much damage our player can do 
    int numHealthPotions = 3; // Number of health pots our player is set with 
    int healthPotionHealAmount = 30; // Amount a health the pot will raise 
    int healthPotionDropChance = 50; // Percentage drop 

    boolean running = true; 

    System.out.println("Welcome to the Dungeon Game!"); //Welcome Message 



    GAME: 
    while (running) { 
     System.out.println("---------------------------------------------"); 

     int enemyHealth = rand.nextInt(maxEnemyHealth); // Get a random health for enemy (How strong is the enemy?) 
     String enemy = enemies[rand.nextInt(enemies.length)]; //Set random enemy from array 
     System.out.println("\t#" + enemy + " appeared! #\n"); 
     //   # Skelenton has appeared (example) 

     while(enemyHealth > 0) { 

      System.out.println("\tYour HP: " + health); 
      System.out.println("\t+" + enemy + "'s HP: " + enemyHealth); 
      System.out.println("\n\tWhat would you like to do?"); 
      System.out.println("\t1. Attack"); 
      System.out.println("\t2. Drink health potion"); 
      System.out.println("\t3. Run!"); 

      String input = in.nextLine(); 
      if(input.equals("1")){ 
       int damageDealt = rand.nextInt(attackDamage); 
       int damageTaken = rand.nextInt(enemyAttackDamage); 


       enemyHealth -= damageDealt; 
       health -= damageTaken; 

       System.out.println("\t> You strike the " + enemy + " for " + damageDealt + " damage."); 
       System.out.println("\t> You receive " + damageTaken + " in retaliation!"); 

       if(health < 1) { 

        System.out.println(">t You have taken too much damage, you are to weak to go on!"); 
        break; 
       } 


      } 

      else if (input.equals("2")){ 
       if(numHealthPotions > 0) { 

        health += healthPotionHealAmount; 
        numHealthPotions--; 
        System.out.println("\t> You drink a health potion, healing yourself for " + healthPotionHealAmount + "." 
             + "\n\t> You now have" + health + "HP." 
             + "\n\t> You have" + numHealthPotions + "health potions left.\n"); 

       } 

       else { 
        System.out.println("\t> You have no health potions left!! Defeat enemies for a chance to get one. \n"); 
        } 

       } 


      else if(input.equals("3")){ 
       System.out.println("\tYou run away from the " + enemy + "!"); 
       continue GAME; 




      } 

      else { 

       System.out.println("\tInvalid Command!"); 

      } 

     } 

     if(health < 1) { 

      System.out.println("You limp out of the dungeon, weak from battle."); 
      break; 
     } 


     System.out.println("---------------------------------------------"); 
     System.out.println(" # " + enemy + " was defeated! #"); 
     System.out.println(" # You have " + health + " HP left. #"); 
     if(rand.nextInt(100) < healthPotionDropChance) { 

      numHealthPotions++; 
      System.out.println(" # The " + enemy + " dropped a health potion! #"); 
      System.out.println(" # You now have " + numHealthPotions + "health potion(s). # "); 




     } 
     System.out.println("---------------------------------------------"); 
     System.out.println("What would you like to do now?"); 
     System.out.println("1. Continue fighting"); 
     System.out.println("2. Exit game"); 

     String input = in.nextLine(); 

     while(!input.equals("1") && !input.equals("2")) { 
      System.out.println("invalid Command!"); 
      input = in.nextLine(); 
     } 

     if(input.equals("1")) { 

      System.out.println("You continue on your adventure!"); 
     } 

     else if (input.equals("2")) { 
      System.out.println("You exit the dungeon, successful from your adventures!"); 
      break; 
     } 



    } 

     System.out.println("###############################"); 
     System.out.println("Thanks for playing!"); 
     System.out.println("###############################"); 



} 

}

+0

あなたはオブジェクト指向プログラミングの経験がありません、そうですか? – Keiwan

+0

私は本当に新しいです。私は基本的なコードをすべて1ページに書くことができますが、私がこのようにするのは難しいです。私の最初の1ヶ月のコーディング。あなたがクラスデザインと継承メソッドに入れて、メソッドブロックを作る手助けができたら、本当にそれを感謝します。 –

+0

私は数分で回答を投稿します。 – Keiwan

答えて

1

これは、あなたがOOP(オブジェクト指向プログラミング)の考え方に基づいて、いくつかのクラスにあなたのゲームを分割する方法をです。あなたはあなたのゲームのすべてのエンティティのためのクラスを持っている必要があります。 (メインゲームコントローラとして主な機能と行為を保持している)

  • DungeonGame
  • プレーヤー
  • GameCharacter(抽象)

:私はクラスにそれを分割しましたGameCharacterクラスは、属性とメソッド(health、attackDamage、attack()、takeDamage(...など)を共有するため、PlayerとEnemyオブジェクトの親クラスです。

DungeonGameクラスには、あなたが書いたものとほとんど同じメインゲームループがあります。唯一の変更点は、プレイヤーや敵が何らかの行動を起こさせたい点です。今度は、ループ内のすべての変数を直接調整するのではなく、attack()、takeDamage() - などのPlayerとEnemy Objectのそれぞれの関数を呼び出して、Objectはそれぞれ独自の変数を調整します。

これはオブジェクト指向プログラミングの基本概念です。また、PlayerやEnemyオブジェクトだけが現在の健康状態を知っていることに注意してください。そうすれば、ゲッター関数を呼び出すことによってgameControllerがプレイヤーの健康状態を表示したいときは、それを "尋ねる"必要があります。また、メッセージが常に同じであれば、プレーヤクラスにヘルスの印刷を置くこともできます。

これは、ゲームの構造についての例です。変更することはできますあなたの好きなものをたくさん。別の例として、敵クラス自体を別の抽象クラスに変えて、敵の種類ごとにクラスを作成することができます。そうすれば、個々の敵のタイプごとに特殊な能力を割り当てることができます。

DungeonGame.java:

import java.util.Scanner; 
import java.util.Random; 

public class DungeonGame { 

Random rand; 
Scanner in; 

Player player; 
private int healthPotionDropChance; 
boolean running; 

public static void main (String[] args){ 

    DungeonGame game = new DungeonGame(); 
    game.run(); 
    System.out.println("###############################"); 
    System.out.println("Thanks for playing!"); 
    System.out.println("###############################"); 

} 

public DungeonGame(){ 
    // System Objects 
    in = new Scanner(System.in); 
    rand = new Random(); 

    System.out.println("Welcome to the Dungeon Game!"); //Welcome Message 

    player = new Player(); 
    healthPotionDropChance = 50; 

} 

public void run(){ 
    running = true; 
    GAME: 
    while (running) { 
     System.out.println("---------------------------------------------"); 

     /*int enemyHealth = rand.nextInt(maxEnemyHealth); // Get a random health for enemy (How strong is the enemy?) 
     String enemy = enemies[rand.nextInt(enemies.length)]; //Set random enemy from array 
     System.out.println("\t#" + enemy + " appeared! #\n"); 
     //   # Skelenton has appeared (example) 
     */ 
     Enemy enemy = new Enemy(); 
     String enemyType = enemy.getType(); 
     System.out.println("\t#" + enemyType + " appeared! #\n"); 

     while(enemy.getHealth() > 0) { 

      System.out.println("\tYour HP: " + player.getHealth()); 
      System.out.println("\t+" + enemyType + "'s HP: " + enemy.getHealth()); 
      System.out.println("\n\tWhat would you like to do?"); 
      System.out.println("\t1. Attack"); 
      System.out.println("\t2. Drink health potion"); 
      System.out.println("\t3. Run!"); 

      String input = in.nextLine(); 
      if(input.equals("1")){ 

       int damageTaken = enemy.attack(); 
       int damageProduced = player.attack(); 

       enemy.takeDamage(damageProduced); 
       player.takeDamage(damageTaken); 

       System.out.println("\t> You strike the " + enemyType + " for " + damageProduced + " damage."); 
       System.out.println("\t> You receive " + damageTaken + " in retaliation!"); 

       if(player.getHealth() < 1) { 

        System.out.println(">t You have taken too much damage, you are to weak to go on!"); 
        break; 
       } 


      } 

      else if (input.equals("2")){ 
       if(player.getNumHealthPotions() > 0) { 

        player.applyPotion(); 
        System.out.println("\t> You drink a health potion, healing yourself for " + player.getHealthPotionHealAmount() + "." 
             + "\n\t> You now have" + player.getHealth() + "HP." 
             + "\n\t> You have" + player.getNumHealthPotions() + "health potions left.\n"); 

       } 

       else { 
        System.out.println("\t> You have no health potions left!! Defeat enemies for a chance to get one. \n"); 
        } 

       } 


      else if(input.equals("3")){ 
       System.out.println("\tYou run away from the " + enemyType + "!"); 
       continue GAME; 




      } 

      else { 

       System.out.println("\tInvalid Command!"); 

      } 

     } 

     if(player.getHealth() < 1) { 

      System.out.println("You limp out of the dungeon, weak from battle."); 
      break; 
     } 


     System.out.println("---------------------------------------------"); 
     System.out.println(" # " + enemyType + " was defeated! #"); 
     System.out.println(" # You have " + player.getHealth() + " HP left. #"); 
     if(rand.nextInt(100) < healthPotionDropChance) { 

      player.pickUpHealthPotion(); 
      System.out.println(" # The " + enemyType + " dropped a health potion! #"); 
      System.out.println(" # You now have " + player.getNumHealthPotions() + "health potion(s). # "); 


     } 
     System.out.println("---------------------------------------------"); 
     System.out.println("What would you like to do now?"); 
     System.out.println("1. Continue fighting"); 
     System.out.println("2. Exit game"); 

     String input = in.nextLine(); 

     while(!input.equals("1") && !input.equals("2")) { 
      System.out.println("invalid Command!"); 
      input = in.nextLine(); 
     } 

     if(input.equals("1")) { 

      System.out.println("You continue on your adventure!"); 
     } 

     else if (input.equals("2")) { 
      System.out.println("You exit the dungeon, successful from your adventures!"); 
      break; 
     } 
    } 
} 

} 

Player.java:

public class Player extends GameCharacter { 

private int numHealthPotions; // Number of health pots our player is set with 
private int healthPotionHealAmount; // Amount a health the pot will raise 
private int healthPotionDropChance; 

public Player(){ 
    super(100,50); 
    numHealthPotions = 3; 
    healthPotionHealAmount = 30; 
} 

public void applyPotion(){ 
    health += healthPotionHealAmount; 
    numHealthPotions--; 
} 

public void pickUpHealthPotion(){ 
    numHealthPotions++; 
} 

public int getNumHealthPotions(){ 
    return numHealthPotions; 
} 

public int getHealthPotionHealAmount(){ 
    return healthPotionHealAmount; 
} 
} 

Enemy.java:

public class Enemy extends GameCharacter{ 

private String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin"}; 
private String type; 
private int maxHealth; 
private int health; 
private int attackDamage; 

public Enemy(){ 
    //generates a random enemy 
    super(100,25); 
    maxHealth = 75; 
    attackDamage = 25; 
    type = enemies[rand.nextInt(enemies.length)]; //Set random enemy from array 
    health = rand.nextInt(maxHealth); 

} 

public String getType(){ 
    return type; 
} 

} 

GameCharacter.java:

import java.util.Random; 

public abstract class GameCharacter { 

Random rand; 

int health; 
int attackDamage; 

public GameCharacter(int health, int attackDamage){ 
    rand = new Random(); 
    this.health = health; 
    this.attackDamage = attackDamage; 
} 

public int attack(){ 
    return rand.nextInt(attackDamage); 
} 

public void takeDamage(int damage){ 
    health -= damage; 
} 

public int getHealth(){ 
    return health; 
} 

public void setHealth(int health){ 
    this.health = health; 
} 

public int getDamage(){ 
    return attackDamage; 
} 
} 
関連する問題