java - 如何使用另一个类的变量?

标签 java

我正在创建一个迷宫游戏。为此我创建了 4 个单独的类文件。我想知道如何在 Player.class move() 方法中访问 Maze.class 的囚犯,不仅读取它,还添加到它并覆盖它:

迷宫.类

package y1;

import java.util.*;

@SuppressWarnings(value = "all")

public class Maze {
private Room entry;
private Map <Room, ArrayList<Player>> inmates=new HashMap<Room,ArrayList<Player>>();
/**
 * 
 * @param r The room that is going to be the entry
 */
public void setEntry(Room r){
    this.entry=r;
    }
/**
 * 
 * @return Returns the entry room
 */
    public Room getEntry(){
        return this.entry;
    }
    /**
     * Method adds a player to the maze
    * @param p Player to be added to the maze
    */
    public void addPlayer(Player p){
        ArrayList<Player> players=new ArrayList<Player>();
        p.setRoom(getEntry());
        if (this.inmates.isEmpty()==true){
        players.add(p);
        this.inmates.put(this.entry,players);
        }
        else{
        players=this.inmates.get(this.entry);
        players.add(p);
        }

        this.inmates.put(p.getRoom(), players);

    }
    public void getPlayers(Room r){
        if(this.inmates.get(r)!=null){
        System.out.println(Arrays.asList(this.inmates.get(r)));
        }
        else{
        System.out.println("Ruum on tühi");

        }
    }
    public Map getInmates(){
        return this.inmates;
    }
}

房间.class

package y1;

import java.util.*;

@SuppressWarnings(value = "all")
public class Room {

private String name;
private Room north;
private Room east;
private Room west;
private Room south;
private boolean isExit = false;
private boolean isPortal = false;
private Maze maze;

/**
 * @return Returns the name of the room
 */
public String getName() {
    return this.name;
}

/**
 * Sets room name
 * 
 * @param name
 */
public void setName(String name) {
    this.name = name;
}

/**
 * Gets northern room if any
 * 
 * @return pointer to northern room if any, otherwise <code>null</code>
 */
public Room getNorth() {
    return this.north;
}

/**
 * Sets the door to the next room to the north in that room and in the other
 * room sets southern door as connecting back to that room
 * 
 * @param otherRoom
 */
public void setNorth(Room otherRoom) {
    this.north = otherRoom;
    otherRoom.south = this;
}
public Room getSouth() {
    return this.south;
}

/**
 * Sets the door to the next room to the south in that room and in the other
 * room sets northern door as connecting back to that room
 * 
 * @param otherRoom
 */
public void setSouth(Room otherRoom) {
    this.south = otherRoom;
    otherRoom.north = this;
}
public Room getEast() {
    return this.east;
}

/**
 * Sets the door to the next room to the east in that room and in the other
 * room sets western door as connecting back to that room
 * 
 * @param otherRoom
 */
public void setEast(Room otherRoom) {
    this.east = otherRoom;
    otherRoom.west = this;
}
public Room getWest() {
    return this.west;
}

/**
 * Sets the door to the next room to the west in that room and in the other
 * room sets eastern door as connecting back to that room
 * 
 * @param otherRoom
 */
public void setWest(Room otherRoom) {
    this.west = otherRoom;
    otherRoom.east = this;
}
/**
 * Returns the room in the given direction
 * 
 * @param Which way to move?
 * @return The room in that direction.
 */
public Room get(String direction){
    Room dir=this;
    if(direction=="N" && this.north!=null){
        dir=dir.getNorth();
        return dir;
    }
    else if(direction=="W" && this.west!=null){
        dir=dir.getWest();
        return dir;
    }
    else if(direction=="E" && this.east!=null){
        dir=dir.getEast();
        return dir;
    }
    else if(direction=="S" && this.south!=null){
        dir=dir.getSouth();
        return dir;
    }
    else{
        return dir;
    }


}
/**
 * Returns the room that givens coordinates point to
 * 
 * @param dirlist List of directions
 * @return returns Returns the room it stops in
 */
public Room get(List<String> dirlist){
    Room dir=this;
    if (validate(dirlist)==true){
        for(int i=0;i<dirlist.size();i++){
            if(dirlist.get(i)=="N"){
                dir=dir.getNorth();
            }
            else if(dirlist.get(i)=="W"){
                dir=dir.getWest();
            }
            else if(dirlist.get(i)=="E"){
                dir=dir.getEast();
            }
            else if(dirlist.get(i)=="S"){
                dir=dir.getSouth();
            }
        }
    }
    return dir;     
}


/**
 * creates a new room to the north and connects back to this room
 * 
 * @param toa nimi
 *            0
 * @return uus tuba
 */
public Room createNorth(String name) {
    Room otherRoom = null;

    // Creates new room only when no room lies ahead in this direction
    if (this.getNorth() == null) { // Checks north - if nothing there then new room is create
        otherRoom = new Room(); // Creates new room
        this.setNorth(otherRoom); // Creates door between rooms
        otherRoom.setName(name); // Names the room

    } else { // If room already exists then prints alert message
        System.out.println("Room already exist!");
    }

    return otherRoom;
}
public Room createSouth(String name) {
    Room otherRoom = null;
    if (this.getSouth() == null) {
        otherRoom = new Room();
        this.setSouth(otherRoom); 
        otherRoom.setName(name);

    } else {
        System.out.println("Room already exists!");
    }

    return otherRoom;
}
public Room createEast(String name) {
    Room otherRoom = null;
    if (this.getEast() == null) {
        otherRoom = new Room();
        this.setEast(otherRoom);
        otherRoom.setName(name);

    } else {
        System.out.println("Room already exists!");
    }

    return otherRoom;
}
public Room createWest(String name) {
    Room otherRoom = null;
    if (this.getWest() == null) {
        otherRoom = new Room();
        this.setWest(otherRoom);
        otherRoom.setName(name);

    } else {
        System.out.println("Room already exists!");
    }

    return otherRoom;
}
public void setExit(){
    this.isExit=true;
}

public void setPortalA(){
    this.isPortal=true;
}
public boolean validate(List<String> pathList){
    Room check = this;
    boolean value=false;
    for(int i = 0;i<pathList.size();i++){
        if(pathList.get(i)=="N" && check.north!=null){
            check=check.north;
            value=true;
        }
        else if(pathList.get(i)=="S" && check.south!=null){
            check=check.south;
            value=true;
        }
        else if(pathList.get(i)=="W" && check.west!=null){
            check=check.west;
            value=true;
        }
        else if(pathList.get(i)=="E" && check.east!=null){
            check=check.east;
            value=true;
        }
        else{ 
            value = false;
            System.out.println("Can't move in the given directions!");
        }
    }
    return value;       
}

@Override
public String toString() {
    return this.getName();
}

}

