Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Searching for suitable data structure in Java [closed]

Tags:

java

We are working on a game and looking to develop a functionality which will allow us to mix various items in a manner similar to "alchemy" game. The main idea is that we have a number of elements, which can be split into three groups: basic, intermediate and final. Basic resources can be merged together and make an intermediate resource, intermediate resources can be merged with intermediate and basic resources and make final and so on.

So, we are thinking about having 2 HashMaps: one would have a indicate what each resource is combinable with, second one would map what each resource would be made of. Is there a better way to do this? Any data structure that we are not aware of?

Thanks

like image 774
El_o.di Avatar asked Mar 24 '23 08:03

El_o.di


2 Answers

Just write your own Datastructure like this

public class Element {
 enum Type{BASIC, INTERMEDIATE, FINAL};
 private Type type;
 private String name;
 private List<Element> combinable;
}
like image 89
Lukas Eichler Avatar answered Apr 26 '23 05:04

Lukas Eichler


What you want is an enum containing all your elements, with a couple of methods. Here is an example, feel free to use it if it suites your needs.
If desired, you can also make a second enum for Type (as Templar suggested) and add it as a field in you Element enum.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public enum Element {
    //Example instances, replace with what is appropriate for your game.
    WATER, // Basic
    WOOD, // Basic
    IRON, // Basic
    STONE, // Basic
    FIRE, // Basic
    CARBON(WOOD, FIRE), //Intermediate
    FORGE(STONE, IRON), // Intermediate
    STEEL(FORGE, IRON); // Final

    private Element[] parts;

    private Element() {
        //instantiates parts to prevent NullPointerException
        this.parts = new Element[0];
    }

    private Element(Element... parts) {
        this.parts = parts;
    }

    /**
     * return all the parts of this Element.
     * @return
     */
    public List<Element> getParts() {
        return Arrays.asList(parts);
    }

    /**
     * find all elements that have this Element listed as one of their parts.
     * 
     * @param part
     * @return
     */
    public List<Element> getComposites() {
        List<Element> composites = new ArrayList<Element>();
        // Iterate through all Elements
        for (Element composite : Element.values()) {
            // Iterate through each Element's parts
            for (Element part : composite.parts) {
                // If the element has a part equal to the argument,
                // Add the element to the list of composites.
                if (part == this) {
                    composites.add(composite);
                }
            }
        }

        return composites;
    }

}
like image 24
James Dunn Avatar answered Apr 26 '23 03:04

James Dunn