簡體   English   中英

OOP Java 如何根據另一個數組檢查數組並在另一個數組具有更高的數字時替換數據?

[英]OOP Java How do I check an array against another array and replace the data if the other array has higher numbers?

我正在嘗試檢查所選敵人的武器和盔甲,看看它們是否比主角的好。 所以,我想一一檢查,如果敵人的好我想把主角的武器設置為和敵人的武器相等,基本上把它和它帶到主角的包里。 到目前為止,我所嘗試的一切都是檢查一種武器是否更好,並更換所有武器,而不管其他武器是否更好。 有沒有辦法可以單獨檢查每個?

我有四節課。 主要的。 特點。 武器。 盔甲。 這是我嘗試切換的主類的一部分:

import java.util.Scanner;

import Character.Character;

import java.util.Random;
public class Main {

public static void main(String[] args) {    
    Scanner scanner = new Scanner(System.in);
    System.out.println("> Welcome to The Game Project <");
    System.out.println("\n >> Input Main Character Name: ");
    String main_name = scanner.nextLine();
    System.out.println(">> Input Main Character Power: ");
    int main_power=scanner.nextInt();
    System.out.println(">> Input Main Character Hp: ");
    int main_hp=scanner.nextInt();
    System.out.println("----------------------------------------------------");

    Character main_ch=new Character (main_hp,main_power,main_name);
    show_status(main_ch);
    check_bag(main_ch);

    Character enemies[]=new Character [10];
    enemies[0]= new Character("Werewolf");
    enemies[1]= new Character("Vampire");
    enemies[2]= new Character("Alien");
    enemies[3]= new Character("Witch");
    enemies[4]= new Character("Ghost");
    enemies[5]= new Character("Skeleton");
    enemies[6]= new Character("Zombie");
    enemies[7]= new Character("Demon");
    enemies[8]= new Character("Mummy");
    enemies[9]= new Character("Dragon");

    boolean check = false;

    int dead_count=0;
    while(true) {

        Random rnd=new Random();
        int selected = rnd.nextInt(enemies.length); //random enemy selected

        System.out.println();
        System.out.println(">>>>> An enemy has appeared! <<<<<");
            while(enemies[selected].getHp()>0) { 
                System.out.println();
                System.out.println(">>>>> "+enemies[selected].getName()+" wants to fight!");
                show_status(enemies[selected]);
                check_bag(enemies[selected]);
                System.out.println();
                System.out.println(">> What do you want to do?");
                System.out.println("\t1. Fight!");
                System.out.println("\t2. Use skill.");
                System.out.println("\t3. Check your stats.");
                int input = scanner.nextInt();

                    if(input==1) {
// originally using                     int damageToEnemy = rnd.nextInt(main_ch.hit_point());
// originally using                     int damageTaken = rnd.nextInt(enemies[selected].hit_point());

                            int damageToEnemy = main_ch.hit_point();
                            int damageTaken = enemies[selected].hit_point();
                            enemies[selected].hp -= damageToEnemy;
                            main_ch.hp -= damageTaken;
                            if(enemies[selected].hp <= 0) {
                                enemies[selected].hp=0;
                                   dead_count=dead_count+1;
                                main_ch.level=main_ch.level+1; //gain one level after enemy defeated
                                System.out.println(">> You defeated the enemy and gained a level!");

                                main_ch.getBag().setMoney(main_ch.getBag().getMoney() + enemies[selected].getBag().getMoney());//take defeated enemy's money
                                System.out.println();
                                System.out.println("\t>> You found "+enemies[selected].getBag().getMoney()+" dollars. You now have "+main_ch.getBag().getMoney()+" dollars in your bag."); 



                                    if(enemies[selected].getWeapon().getPower() > main_ch.getWeapon().getPower()) { //check to see if enemy's weapons have higher power
                                        for(int i = 0; i<4; i++) {      
                                        main_ch.getBag().setWeaponArray(i, enemies[selected].getBag().getWeaponArray()[i]); //replace weapons if they are better
                                    }
                                        System.out.println("\t>> You found better weapons! They have been added to your bag.");
                                    }

                                    if(enemies[selected].getArmor().getDefense() > main_ch.getArmor().getDefense()) {   //check to see if enemy's armor is better
                                        for(int i = 0; i<4; i++) {  
                                        main_ch.getBag().setArmorArray(i, enemies[selected].getBag().getArmorArray()[i]); //replace armor if it is better
                                    }
                                        System.out.println("\t>> You found better armor! They have been added to your bag.");
                                    }
                                break;

                            }
                            System.out.println("\n>> You caused "+ damageToEnemy +" damage to the enemy! Their hp is now "+ enemies[selected].hp+".");
                            System.out.println(">> You received "+ damageTaken +" damage from the enemy! Your hp is now "+main_ch.hp+".");

                            if(main_ch.hp <=0) {
                                System.out.println();
                                System.out.println(">> Oh no! You died! Better luck next time. Thanks for playing!");
                                System.out.println();
                            break;
                            }   

                        }

                    else if(input==2) {
                        if(main_ch.getSkill()>0 && main_ch.getMp()>0) {
                            main_ch.useSkill();
                            System.out.println("\t>> You used a skill. Your hit point increased to "+main_ch.hit_point()+". Your MP decreased to "+main_ch.getMp()+".");
                        }
                        else {
                            if(main_ch.getSkill()<=0) {
                                System.out.println("You have no skill points left.");
                            }
                            else{
                            System.out.println("\t>> Your MP is too low to use skill.");
                        }
                    }
                    }
                    else if(input==3) {
                        System.out.println();
                        show_status(main_ch);
                        check_bag(main_ch);                                             
                        }
                    else {
                        System.out.println(">> You have entered an invalid key.");

                    }
                    }



            if(dead_count==enemies.length) {
                check=true;
            }
            if(check) {
                System.out.println();
                System.out.println(">>>>>>>>>> You won! Congratulations, you defeated all of your enemies! <<<<<<<<<");
                break;
           }
            if(main_ch.hp <=0) {
                System.out.println();
                System.out.println(">> Oh no! You died! Better luck next time. Thanks for playing!");
                System.out.println();
                break;
            }



            }
        }
public static void show_status(Character character) {
    System.out.println("----------------- Character Status -----------------");
    System.out.println("\tCharacter Name:\t\t"+character.getName());
    System.out.println("\tCharacter HP:\t\t"+character.getHp());
    System.out.println("\tCharacter Power:\t"+character.getPower());
    System.out.println("\tCharacter Defense:\t"+character.getDefense());
    System.out.println("\tCharacter MP:\t\t"+character.getMp());
    System.out.println("\tCharacter Level:\t"+character.getLevel());
    System.out.println("\tCharacter Hit Point:\t"+character.hit_point());
    System.out.println("\tCharacter Skill:\t"+character.getSkill());
    System.out.println("\tWeapon Name:\t\t"+character.getWeapon().getName());
    System.out.println("\tWeapon Power:\t\t"+character.getWeapon().getPower());
    System.out.println("\tArmor Name:\t\t"+character.getArmor().getName());
    System.out.println("\tArmor Defense:\t\t"+character.getArmor().getDefense());
    System.out.println("----------------------------------------------------");
}
public static void check_bag(Character character) {
    System.out.println("-------------------- Bag Status --------------------");
    System.out.println("\tMoney:\t\t\t$"+ character.getBag().getMoney());
    for(int i = 0; i<4; i++) {
        System.out.println("\tWeapon Name/Power:\t"+ character.getBag().getWeaponArray()[i].getName()+" // "+character.getBag().getWeaponArray()[i].getPower());
    }
    for(int i = 0; i<4; i++) {
        System.out.println("\tArmor  Name/Defense:\t"+ character.getBag().getArmorArray()[i].getName()+" // "+character.getBag().getArmorArray()[i].getDefense());
    }
    System.out.println("----------------------------------------------------");
}

}

