Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.74 KB | None | 0 0
  1. import javax.swing.JFrame;
  2. import javax.swing.JPanel;
  3.  
  4. import java.awt.Color;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.Rectangle;
  10. import java.awt.Shape;
  11. import java.awt.event.KeyEvent;
  12. import java.awt.event.KeyListener;
  13. import java.awt.event.MouseEvent;
  14. import java.awt.event.MouseListener;
  15. import java.awt.image.ImageObserver;
  16. import java.text.AttributedCharacterIterator;
  17. import java.util.ArrayList;
  18. import java.awt.Event;
  19.  
  20. public class game_of_life extends JFrame {
  21. RenderArea ra;
  22. private int i;
  23.  
  24. public game_of_life() {
  25. super("Game of Life");
  26. this.setSize(1005, 1030);
  27. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  28. this.setVisible(true);
  29. this.setResizable(false);
  30. ra = new RenderArea();
  31. ra.setFocusable(true);
  32. ra.grabFocus();
  33. add(ra);
  34.  
  35. ra.edit_mode = true;
  36. ra.running = true;
  37. }
  38.  
  39. public void update() {
  40. ArrayList<ArrayList<Boolean>> entities = new ArrayList<ArrayList<Boolean>>();// = ra.entities;
  41. int size1 = ra.entities.size();
  42. int size2 = ra.entities.get(0).size();
  43. for(int i=0;i<size1;i++)
  44. {
  45. entities.add( new ArrayList<Boolean>());
  46. for(int j=0;j<size2;j++)
  47. {
  48. int alive = 0;
  49.  
  50. if(ra.entities.get((size1+i-1)%size1).get((size2+j-1)%size2)) alive++;
  51. if(ra.entities.get((size1+i-1)%size1).get((size2+j)%size2)) alive++;
  52. if(ra.entities.get((size1+i-1)%size1).get((size2+j+1)%size2)) alive++;
  53.  
  54. if(ra.entities.get((size1+i)%size1).get((size2+j-1)%size2)) alive++;
  55. if(ra.entities.get((size1+i)%size1).get((size2+j+1)%size2)) alive++;
  56.  
  57. if(ra.entities.get((size1+i+1)%size1).get((size2+j-1)%size2)) alive++;
  58. if(ra.entities.get((size1+i+1)%size1).get((size2+j)%size2)) alive++;
  59. if(ra.entities.get((size1+i+1)%size1).get((size2+j+1)%size2)) alive++;
  60.  
  61.  
  62.  
  63. /*for(int k=-1;i<2;k++)
  64. {
  65. for(int l = -1; l < 2 ;l++)
  66. {
  67. if(!(k==0 && l == 0))
  68. {
  69. if(ra.entities.get((size1+i+k)%size1).get((size2+j+l)%size2)) alive++;
  70. }
  71. }
  72. }*/
  73.  
  74. if(ra.entities.get(i).get(j))
  75. {
  76. if(alive < 2 || alive > 3)
  77. {
  78. //ra.entities.get(i).set(j,false);
  79. entities.get(i).add(false);
  80. }
  81. else
  82. {
  83. entities.get(i).add(true);
  84. }
  85. }
  86. else
  87. {
  88. if(alive == 3)
  89. {
  90. //ra.entities.get(i).set(j,true);
  91. entities.get(i).add(true);
  92. }
  93. else
  94. {
  95. entities.get(i).add(false);
  96. }
  97. }
  98.  
  99. }
  100. }
  101. ra.entities = entities;
  102.  
  103. }
  104.  
  105. class RenderArea extends JPanel implements KeyListener {
  106. public ArrayList<ArrayList<Boolean>> entities;
  107.  
  108. public int diff;
  109. public boolean edit_mode;
  110. public boolean running;
  111. public RenderArea() {
  112. super();
  113. setSize(1000, 1000);
  114. setVisible(true);
  115. setBackground(Color.WHITE);
  116. setForeground(Color.BLACK);
  117. setLocation(0, 0);
  118.  
  119. diff = 20;
  120.  
  121.  
  122. this.addMouseListener((MouseListener) new MouseListener(){
  123.  
  124. @Override
  125. public void mouseReleased(MouseEvent arg0) {
  126.  
  127. }
  128.  
  129. @Override
  130. public void mousePressed(MouseEvent arg0) {
  131. clicked(arg0);
  132. }
  133.  
  134. @Override
  135. public void mouseExited(MouseEvent arg0) {
  136.  
  137. }
  138.  
  139. @Override
  140. public void mouseEntered(MouseEvent arg0) {
  141.  
  142. }
  143.  
  144. @Override
  145. public void mouseClicked(MouseEvent arg0) {
  146.  
  147. }
  148. });
  149. this.addKeyListener(this);
  150. entities = new ArrayList<ArrayList<Boolean>>();
  151. for(int i=0;i<1000/diff;i++)
  152. {
  153. entities.add(new ArrayList<Boolean>());
  154. for(int j=0;j<1000/diff;j++)
  155. {
  156. entities.get(i).add(false);
  157. }
  158. }
  159.  
  160. }
  161.  
  162. void clicked(MouseEvent arg0)
  163. {
  164. System.out.println("Button "+(arg0.getButton()== 1 ? "Left" : "Right"));
  165. System.out.println("X:"+arg0.getX()/diff);
  166. System.out.println("Y:"+arg0.getY()/diff);
  167. if(edit_mode)
  168. {
  169. entities.get(arg0.getX()/diff).set(arg0.getY()/diff,!entities.get(arg0.getX()/diff).get((arg0.getY()/diff)));
  170. this.update(this.getGraphics());
  171. }
  172.  
  173. }
  174.  
  175.  
  176. @Override
  177. public void keyTyped(KeyEvent e) {
  178. //System.out.println(e.getKeyChar());
  179. }
  180.  
  181. @Override
  182. public void keyReleased(KeyEvent e) {
  183. System.out.println("Key pressed:"+e.getKeyChar());
  184. if(e.getKeyChar()=='e')
  185. {
  186. edit_mode = !edit_mode;
  187. }
  188. else if(e.getKeyChar()=='q')
  189. {
  190. this.running = false;
  191. }
  192. else if(e.getKeyChar()=='c')
  193. {
  194. if(edit_mode)
  195. {
  196. for(int i=0;i<this.entities.size();i++)
  197. {
  198. for(int j=0;j<this.entities.get(1).size();j++)
  199. {
  200. this.entities.get(i).set(j,false);
  201. }
  202. }
  203. this.update(this.getGraphics());
  204. }
  205.  
  206. }
  207.  
  208. }
  209.  
  210. @Override
  211. public void keyPressed(KeyEvent e) {
  212. //System.out.println(e.getKeyChar());
  213. }
  214.  
  215. @Override
  216. protected void paintComponent(Graphics g) {
  217. super.paintComponent(g);
  218. g.clearRect(0, 0, 1000, 1000);
  219. for(int i=0;i<1000;i+=diff)
  220. {
  221. g.drawLine(i, 0, i, 1000);
  222. }
  223. for(int j=0;j<1000;j+=diff)
  224. {
  225. g.drawLine(0, j, 1000, j);
  226. }
  227. for(int i=0;i<1000;i+=diff)
  228. {
  229. for(int j=0;j<1000;j+=diff)
  230. {
  231. if(entities.get(i/diff).get(j/diff))
  232. {
  233. g.setColor(Color.BLACK);
  234.  
  235. }
  236. else
  237. {
  238. g.setColor(Color.WHITE);
  239. }
  240.  
  241. g.fillRect(i+2, j+2, diff-3, diff-3);
  242. }
  243. }
  244. }
  245.  
  246.  
  247.  
  248. private static final long serialVersionUID = 1L;
  249.  
  250. }
  251.  
  252. private static final long serialVersionUID = 1L;
  253. public static void main(String args[])
  254. {
  255. game_of_life gol = new game_of_life();
  256. while(gol.ra.running)
  257. {
  258. if(!gol.ra.edit_mode)gol.update();
  259. try{Thread.sleep(200);}
  260. catch(Exception ex)
  261. {
  262.  
  263. }
  264. gol.ra.update(gol.ra.getGraphics());
  265. }
  266. gol.dispose();
  267. }
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement