A simple Game of Life implementation in Java
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
2.7 KiB

  1. import java.awt.Canvas;
  2. import java.awt.Dimension;
  3. import java.awt.Graphics;
  4. import java.awt.image.BufferStrategy;
  5. import java.awt.image.BufferedImage;
  6. import java.awt.image.DataBufferInt;
  7. import javax.swing.JFrame;
  8. public class Renderer extends Canvas implements Runnable {
  9. private static final long serialVersionUID = 1L;
  10. public static int width = 320;
  11. public static int height = 240;
  12. public static int scale = 2;
  13. public String title = "Title";
  14. private Thread thread;
  15. private JFrame frame;
  16. private boolean running = false;
  17. private Screen screen;
  18. private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  19. private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
  20. public Renderer(int width, int height) {
  21. System.out.println(width);
  22. }
  23. public Renderer() {
  24. Dimension size = new Dimension(width*scale, height*scale);
  25. setPreferredSize(size);
  26. screen = new Screen(width, height);
  27. frame = new JFrame();
  28. }
  29. public synchronized void start() {
  30. running = true;
  31. thread = new Thread(this, "Display");
  32. thread.start();
  33. }
  34. public synchronized void stop() {
  35. running = false;
  36. try {
  37. thread.join();
  38. } catch (InterruptedException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. public void run() {
  43. long lastTime = System.nanoTime();
  44. long timer = System.currentTimeMillis();
  45. double delta = 0;
  46. int frames = 0;
  47. int updates = 0;
  48. long now;
  49. while (running) {
  50. now = System.nanoTime();
  51. delta += (now - lastTime) * 6.0 / 100000000.0;
  52. lastTime = now;
  53. while (delta >= 1) {
  54. update();
  55. updates++;
  56. delta--;
  57. render();
  58. frames++;
  59. }
  60. if (System.currentTimeMillis() - timer > 1000) {
  61. timer += 1000;
  62. frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames);
  63. frames = 0;
  64. updates = 0;
  65. }
  66. }
  67. stop();
  68. }
  69. public void update() {
  70. }
  71. public void render() {
  72. BufferStrategy bs = getBufferStrategy();
  73. if (bs == null) {
  74. createBufferStrategy(3);
  75. return;
  76. }
  77. screen.clear();
  78. screen.render();
  79. for (int i = 0; i < pixels.length; i++) {
  80. pixels[i] = screen.pixels[i];
  81. }
  82. Graphics g = bs.getDrawGraphics();
  83. g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
  84. g.dispose();
  85. bs.show();
  86. }
  87. public static void main(String[] args) {
  88. Renderer render = new Renderer();
  89. render.frame.setResizable(false);
  90. render.frame.setTitle(render.title);
  91. render.frame.add(render);
  92. render.frame.pack();
  93. render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  94. render.frame.setLocationRelativeTo(null);
  95. render.frame.setVisible(true);
  96. render.start();
  97. render.screen.draw(100,100,0xFFFFFF);
  98. }
  99. }