這是字符類:

import java.util.Random;
import Equipment.*;

public class Character {
    private Armor armor = new Armor();
    private Weapon weapon = new Weapon();
    private Bag bag = new Bag();

    public static String server_name = "CS172";
    public int hp, power, defense, mp, level, skill;
    private String name;
    Random rnd=new Random(); 

    public Character(String name) {
        this.name=name;
        Random rnd=new Random();
        this.hp=rnd.nextInt(500)+1;
        this.power=rnd.nextInt(100)+1;
        this.defense=rnd.nextInt(100)+1;
        this.mp=rnd.nextInt(50)+1;
        this.level=1;
        this.skill=5;
}
    public Character(int hp, int power, String name) {
        this.hp=hp;
        this.power=power;
        this.name=name;
        this.defense=rnd.nextInt(100)+1;
        this.mp=rnd.nextInt(50)+1;
        this.level=1;
        this.skill=5;
}
    public int getHp() {
        return hp;
}
    public void setHp(int hp) {
        this.hp = hp;
}
    public int getPower() {
        return power;
}
    public void setPower(int power) {
        this.power = power;
}
    public int getDefense() {
        return defense;
}
    public void setDefense(int defense) {
        this.defense = defense;
}
    public int getMp() {
        return mp;
}
    public void setMp(int mp) {
        this.mp = mp;
}
    public int getLevel() {
        return level;
}
    public void setLevel(int level) {
        this.level = level;
    }