和Player.class

package y1;

import java.util.*;

public class Player {
private String name;
private Room location;

public void setRoom(Room r){
    this.location=r;
}
public Room getRoom(){
    System.out.println(this.name+" is at " +this.location);
    return this.location;

}


public Room move(String dir){
    Player p=this;
    if(dir=="N" && this.location.getNorth()!=null){
        p.location=p.location.getNorth();
    }
    else if(dir=="S" && this.location.getSouth()!=null){
        p.location=p.location.getSouth();
    }
    else if(dir=="W" && this.location.getWest()!=null){
        p.location=p.location.getWest();
    }
    else if(dir=="E" && this.location.getEast()!=null){
        p.location=p.location.getEast();
    }
    else{
        System.out.println("There's a wall in the way!");
    }
    return this.location;   
}
public Room move(List<String> dirList){
    Player player=this;
        for(int i=0 ; i<dirList.size() ; i++){
            if(dirList.get(i)=="N" && player.location.getNorth()!=null){
                player.location=player.location.getNorth();
            }
            else if(dirList.get(i)=="S" && player.location.getSouth()!=null){
                player.location=player.location.getSouth();
            }
            else if(dirList.get(i)=="W" && player.location.getWest()!=null){
                player.location=player.location.getWest();
            }
            else if(dirList.get(i)=="E" && player.location.getEast()!=null){
                player.location=player.location.getEast();
            }   
            else{
                System.out.println("Wall in the way. Stopping!");
                break;
            }
        }
    return this.location;   
}

public void setName(String n){
    this.name=n;
}


@Override
public String toString() {
    return this.name;
}

}

最佳答案

您需要创建修饰符方法,例如

public void resetInmates(){
    this.inmates = new Map();
}

public void addInmate( Room r, ArrayList<Player> players ){
}

public void removeInmate( Room r ){
}

等等

关于java - 如何使用另一个类的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525092/

相关文章:

java - 将 Clojure 夹在 Java 与 Leiningen 之间

java - 在 multiautocompletetextview 中输入双空格来替换逗号

java - 获取 Bukkit 中相对于某个方 block 以及相对于玩家方向的方 block

java - 将文件名与今天的日期相结合

java - 将具有本地依赖的 Maven 项目部署到 WildFly

java - 调试为字符串设置的 "Watch",charAt(0) 的值很奇怪

java - 访问扩展另一个类的类外部的变量

java - 启动创意时出错。无法加载 JVM DLL C :\Program Files\Java\jdk1. 8.0_112

java - 在对象中保存 session 属性(Java)

java - 将自定义 Java 对象写入 Parquet