Skip to content

Instantly share code, notes, and snippets.

@dmamills
Created December 5, 2012 01:56
Show Gist options
  • Save dmamills/4211376 to your computer and use it in GitHub Desktop.
Save dmamills/4211376 to your computer and use it in GitHub Desktop.
Randomly generated minecraft esque textures using a simple noise method
package wee;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageGenerator implements Runnable {
final String TITLE = "RADICAL";
final int WIDTH = 200;
final int HEIGHT = 150;
JFrame f;
Canvas canvas;
BufferStrategy bufferStrategy;
public ImageGenerator() {
f = new JFrame(TITLE);
JPanel panel = (JPanel)f.getContentPane();
panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
panel.setLayout(null);
canvas = new Canvas();
canvas.setBounds(0,0,WIDTH,HEIGHT);
canvas.setIgnoreRepaint(true);
panel.add(canvas);
canvas.addMouseListener(new MouseHandler());
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setResizable(false);
f.setVisible(true);
canvas.createBufferStrategy(2);
bufferStrategy = canvas.getBufferStrategy();
canvas.requestFocus();
rdm = new Random();
}
long fps = 80;
long deltaDesired = (1000*1000*1000)/fps;
boolean running = true;
@Override
public void run() {
brick = createNewImage();
long beginLoop;
long endLoop;
long currentTime = System.nanoTime();
long lastUpdate;
long delta;
while(running) {
beginLoop = System.nanoTime();
render();
lastUpdate = currentTime;
currentTime = System.nanoTime();
update((int)(currentTime - lastUpdate)/(1000*1000));
endLoop = System.nanoTime();
delta = endLoop - beginLoop;
if(delta < deltaDesired) {
try {
Thread.sleep((deltaDesired - delta)/(1000*1000));
} catch (Exception e) { }
}
}
}
private class MouseHandler implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1) {
d++;
brick = createNewImage();
System.out.println("New Image");
} else if(e.getButton() == MouseEvent.BUTTON3) {
System.out.println("SavedImage");
try {
File outputFile = new File("savedimage"+d+".png");
ImageIO.write(brick,"png",outputFile);
} catch (IOException ex) { ex.printStackTrace();}
}
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
int d = 0;
int ticker = 0;
final int TICKER_MAX = 500;
Color c;
BufferedImage brick;
Random rdm;
int br = 0;
int iw = 16;
int ih = 16;
protected void update(int delta) { }
public BufferedImage createNewImage() {
BufferedImage r = new BufferedImage(iw,ih,BufferedImage.TYPE_INT_RGB);
c = new Color(rdm.nextInt(0xFFFFFF));
for(int x =0; x < iw;x++) {
for(int y =0; y < ih;y++) {
br = 255 - ((rdm.nextInt(200)) | 0);
int tc = c.getRGB();
int fc;
fc = ((( tc >> 16) & 0xFF) * br / 255) << 16 |
(((tc >> 8) & 0xFF) * br / 255) << 8 |
(((tc)& 0xFF)*br/255);
r.setRGB(x, y, fc);
}
}
return r;
}
private void render() {
Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
g.clearRect(0, 0, WIDTH, HEIGHT);
render(g);
g.dispose();
bufferStrategy.show();
}
protected void render(Graphics2D g) {
g.drawString("d:"+d,5,10);
g.drawString("br: "+br,40,10);
g.drawImage(brick, 20,20, 160, 160, null);
g.drawImage(brick,185,100,null);
}
public static void main(String[] args) {
ImageGenerator ig = new ImageGenerator();
new Thread(ig).start();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment