Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.arkazex.terrain.HGEN2;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.util.Random;
- import java.util.Scanner;
- import javax.imageio.ImageIO;
- public class Main {
- private static long seed;
- private static long seed2;
- private static int mshift;
- private static int dimx;
- private static int dimy;
- private static int[][] map;
- private static long[] seeds;
- private static int[] offset;
- public static void main(String[] args) {
- //Collect values
- Scanner in = new Scanner(System.in);
- System.out.print("Enter first seed: ");
- seed = in.nextLong();
- System.out.print("Enter second seed: ");
- seed2 = in.nextLong();
- System.out.print("Enter Maximum shift: ");
- mshift = in.nextInt();
- System.out.print("Enter dimension X: ");
- dimx = in.nextInt();
- System.out.print("Enter dimension Y: ");
- dimy = in.nextInt();
- map = new int[dimx][dimy];
- seeds = new long[dimy];
- offset = new int[dimy];
- System.out.println("Generating seed map...");
- generateSeeds();
- System.out.println("Generating initial terrain...");
- generateInitialTerrain();
- System.out.println("Generating offsets...");
- generateStartingOffset();
- System.out.println("Generating layers...");
- for(int i = 1; i < dimy; i++) {
- generateLayer(i);
- }
- System.out.println("Finishing...");
- finish();
- in.close();
- System.out.println("Complete!");
- }
- private static void generateSeeds() {
- Random rand = new Random(seed);
- for(int i = 1; i < dimy; i++) {
- seeds[i] = rand.nextLong();
- }
- }
- private static void generateInitialTerrain() {
- int last = 0;
- Random rand = new Random(seed2);
- map[0][0] = 0;
- for(int i = 0; i < dimx; i++) {
- int off = rand.nextInt(mshift);
- boolean flip = rand.nextBoolean();
- if(flip) {
- off = 0 - off;
- }
- last = last + off;
- if(last > 255) {
- last = 255;
- }
- if(last < 0) {
- last = 0;
- }
- map[i][0] = last;
- }
- }
- private static void generateStartingOffset() {
- int last = 0;
- Random rand = new Random(seeds[0]);
- for(int i = 0; i < dimy; i++) {
- int off = rand.nextInt(mshift);
- boolean flip = rand.nextBoolean();
- if(flip) {
- off = 0 - off;
- }
- last = last + off;
- if(last > 255) {
- last = 255;
- }
- if(last < 0) {
- last = 0;
- }
- offset[i] = last;
- }
- }
- private static void generateLayer(int x) {
- int last = offset[x];
- int res = 0;
- Random rand = new Random(seeds[x]);
- for(int i = 0; i < dimx; i++) {
- boolean valid = false;
- while(!valid) {
- int off = rand.nextInt(mshift);
- boolean flip = rand.nextBoolean();
- if(flip) {
- off = 0 - off;
- }
- res = last + off;
- if(!(res > map[i][x - 1] + mshift || res < map[i][x - 1] - mshift)) {
- valid = true;
- }
- }
- last = res;
- if(last > 255) {
- last = 255;
- }
- if(last < 0) {
- last = 0;
- }
- map[i][x] = last;
- }
- }
- private static void finish() {
- BufferedImage image = new BufferedImage(dimx, dimy, BufferedImage.TYPE_INT_RGB);
- for(int x = 0; x < dimx; x++) {
- for(int y = 0; y < dimy; y++) {
- image.setRGB(x, y, getRGB(map[x][y]));
- }
- }
- File file = new File("Output.png");
- try {
- file.createNewFile();
- ImageIO.write(image, "png", file);
- } catch (IOException e) {
- System.out.println("Failed to save image");
- }
- }
- private static int getRGB(int value) {
- String raw = null;
- try {
- String hex = Integer.toHexString(value);
- if(hex.length() == 1) {
- hex = 0 + hex;
- }
- raw = "0xFF" + hex + hex + hex;
- } catch (Exception e) {
- }
- return castLong(Long.decode(raw));
- }
- public static int castLong(long value) {
- return (int) value;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement