新的Java编码器。需要帮助将游戏放入方法和类中

时间:2016-04-24 08:18:57

标签: java class methods

所以我想把这个游戏放到课堂上方法。所以不同的页面都有类,并将主要方法保留在一个页面上。我不知道该怎么做,我自己完成了整个游戏。如果有人可以帮助我,我将不胜感激。基本上我需要帮助进行类设计和继承(父子类)。还有诸如gameStart()之类的方法块。

这是我的游戏:

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("###############################");



}   

}

1 个答案:

答案 0 :(得分:1)

这就是基于OOP(面向对象编程)理念将游戏划分为多个类的方法。你应该为游戏的每个实体都有课程。我把它分成了几个类:

  • DungeonGame(其中包含主要功能并充当主游戏控制器)
  • 播放器
  • 敌人
  • GameCharacter(摘要)

GameCharacter类是Player和Enemy对象的父类,因为它们共享属性和方法(例如health,attackDamage,attack(),takeDamage()...)

DungeonGame类的主游戏循环与你所写的大致相同。唯一的变化是你希望玩家和/或敌人采取某些行动的点。现在,不是直接在循环中调整所有变量,而是调用Player和Enemy Object上的相应函数 - 例如attack(),takeDamage() - 和对象调整自己的变量。

这是面向对象编程的基本思想。另请注意,例如,只有玩家和敌人对象知道他们自己当前的健康状况,因此每当gameController想要打印玩家健康状况时,它都必须要求&#34;通过调用getter函数来实现它。如果打印消息总是相同的话,你也可以将健康打印放入Player类......

这只是你如何了解游戏结构的一个例子 - 你仍然可以根据自己的喜好改变很多东西。作为另一个例子,你可以将Enemy类本身变成另一个抽象类,并为每种类型的敌人创建一个类。这样你就可以为每个敌人类型分配特殊的权力。

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;
}
}