Beispiel #1
0
  private static void buildCache(String arg) throws Exception {
    System.out.println("Loading map...");

    List<Chunk> chunks = loadChunks(arg);

    Rectangle boundingBox = findBoundingBox(chunks);

    // Convert the chunk bounding box to coordinates bounding box.

    boundingBox =
        new Rectangle(
            boundingBox.getX1() * 16,
            boundingBox.getY1() * 16,
            boundingBox.getX2() * 16,
            boundingBox.getY2() * 16);

    System.out.println(
        "Active bounding box: "
            + boundingBox.getX1()
            + "x"
            + boundingBox.getY1()
            + " "
            + boundingBox.getX2()
            + "x"
            + boundingBox.getY2());

    // Build a map of all blocks located at the target coordinates. We add
    // room to Y.

    System.out.println("Building block cache...");

    BlockMap blockMap = BlockMap.build(chunks, boundingBox, MIN_Y, MAX_Y);

    blockMap.save(new File(CACHE_FILE));
  }
Beispiel #2
0
 public void render(GameContainer container, Graphics g) {
   map.getTmap().render(0, 0);
   // Renders the random landscape objects,which were generated in map.
   ArrayList<Item> objects = map.getObjects();
   for (int i = 0; i < objects.size(); i++) {
     container
         .getGraphics()
         .drawImage(objects.get(i).getImage(), objects.get(i).getX(), objects.get(i).getY());
   }
   if (!finished) {
     ArrayList<Landmark> landmarks = map.getLandmarks();
     for (Landmark landmark : landmarks) {
       g.drawImage(landmark.getImage(), landmark.getTileX(), landmark.getTileY());
     }
     ArrayList<Avatar> avatars = map.getAvatars();
     for (int i = 0; i < avatars.size(); i++) {
       g.drawAnimation(
           avatars.get(i).getImage(), avatars.get(i).getPosX(), avatars.get(i).getPosY());
       if (avatars.get(i).getPosX() / 16 >= 33.0
           && avatars.get(i).getPosX() / 16 <= 36.0
           && avatars.get(i).getPosY() / 16 >= 10.0
           && avatars.get(i).getPosY() / 16 <= 12.0) {
         finished = true;
         winner = avatars.get(i).getName();
       }
     }
     for (int i = 0; i < map.getTmap().getWidth(); i++) {
       g.drawString(String.valueOf(i), i * 16, 0 * 16);
       g.drawString(String.valueOf(i), i * 16, 29 * 16);
     }
     for (int j = 0; j < map.getTmap().getHeight(); j++) {
       g.drawString(String.valueOf(j), 0 * 16, j * 16);
       g.drawString(String.valueOf(j), 39 * 16, j * 16);
     }
   } else {
     map.setFinished(true);
     container.getGraphics().drawString("Game over in " + map.getSteps() + " steps!", 150, 50);
     g.drawString("Winner is " + winner + "!", 150, 60);
   }
 }
Beispiel #3
0
  private static MinedCounter runStrategy(
      BlockMap blockMap, int mineLength, List<Vector> starts, int branchOffset, int branches) {
    MinedCounter mined = new MinedCounter();

    for (Vector start : starts) {
      Miner miner = new Miner(blockMap.clone());

      for (int x = 0; x < branches; x++) {
        Vector currentStart =
            new Vector(start.getX() + x * branchOffset, start.getY(), start.getZ());

        miner.run(currentStart, new Point(0, 1), mineLength);
      }

      //            System.out.println(String.format("Iteration %d", i + 1));
      //            System.out.println(miner.getMined());

      mined.addAll(miner.getMined());
    }

    mined.average(starts.size());

    return mined;
  }
Beispiel #4
0
  @Override
  public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
    g.drawImage(backgroundImage, 0, 0);
    // Render the map
    map.getTiledMap().render(0, 0, 1);

    // draw the character
    //	g.drawAnimation(player.getAnimation(), player.getXPos(), player.getYPos());

    // we should probably have a player.render method that takes gc, sbg, and g as args, then draws
    // the player
    // it would also call the weapon's render method
    g.drawImage(player.getSprite(), player.getXPos(), player.getYPos());
    // draw the projectiles on screen
    for (Projectile shot : player.getProjectileList()) {
      g.draw(shot.projShape);
    }

    if (activeEnemyList != null) {
      for (Enemy enemy : activeEnemyList) {
        g.drawImage(enemy.getSprite(), enemy.getXPos(), enemy.getYPos());
      }
    }
  }
