/*******************************************************************************/ Game g = null; void setup() { size(240,240); g = new Game(); } void loop() { g.update(); g.draw(); } /*******************************************************************************/ class Game { Scene s; Game() { goScene("Title"); } void goScene(String name) { s = getScene(name); } void update() { if (s!=null) s.update(); } void draw() { if (s!=null) s.draw(); } } /*******************************************************************************/ abstract class Scene { abstract void draw(); abstract void update(); } Hashtable scenes = new Hashtable(); Scene getScene(String s) { try { return getScene(Class.forName(getClass().getName()+'$'+s+"Scene")); } catch (ClassNotFoundException ex) { ex.printStackTrace(); return null; } } Scene getScene(Class clazz) { Object o = scenes.get(clazz); if (o!=null) return (Scene)o; try { // instantiate the inner class o = clazz.getConstructor(new Class[]{getClass()}).newInstance(new Object[]{this}); } catch (Exception ex) { ex.printStackTrace(); } scenes.put(clazz,o); return (Scene)o; } /*******************************************************************************/ class Stars { float x[], y[], dy[]; Stars(int count) { x = new float[count]; y = new float[count]; dy = new float[count]; for (int i=0; i