A simple Game of Life implementation in Java
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

121 lignes
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. }