广泛的符号/方法/可变混淆

时间:2012-04-26 19:06:55

标签: java

我正在开发一个创建简单的基于文本的冒险游戏的项目。这有点复杂,但游戏中基本上有八个房间,每个房间都有一个特定的项目。您只能根据房间在某些方向移动,目标是到达最后一个房间。我有一个名为Item的类,一个名为Room的类,然后是主Game类。

无论如何,我在使用checkForItem和drop方法时遇到了一些麻烦。我必须检查我的itemsHeld ArrayList以查找某个项目,但每当我输入“item”时它表示找不到符号项。我的drop方法也出现了类似的问题。有什么建议?这是(非常冗长的)代码。

    import java.util.ArrayList;

    public class Game
    {
        private ArrayList<Item> itemsHeld = new ArrayList<Item>();
        private Room planetHarvest;
        private Room planetReach;
        private Room alphaHalo;
        private Room newMombasa;
        private Room deltaHalo;
        private Room voi;
        private Room theArk;
        private Room forerunnerShieldWorld;
        private Item DMR;
        private Item Launcher;
        private Item Shotgun;
        private Item Health;
        private Item Key;
        private Room currentLocation;
        private String msg;

        public Game(){
            createRooms();
            ArrayList<Item> itemsHeld = new ArrayList<Item>(0);
            currentLocation = planetHarvest;
        }

        private void createRooms(){
            DMR = new Item("DMR", "The Designated Marksman Rifle fires a medium-range shot that defeats one enemy at a time.",
            10, false);
            Launcher = new Item("Launcher", "The rocket launcher fires a long-range rocket that defeats two enemies at a time.",
            30, false);
            Shotgun = new Item("Shotgun", "The shotgun fires a short-range buckshot blast that defeats one enemy at a time.",
            10, false);
            Health = new Item("Health", "The health pack heals you if you've been attacked.", 10, true);
            Key = new Item("Key", "The Key is the secret to saving the galaxy.", 10000, false);

            planetHarvest = new Room("a farming colony at the edge of human-controlled space. Though usually quiet, it has now been disturbed by an invasion from extraterrestrials who call themselves the Covenant. The Covenant will not let you escape without a fight.", DMR);
            planetReach = new Room("twenty-seven years in the future. The Covenant has invaded every human colony world and bombarded each one with plasma, reducing the surface to molten glass. Planet Reach is the only human colony that remains. The aliens know their campaign to exterminate humanity is almost over and they show it in their ferocity on the battlefield.", Launcher);
            alphaHalo = new Room("a strange, alien, planet-sized ring following your escape from the doomed planet Reach. The inside of the mysterious non-Covenant hoop structure has continents, oceans, ecosystems, breathable atmosphere – and two relentless foes. The Covenant has arrived; so has the Flood, a terrifying alien parasite that will eat both you and the Covenant. On top of that, you learn that this Halo is not just a habitat but also a weapon that will destroy all life in the galaxy if you don’t stop it.", Key);
            newMombasa = new Room("an African city on Earth, humanity's last safe haven in the universe. A Covenant invasion force has landed. You’ll need to fend them off and follow them to wherever they’re headed next.", Health);
            deltaHalo = new Room("where the Covenant and the Flood are already waiting. The same rules from Alpha Halo apply here, but now you learn that there are a total of eleven Halos and that the only way to stop them all is to shut them down from a structure outside the galaxy called the Ark. Meanwhile, the Covenant is still attacking Earth.", Key);
            voi = new Room("The Flood has arrived and is infecting humans and aliens; meanwhile, the Covenant is in civil war and some of the aliens are helping you. Following your escape from Delta Halo, all of the Halos in the galaxy have been put on standby, so if you don’t find the Ark soon then it’s the end of life as we know it.", Shotgun);
            theArk = new Room("a massive installation many times bigger than even a Halo. Shutting down the Ark will mean saving the galaxy. However, most of the Covenant and the Flood are still after you. Finish the fight.", Key);
            forerunnerShieldWorld = new Room("an artificial planet made by a super-advanced alien civilization that disappeared 100,000 years ago – the makers of the Halos and the Ark. The war against the Covenant is finally over, the Flood has been defeated, and the galaxy is safe. The mysteries of the Forerunners, however, are just beginning to be unraveled.");

            planetHarvest.addNeighbor("Slipspace Forward", planetReach);

            planetReach.addNeighbor("Slipspace Out", alphaHalo);

            alphaHalo.addNeighbor("Slipspace Back", planetReach);
            alphaHalo.addNeighbor("Slipspace Forward", newMombasa);

        newMombasa.addNeighbor("Slipspace Out", deltaHalo);
        newMombasa.addNeighbor("Forward", voi);

        deltaHalo.addNeighbor("Slipspace Back", newMombasa);

        voi.addNeighbor("Slipspace Out", theArk);
        voi.addNeighbor("Back", newMombasa);

        theArk.addNeighbor("Slipspace Unknown", forerunnerShieldWorld);
    }

    private void setWelcomeMessage(){
        msg = "You are John-117, an augmented soldier fighting for Earth and its colonies in the year 2552. You battle the Covenant, an alien religious alliance, and the Flood, an alien parasite that infects both humans and Covenant and turns them into zombies. Your battles take you to planetary colonies like Harvest and Reach, ancient alien ring-worlds called Halos, futuristic cities in Africa, and the Halos’ control station called the Ark, located outside the galaxy. The goal of the game is to defeat all enemies and make it to the safety of the Forerunner Shield World.";
    }

    public String getMessage(){
        return msg;
    }

    public void help(){
        msg = "Every place you enter is crawling with Covenent and/or Flood. You'll have to neutralize them before they neutralize you. As a Reclaimer, you're the only one who can use Keys on a Halo or Ark. Some places involve more than one mission.";
    }

    public void look(){
        msg = currentLocation.getLongDescription();
    }

    public void move (String direction){
        Room nextRoom = currentLocation.getNeighbor(direction);
        if (nextRoom == null){
            msg = "You can't go there.";
        }else{
            currentLocation = nextRoom;
            msg = currentLocation.getLongDescription();
        }
    }

    public void list(){
        if(itemsHeld != null){
            msg += itemsHeld;
        }else{
            msg = "You are not holding anything.";
        }
    }

    public boolean gameOver(){
        if(currentLocation == forerunnerShieldWorld){
            msg = "You defeated the Covenant and survived the war. You won!";
        }
        return false;
    }

    public void pickup(){
        if(currentLocation.hasItem()){
            if(currentLocation.getItem().getWeight() < 50){
                msg = "You are now holding the" + currentLocation.getItem().getName();
                itemsHeld.add(currentLocation.getItem());
                currentLocation.removeItem();
            }else{
                msg = "This item is too heavy to pick up.";
            }
        }else{
            msg = "There is no item to pick up.";
        }
    }

     private Item checkForItem (String name){
         if(itemsHeld.contains(name)){
             return ();
         }else{
             return null;
         }
     }

    public void drop (String item){
        if(itemsHeld.contains(item)){
            itemsHeld.remove(item);
            currentLocation.addItem;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在这种情况下,

Item是类型。不是变量名,这是你想要的。您有几个Item类型的变量,但没有变量名为 item。

此外,您没有名为itemsHeld的字段。在构造函数中,您使用该名称创建一个局部变量,但未定义该类上该名称的变量。

添加

private ArrayList<Item> itemsHeld

到你的字段声明,并在构造函数中执行

itemsHeld = new ArrayList<Item>(0);

初始化它。

或者只是做

private List<Item> itemsHeld = new ArrayList<Item>(0);

在您的字段声明......

答案 1 :(得分:0)

    if(!PlayerLocation.hasItem()){
        msg = "The player does not have that Item";
    }

    if(PlayerLocation.hasItem()){
        for(Item lookfor: ItemsHeld){
            String result = lookfor.getName();
            if(result.contains(PlayerLocation.getItem().getName())){
                msg = "The room already has an item " + 
                PlayerLocation.getItem().getName() +
                ".";
            }
        }
    }
    else {

        for(Item lookfor: ItemsHeld){
            String result = lookfor.getName();

            if(result.contains(name)){
                dropped = lookfor;
                ItemsHeld.remove(lookfor);
                PlayerLocation.addItem(dropped);
                msg = "the player has successfully" +
                "dropped the item in the room";
            }
        }
    }

如果我们有相同的java老师,请点击,但我正在谷歌上搜索 并浏览互联网以获得一些答案,并提出了你的问题。

采矿方法适用于丢弃物品;但是,如果数组列表为空,我正在对我的代码进行取消对,并且没有任何项目。