    public String getName() {
        return name;
}
    public int damage(int enemy_power) {
        int damage = enemy_power - this.defense;
        if(damage<0){ //avoid healing by damage
            damage=0;
}
        this.hp=this.hp - damage;
        if(this.hp<0) { //avoid negative hp
            this.hp = 0;
}
        return damage;
}

    public Armor getArmor() {
    return armor;
}
    public void setArmor(Armor armor) {
        this.armor = armor;
}
    public Weapon getWeapon() {
        return weapon;
}
    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
}
    public int hit_point() {
        int total_power = this.power + this.weapon.getPower();
        return total_power;
    }
    public int useSkill() {
        this.mp=this.mp-1;
        this.skill--;
        this.power =this.power + 30;
        return hit_point();
    }
    public int getSkill() {
        return skill;
    }

    public Bag getBag() {
        return bag;
    }
    public void setBag(Bag bag) {
        this.bag = bag;
    }

    public class Bag{
        Weapon weaponArray[] = new Weapon[4];
        Armor armorArray[] = new Armor[4];
        int money = 150;
        public Bag(){
            for(int i=0; i<weaponArray.length; i++) {
                weaponArray[i] = new Weapon();
                armorArray[i] = new Armor();
            }
        }
        public Weapon[] getWeaponArray() {
            return weaponArray;
        }
        public void setWeaponArray(int yourWeaponIndex, Weapon enemyWeapon) {
            this.weaponArray[yourWeaponIndex] = enemyWeapon;
        }
        public Armor[] getArmorArray() {
            return armorArray;
        }
        public void setArmorArray(int yourArmorIndex, Armor enemyArmor) {
            this.armorArray[yourArmorIndex] = enemyArmor;
        }
//      public void setArmorArray(Armor[] armorArray) {
//          this.armorArray = armorArray;
//      }
        public int getMoney() {
            return money;
        }
        public void setMoney(int money) {
            this.money = money;
        }

    }
}

我正在為一個班級做這個,我們在課堂上和教授一起寫了部分代碼。 我有一種感覺,我應該以某種方式使用它,但我什至不明白它在做什么:

public void setWeaponArray(int yourWeaponIndex, Weapon enemyWeapon) {
                this.weaponArray[yourWeaponIndex] = enemyWeapon;
}

有人可以向我解釋一下嗎?

武器類:

package Equipment;
import java.util.Random;

public class Weapon {
    private String name;
    private int power;
    Random rnd = new Random();
    public Weapon() {
        this.name="Weapon #" + rnd.nextInt(20);
        this.power=rnd.nextInt(50)+1;
}
    public Weapon(String name) {
        this.name=name;
        this.power=rnd.nextInt(50)+1;
}
    public int getPower() {
        return power;
}
    public void setPower(int power) {
        this.power = power;
}
    public String getName() {
        return name;
}

}

裝甲等級:

import java.util.Random;

public class Armor {
    private String name;
    private int defense;
    Random rnd = new Random();
    public Armor() {
        this.name="Armor #"+rnd.nextInt(10);
        this.defense=rnd.nextInt(10)+1;
}
    public Armor(String name) {
        this.name=name;
        this.defense=rnd.nextInt(10)+1;
}
    public int getDefense() {
        return defense;
}
    public void setDefense(int defense) {
        this.defense = defense;
}
    public String getName() {
        return name;
}
}

無需替換整個包數組,只需替換循環中特定索引處的武器即可。

您就快到了...您想要使用的方法正是用於您想要的。 這是一種需要兩件事的方法。 要替換的武器的位置 (yourWeaponIndex) 和替換它的項目 (enemyWeapon)。 您正在替換整個包而不是相關武器的武器循環。

for(int i = 0; i<4; i++) {      //loop through your items one by one
    for(int j = 0; j<4; j++) {      //loop through enemy items one by one

        //compare item 1 to all 4 enemies items (order 16 comparison - 4 x 4 comparisons)
        if(enemies[selected].getBag().getWeaponArray()[j].getPower() > main_ch.getBag().getWeaponArray()[i].getPower()) { //check to see if enemy's weapons have higher power
            //put stronger enemy weapon (j) in your bag
            main_ch.getBag().setWeaponArray(i, enemies[selected].getBag().getWeaponArray()[j]); 
            //put your weaker weapon (i) in enemy bag
            enemies[selected].getBag().setWeaponArray(j, main_ch.getBag().getWeaponArray()[i]); 
            //alert that items have changed
            System.out.println("\t>> You found better weapons! They have been added to your bag.");
        }
    }
}

以興趣和學習為目的

for(int k = 0; k<4; k++) {      //loop through your items one by one
    for(int l = 0; l<4; l++) {          //loop through enemy items one by one

        //compare item 1 to all 4 enemies items (order 16 comparison - 4 x 4 comparisons)
        if(enemies[selected].getBag().getArmorArray()[l].getDefense() > main_ch.getBag().getArmorArray()[k].getDefense()) { //check to see if enemy's armor has higher power
           //put stronger enemy armor in your bag
           main_ch.getBag().setArmorArray(k, enemies[selected].getBag().getArmorArray()[l]); 
           //put your weaker armor in enemy bag
           enemies[selected].getBag().setArmorArray(l, main_ch.getBag().getArmorArray()[k]); 
           //alert that items have changed
           System.out.println("\t>> You found better weapons! They have been added to your bag.");
        }
    }
}

查看工作代碼: https : //onlinegdb.com/rkg3n7ICH

根據您提供的代碼

public void setWeaponArray(int yourWeaponIndex, Weapon enemyWeapon) {
        this.weaponArray[yourWeaponIndex] = enemyWeapon;
    }

此方法使用數組weaponArray[]元素的索引將包的當前武器(這里的對象是包)設置為另一個敵人weaponArray[] 但是,由於您的數組長度為 4,我相信您必須調用 4 次才能制作包中的 4 個武器。

main_ch.getBag().setWeaponArray(enemies[selected].getBag().getWeaponArray());

在這一行中,您沒有指定索引(通常 setWeapon(int yourWeaponIndex, Weapon evilWeapon) 方法有 2 個參數

它應該是這樣的

main_ch.getBag().setWeaponArray(i ,enemies[selected].getBag().getWeaponArray());

i 是要更改的武器的索引。

例子

main_ch.getBag().setWeaponArray(0 ,enemies[selected].getBag().getWeaponArray() );

如果敵人的武器更好,這條線只會改變第一個武器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM