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

标签 java class methods

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

这是我的游戏:

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



}   

}

最佳答案

这就是您如何根据 OOP(面向对象编程)的思想将游戏分为几个类。您应该为游戏的每个实体提供类。我把它分成了几类:

  • DungeonGame(拥有主要功能并充当主游戏 Controller )
  • 玩家
  • 敌人
  • 游戏角色(抽象)

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

DungeonGame 类具有主游戏循环,与您编写的内容基本相同。唯一的变化是您希望玩家和/或敌人采取某些行动的点。现在,您不必直接在循环中调整所有变量,而是调用玩家和敌人对象上的相应函数 - 例如 Attack()、takeDamage() - 对象调整自己的变量。

这就是面向对象编程的基本思想。另请注意,例如,只有玩家和敌人对象知道自己当前的健康状况,因此每次游戏 Controller 想要打印玩家健康状况时,它都必须通过调用 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;
}
}

敌人.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;
}
}

关于java - 新的 Java 编码器。需要帮助将游戏放入方法和类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820812/

相关文章:

ruby-on-rails - 局部变量、实例变量、全局变量和类变量有什么区别?

android getText(int resId) 实现

Java倒排数组方法

java - 如何将字符串数组转换为 MySQL IN 子句

java - 无法使用 android 支持库 - NoClassDefFoundError : android. support.v7.appcompat.R$attr

java - hibernate 查询执行时将空值分配给原始类型的属性?

c++ - 了解类构造函数的静态转换

vb.net - 如何使用 'With {...}' 语法分配属性值?

java - Java 中的通用静态方法

java - 在java中实现乘法算法