import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; public class PopUpMenu extends JPopupMenu { private ModelObservable model; int xCoordinate; int yCoordinate; public PopUpMenu( ModelObservable model, int x, int y){ this.xCoordinate=x; this.yCoordinate=y; this.model=model; this.add(new StaticObjectsMenu("statische Objekte")); this.add(new PulsatingObjectsMenu("pulsierende Objekte")); this.add(new MovingObjectsMenu("Raumschiffe/ Gleiter")); } class StaticObjectsMenu extends JMenu { public StaticObjectsMenu( String name){ super(name); this.add(new static1()); this.add(new static2()); this.add(new static3()); this.add(new static4()); } class static1 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 3) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 3) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,0); } } ; public static1(){ super("static1"); this.addActionListener(act); } } class static2 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate >= PopUpMenu.this.model.getPlayground().length - 3) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate >= PopUpMenu.this.model.getPlayground()[0].length - 4) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,0); } } ; public static2(){ super("static2"); this.addActionListener(act); } } class static3 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate >= PopUpMenu.this.model.getPlayground().length - 4) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate >= PopUpMenu.this.model.getPlayground()[0].length - 4) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 3,0); } } ; public static3(){ super("static3"); this.addActionListener(act); } } class static4 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate >= PopUpMenu.this.model.getPlayground().length - 4) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate >= PopUpMenu.this.model.getPlayground()[0].length - 4) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 3,0); } } ; public static4(){ super("static4"); this.addActionListener(act); } } } class PulsatingObjectsMenu extends JMenu { public PulsatingObjectsMenu( String name){ super(name); this.add(new Blinker()); this.add(new Laser0()); this.add(new Laser2()); } class Laser0 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 4) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 4) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 3,1); } } ; public Laser0(){ super("0-Laser"); this.addActionListener(act); } } class Blinker extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 3) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 3) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,0); } } ; public Blinker(){ super("blinker"); this.addActionListener(act); } } class Laser2 extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 5) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 5) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 4,1); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 4,1); } } ; public Laser2(){ super("2-Laser"); this.addActionListener(act); } } } class MovingObjectsMenu extends JMenu { public MovingObjectsMenu( String name){ super(name); this.add(new LightWeightSpaceship()); this.add(new Glider()); } class LightWeightSpaceship extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 5) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 5) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 2,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 3,1); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 3,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 3,yCoordinate + 4,0); PopUpMenu.this.model.setLifeform(xCoordinate + 4,yCoordinate + 4,0); } } ; public LightWeightSpaceship(){ super("Segler1"); this.addActionListener(act); } } class Glider extends JMenuItem { ActionListener act=new ActionListener(){ public void actionPerformed( ActionEvent e){ if (xCoordinate < 0 || xCoordinate > PopUpMenu.this.model.getPlayground().length - 3) { System.err.println("not in range"); return; } if (yCoordinate < 0 || yCoordinate > PopUpMenu.this.model.getPlayground()[0].length - 3) { System.err.println("not in range"); return; } PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate,0); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 1,0); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 1,1); PopUpMenu.this.model.setLifeform(xCoordinate,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 1,yCoordinate + 2,1); PopUpMenu.this.model.setLifeform(xCoordinate + 2,yCoordinate + 2,1); } } ; public Glider(){ super("Gleiter"); this.addActionListener(act); } } } }