Created
December 5, 2012 01:56
-
-
Save dmamills/4211376 to your computer and use it in GitHub Desktop.
Randomly generated minecraft esque textures using a simple noise method
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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