Beispiel #5
0
  public static void main(String[] args) throws Exception {
    File cacheFile = new File(CACHE_FILE);
    if (!cacheFile.exists()) {
      System.out.println("Building cache file");
      buildCache(args[0]);
    }

    System.out.println("Loading cache file...");

    BlockMap blockMap = BlockMap.load(cacheFile);

    final int iterations = 10;
    final int mineLength = 1000;

    List<Vector> starts = new ArrayList<>();
    Map<Block, Table> tables = new HashMap<>();

    for (int y = 9; y <= 13; y++) {
      System.out.println();
      System.out.println("Depth: " + y);
      System.out.println();

      for (int i = 0; i < iterations; i++) {
        starts.add(
            new Vector(
                blockMap.getOffset().getX() + 50 + RANDOM.nextInt(blockMap.getCx() - 100),
                y,
                blockMap.getOffset().getZ()
                    + 50
                    + RANDOM.nextInt(blockMap.getCz() - 100 - mineLength)));
      }

      MinedCounter mined = runStrategy(blockMap, mineLength, starts, 0, 1);

      //            System.out.println(mined);

      System.out.println(
          String.format(
              "Single branch: %s: %.1f, %s: %.1f",
              Blocks.DIAMOND_ORE.getName(),
              mined.get(Blocks.DIAMOND_ORE),
              Blocks.LAVA.getName(),
              mined.get(Blocks.LAVA)));

      for (MinedCounter.Entry entry : mined.entrySet()) {
        getTable(tables, entry).set(Integer.toString(y), "Single branch", entry.getValue());
      }

      final int branches = 4;

      for (int branchDistance = 2; branchDistance <= 7; branchDistance++) {
        //                System.out.println("Running strategy x+" + branchDistance + "+" +
        // branchDistance + " at " + y);

        mined = runStrategy(blockMap, mineLength, starts, branchDistance, branches);
        mined.average(branches);

        //            System.out.println(mined);

        System.out.println(
            String.format(
                "Strategy x+%d: %s: %.1f, %s: %.1f",
                branchDistance,
                Blocks.DIAMOND_ORE.getName(),
                mined.get(Blocks.DIAMOND_ORE),
                Blocks.LAVA.getName(),
                mined.get(Blocks.LAVA)));

        for (MinedCounter.Entry entry : mined.entrySet()) {
          getTable(tables, entry)
              .set(
                  Integer.toString(y),
                  String.format("Strategy x+%d", branchDistance),
                  entry.getValue());
        }
      }
    }

    try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("out.txt"))) {
      OutputWriter ow = new OutputWriter(writer);

      for (Map.Entry<Block, Table> entry : tables.entrySet()) {
        ow.write(entry.getKey().getName());
        ow.nl();
        entry.getValue().write(ow);
        ow.nl();
      }
    }
  }
Beispiel #6
0
  public void startContainer() throws SlickException {
    // ----------JADE start
    // Get a hold of JADE runtime
    Runtime runtime = Runtime.instance();
    // Create a default profile
    ProfileImpl profile = new ProfileImpl();
    // Create a new non-main container, connecting to the default
    // main container (i.e. on this host, port 1099)
    ContainerController cc = runtime.createMainContainer(profile);
    AgentController rma = null;
    AgentController player1 = null;
    AgentController player2 = null;
    AgentController player3 = null;
    AgentController player4 = null;
    ArrayList<AgentController> landmarks = new ArrayList<AgentController>();
    Object[] arguments = new Object[3];
    arguments[0] = this.map;
    arguments[1] = "team1-luffy";
    arguments[2] = map.getAvatars().get(1);
    Object[] argumentsChief = new Object[3];
    argumentsChief[0] = this.map;
    argumentsChief[1] = "team1-luffy";
    argumentsChief[2] = map.getAvatars().get(0);
    Object[] arguments2 = new Object[3];
    arguments2[0] = this.map;
    arguments2[1] = "team2-roronoa";
    arguments2[2] = map.getAvatars().get(2);
    Object[] argumentsChief2 = new Object[3];
    argumentsChief2[0] = this.map;
    argumentsChief2[1] = "team2-roronoa";
    argumentsChief2[2] = map.getAvatars().get(3);
    try {
      rma = cc.createNewAgent("rma", "jade.tools.rma.rma", null);
      player1 =
          cc.createNewAgent(
              ((Avatar) arguments[2]).getName(), "agents.TickerExplorerRandomPlayer", arguments);
      player2 =
          cc.createNewAgent(
              ((Avatar) arguments2[2]).getName(), "agents.TickerExplorerRandomPlayer", arguments2);
      player3 =
          cc.createNewAgent(
              "Chiefteam1-luffy", "agents.TickerExplorerRandomPlayer", argumentsChief);
      player4 =
          cc.createNewAgent(
              "Chiefteam2-roronoa", "agents.TickerExplorerRandomPlayer", argumentsChief2);
      for (int i = 0; i < map.getLandmarks().size(); i++) {
        Object[] landmarkArgs = new Object[4];
        landmarkArgs[0] = "Landmark" + i;
        landmarkArgs[1] = this.map;
        landmarkArgs[2] = map.getLandmarks().get(i);
        landmarkArgs[3] = map.getLandmarks().get(i).getMessage();
        landmarks.add(
            cc.createNewAgent(
                map.getLandmarks().get(i).getName(), "agents.LandmarkAgent", landmarkArgs));
      }
      System.out.println("Agent created \n");

    } catch (StaleProxyException ex) {
      System.out.println("here is problem");
    }
    try {
      // rma.start();
      player1.start();
      player2.start();
      player3.start();
      player4.start();
      for (int i = 0; i < map.getLandmarks().size(); i++) {
        landmarks.get(i).start();
      }
      System.out.println("Agent started \n");
    } catch (StaleProxyException ex) {
      System.out.println("Stale Proxy pointer ex");
    } catch (NullPointerException ex) {
      System.out.println("Null pointer ex");
      ex.printStackTrace();
    }
    //	            //----------JADE end
  }
Beispiel #7
0
  @Override
  public void update(ParticleSystem system, int delta) {
    int cx = (int) cameraSystem.getOffsetX();
    int cy = (int) cameraSystem.getOffsetY();

    timer -= delta;

    if (timer <= 0) {
      timer = interval;

      int rowLowerBound =
          Math.max(0, (cy > 0 ? 0 : Math.abs(cy / blockMap.getBlockDepth()) - 1) - 5);
      int rowUpperBound =
          Math.min(
              blockMap.getDepth(),
              Math.abs(cy / blockMap.getBlockDepth())
                  + 1
                  + container.getHeight() / blockMap.getBlockDepth()
                  + 1
                  + blockMap.getHeight()
                  + 5);

      int columnLowerBound =
          Math.max(0, (cx > 0 ? 0 : Math.abs(cx / blockMap.getBlockWidth()) - 2) - 5);
      int columnUpperBound =
          Math.min(
              blockMap.getWidth(),
              Math.abs(cx / blockMap.getBlockWidth())
                  + 1
                  + container.getWidth() / blockMap.getBlockWidth()
                  + 2
                  + 5);

      int sy = rowLowerBound + (int) (Math.random() * (rowUpperBound - rowLowerBound - 1));
      int sx = columnLowerBound + (int) (Math.random() * (columnUpperBound - columnLowerBound - 1));

      boolean foundTree = false;

      for (int j = sy; !foundTree && j < rowUpperBound; ++j) {
        for (int i = sx; !foundTree && i < columnUpperBound; ++i) {
          if (blockMap.dataPackage.trees[i][j] > 0) {
            foundTree = true;

            Particle p = system.getNewParticle(this, 3000);
            p.setImage(
                AssetManager.getInstance()
                    .getImage(
                        "tree-particle-"
                            + Integer.toString((int) ((float) Math.random() * 100) % 3 + 1)));
            double r = Math.random();

            p.setColor(1, 1, 1, 0);
            p.setSize(50);
            p.setVelocity(
                (float) Math.cos(r * (float) Math.PI / 4.0f),
                (float) Math.sin(r * (float) Math.PI / 4.0f),
                0.3f);
            p.setOriented(true);

            r = (float) Math.random() * 300.0f;
            float a = (float) (Math.random() * 2.0 * Math.PI);
            int height =
                Math.max(
                    1,
                    (int)
                        (blockMap.dataPackage.heightMap[j][i] * blockMap.dataPackage.getHeight()));

            p.setPosition(
                i * blockMap.getBlockWidth() - 30,
                j * blockMap.getBlockDepth()
                    - (blockMap.getTowerHeight(i, j) + 1) * blockMap.getBlockHeight());
          }
        }
      }
    }
  }