Skip to main content

Hoardomatic Code: Gem Class

Last class. Gems have their own bundle of properties, so they get their own class.

Gem


String gem_name: Name of the gem.
Double val_constant: The value constant for the stone, the V in the(C^2 + C*4) * V value formula.
Double carats: Weight of the gem in carats.

This one is similar to the previous two, but it takes on itself the task of randomly selecting a node from Gems.xml to turn into an object.   

package hoardomatic;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Random;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Gem {

    private String gem_name;
    private Double val_constant;
    private Double carats;
   
    public Gem() {
        // TODO Auto-generated constructor stub
        Node gemnode = getRandomNodeFromTable("Gems.xml");
       
        NodeList tempNodes = gemnode.getChildNodes();
        for (int j = 0; j < tempNodes.getLength(); j++) {
            Node subnode = tempNodes.item(j);

            if (subnode.getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) subnode;
               
                if (element.getNodeName().contentEquals("Gem")) {
                    gem_name = element.getTextContent();
                }

                if (element.getNodeName().contentEquals("V")) {
                    val_constant =Double.parseDouble(element.getTextContent());
                }

            }

        }
       
        double dr = (double) dieRoll(1,6) + dieRoll(1,6);
        double the_carats = dr/4;
       
        int get_big = dieRoll(1,12);
        while (get_big == 12){
            the_carats = the_carats + dieRoll(1,6);
            get_big = dieRoll(1,12);
        }
       
        carats = the_carats;
       
    }
   
   
        public Node getRandomNodeFromTable(String fname) {
           
            Node return_it;
            return_it = null;

            try {
                InputStream items = new FileInputStream(new File(fname));
               
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(items);

                doc.getDocumentElement().normalize();
                // System.out.println(doc.getDocumentElement().getNodeName());
                NodeList nodes = doc.getElementsByTagName("item");
               
                Integer itemlistlen = nodes.getLength();
               
                Integer pickItm = dieRoll(0, itemlistlen - 1);
               
                // System.out.println("==========================");
//                System.out.println(pickItm);

                for (int i = 0; i < nodes.getLength(); i++) {
                    Node node = nodes.item(i);
                    if (i == pickItm) {
                        return_it = node;
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
            return return_it;
        }
   
   
    public Gem(Node gemnode){
       
       
        NodeList tempNodes = gemnode.getChildNodes();
        for (int j = 0; j < tempNodes.getLength(); j++) {
            Node subnode = tempNodes.item(j);

            if (subnode.getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) subnode;
               
                if (element.getNodeName().contentEquals("Gem")) {
                    gem_name = element.getTextContent();
                }

                if (element.getNodeName().contentEquals("V")) {
                    val_constant =Double.parseDouble(element.getTextContent());
                }

            }

        }
       
       
        double the_carats = (dieRoll(1,6) + dieRoll(1,6))/4;
       
        int get_big = dieRoll(1,12);
        while (get_big == 12){
            the_carats = the_carats + dieRoll(1,6);
            get_big = dieRoll(1,12);
        }
       
        carats = the_carats;
       
       
    }
   
    public Double getGemCost(){
        Double return_it = 0.0;
        // (c^2 + 4 x c) ^ v
        return_it = (carats * carats + 4 * carats) * val_constant;
        return return_it;
    }
   
    public String getGemName(){
        return gem_name;
    }
   
    public Double getGemWt(){
        return carats;
    }
   
    private int dieRoll(Integer min, Integer max) {

        Random r = new Random();
        int inroll = r.nextInt(max - min + 1) + min;
        return inroll;
    }


}

Comments

Popular posts from this blog

Writing Historical RPGs, Doing Diversity

For a few years now, I've been seeing things like this and reading pieces elsewhere about apparent conflicts between historical accuracy in historical or pseudo-historical fantasy games and issues of deep interest to some parts (and some potential parts) of the modern gaming audience. I tend to write things which are both connected to history and are written to enable the fantasies of modern people, some of whom have a specific interest in not reproducing problematic parts of the past and present in their recreations, so it's something which touches on stuff that I do. And I think I tend to move and write in circles where this tends not to get much thought or attention even though I write for a game which makes accuracy a priority, so while none of this is new to people who grapple with these issues regularly, I'm thinking maybe I should say something about it to get it into spaces where I work.

So, how do I approach the demands of both accuracy and diversity in the stuff …

The Last Pyramid

Today saw the publication of the final issue of Steve Jackson Games's Pyramid magazine, as was announced several months ago. Broadly speaking, it was the victim of generally rough times within the gaming industry.

I'm one of what is surely a small number of people who have been published in all three iterations of Pyramid. I'd had some previous contact with SJ Games--some stuff I helped with ended up in GURPS Cyberpunk, which in turn has doubtless gotten my name on the Federal Register of Dangerous Hoodlums--but it wasn't until the later days of the paper version of Pyramid that I finally got up the nerve to try my hand at writing an article. The result was a short piece on low-tech (mostly Medieval) economies, which became my first professionally published work.

This, apparently, was enough encouragement. Having seen how painless the process actually was, I started thinking in terms of writing for publication. It didn't hurt that around this time I went to work fo…

Writing GURPS Adventures

Someone over on the forum asked for advice on writing adventures for GURPS. Or more specifically, in context, writing GURPS adventures with an eye towards publication by SJ Games, which is a very different animal. Whatever method and structure you have for writing up adventures for your own use is, of course, the best and you should use it for your own purposes. But we're talking about commerce here, not just art, so this should be thought of as advice on how to do business with a particular publisher, not generally useful advice on how to write adventures.

I need to start by defining a term. SJ Games means something specific by "adventure." As the wish list uses the word, an adventure has a plot, or at least something plot-like in it. It presents a specific problem to solve through a progression of encounters. They are not sandboxes. Sandbox-style adventures, with their multiplicity of possible PC objectives, are, in the terminology of the wish list, locations. There ar…