diff --git a/examples/zm_aquarium/Aquarium.java b/examples/zm_aquarium/Aquarium.java deleted file mode 100644 index 1ef1e91..0000000 --- a/examples/zm_aquarium/Aquarium.java +++ /dev/null @@ -1,53 +0,0 @@ -import schule.ngb.zm.Zeichenmaschine; -import schule.ngb.zm.util.ImageLoader; - -public class Aquarium extends Zeichenmaschine { - - public static final int N_FISHES = 25; - - public static void main( String[] args ) { - new Aquarium(); - } - - private Fish[] fish; - - public Aquarium() { - super(800, 600, "Aquarium"); - } - - @Override - public void setup() { - canvas.addLayer(1, new Background()); - - fish = new Fish[N_FISHES]; - - for( int i = 1; i <= 7; i++ ) { - ImageLoader.preloadImage("fish"+i, "tiles/fish"+i+"gs.png"); - } - - for( int i = 0; i < N_FISHES; i++ ) { - fish[i] = new Fish(); - shapes.add(fish[i]); - } - } - - @Override - public void update( double delta ) { - for( int i = 0; i < fish.length; i++ ) { - fish[i].update(delta); - } - } - - @Override - public void draw() { - - } - - @Override - public void mouseClicked() { - for( int i = 0; i < fish.length; i++ ) { - fish[i].randomize(); - } - } - -} diff --git a/examples/zm_aquarium/Background.java b/examples/zm_aquarium/Background.java deleted file mode 100644 index 26cc674..0000000 --- a/examples/zm_aquarium/Background.java +++ /dev/null @@ -1,59 +0,0 @@ - -import schule.ngb.zm.Layer; - -import java.awt.Graphics2D; -import java.awt.Image; - -public class Background extends Layer { - - private static final int TILE_SIZE = 64; - - private int tile_width; - - private Image[] floor, plants; - - private Image water; - - public Background() { - super(); - } - - public Background( int width, int height ) { - super(width, height); - } - - @Override - public void setSize( int width, int height ) { - super.setSize(width, height); - generateBackground(); - } - - public void generateBackground() { - tile_width = (int)(ceil(getWidth()/(double)TILE_SIZE)); - floor = new Image[tile_width]; - plants = new Image[tile_width]; - - for ( int i = 0; i < tile_width; i++ ) { - floor[i] = loadImage("tiles/floor"+random(1,8)+".png"); - if( random(1,10) < 4 ) { - plants[i] = loadImage("tiles/plant"+random(1,14)+".png"); - } - } - - water = loadImage("tiles/water.png"); - - for ( int i = 0; i < getHeight(); i += TILE_SIZE ) { - for ( int j = 0; j < getWidth(); j += TILE_SIZE ) { - drawing.drawImage(water, j, i, null); - } - } - - for ( int i = 0; i < tile_width; i++ ) { - if( plants[i] != null ) { - drawing.drawImage(plants[i], i*TILE_SIZE, getHeight() - (2*TILE_SIZE) + 10,TILE_SIZE,TILE_SIZE, null); - } - drawing.drawImage(floor[i], i*TILE_SIZE, getHeight() - TILE_SIZE,TILE_SIZE,TILE_SIZE, null); - } - } - -} diff --git a/examples/zm_aquarium/Fish.java b/examples/zm_aquarium/Fish.java deleted file mode 100644 index 5e74e01..0000000 --- a/examples/zm_aquarium/Fish.java +++ /dev/null @@ -1,72 +0,0 @@ -import schule.ngb.zm.*; -import schule.ngb.zm.shapes.Picture; -import schule.ngb.zm.shapes.Shape; - -import java.awt.Graphics2D; -import java.awt.geom.AffineTransform; - -public class Fish extends Shape implements Updatable { - - private int speed; - - private Picture img; - - public Fish() { - randomize(); - } - - public void randomize() { - int i = random(1, 7); - speed = random(-2, 2); - img = new Picture("fish" + i); - img.setAnchor(NORTHWEST); - img.scale(random(0.8, 1.0)); - img.tint(randomNiceColor()); - //img.scale(0.5); - if( speed < 0 ) { - img.flip(LEFT); - } - img.moveTo(random(10, width-img.getWidth()), random(30, height-120)); - } - - @Override - public boolean isActive() { - return true; - } - - @Override - public void update( double delta ) { - img.move(speed, .5 * sin(tick / (speed * 10.0))); - - if( img.getX() <= 0 || img.getX()+img.getWidth() >= 800 ) { - speed *= -1; - img.flip(LEFT); - } - } - - @Override - public void draw( Graphics2D graphics, AffineTransform transform ) { - img.draw(graphics, transform); - } - - @Override - public double getWidth() { - return img.getWidth(); - } - - @Override - public double getHeight() { - return img.getHeight(); - } - - @Override - public Shape copy() { - return img.copy(); - } - - @Override - public java.awt.Shape getShape() { - return img.getShape(); - } - -} diff --git a/examples/zm_aquarium/package.bluej b/examples/zm_aquarium/package.bluej deleted file mode 100644 index 667b354..0000000 --- a/examples/zm_aquarium/package.bluej +++ /dev/null @@ -1,55 +0,0 @@ -#BlueJ package file -dependency1.from=Attractor -dependency1.to=Gravity -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=380 -target1.y=220 -target2.height=70 -target2.name=Attractor -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=380 -target2.y=350 -target3.height=70 -target3.name=Gravity -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=120 -target3.y=120 diff --git a/examples/zm_aquarium/tiles/fish1.png b/examples/zm_aquarium/tiles/fish1.png deleted file mode 100755 index 2b9669b..0000000 Binary files a/examples/zm_aquarium/tiles/fish1.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish1gs.png b/examples/zm_aquarium/tiles/fish1gs.png deleted file mode 100755 index efc04d1..0000000 Binary files a/examples/zm_aquarium/tiles/fish1gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish2.png b/examples/zm_aquarium/tiles/fish2.png deleted file mode 100755 index cda62e8..0000000 Binary files a/examples/zm_aquarium/tiles/fish2.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish2gs.png b/examples/zm_aquarium/tiles/fish2gs.png deleted file mode 100755 index e4f041a..0000000 Binary files a/examples/zm_aquarium/tiles/fish2gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish3.png b/examples/zm_aquarium/tiles/fish3.png deleted file mode 100755 index 0c66d35..0000000 Binary files a/examples/zm_aquarium/tiles/fish3.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish3gs.png b/examples/zm_aquarium/tiles/fish3gs.png deleted file mode 100755 index d44a90a..0000000 Binary files a/examples/zm_aquarium/tiles/fish3gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish4.png b/examples/zm_aquarium/tiles/fish4.png deleted file mode 100755 index 1a84d23..0000000 Binary files a/examples/zm_aquarium/tiles/fish4.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish4gs.png b/examples/zm_aquarium/tiles/fish4gs.png deleted file mode 100755 index 93d754b..0000000 Binary files a/examples/zm_aquarium/tiles/fish4gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish5.png b/examples/zm_aquarium/tiles/fish5.png deleted file mode 100755 index 377395b..0000000 Binary files a/examples/zm_aquarium/tiles/fish5.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish5gs.png b/examples/zm_aquarium/tiles/fish5gs.png deleted file mode 100755 index 2d3f7f8..0000000 Binary files a/examples/zm_aquarium/tiles/fish5gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish6.png b/examples/zm_aquarium/tiles/fish6.png deleted file mode 100755 index 3cb72f5..0000000 Binary files a/examples/zm_aquarium/tiles/fish6.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish6gs.png b/examples/zm_aquarium/tiles/fish6gs.png deleted file mode 100755 index 91d757d..0000000 Binary files a/examples/zm_aquarium/tiles/fish6gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish7.png b/examples/zm_aquarium/tiles/fish7.png deleted file mode 100755 index 0cb1b91..0000000 Binary files a/examples/zm_aquarium/tiles/fish7.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/fish7gs.png b/examples/zm_aquarium/tiles/fish7gs.png deleted file mode 100755 index 96d9b98..0000000 Binary files a/examples/zm_aquarium/tiles/fish7gs.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor1.png b/examples/zm_aquarium/tiles/floor1.png deleted file mode 100755 index b4dd530..0000000 Binary files a/examples/zm_aquarium/tiles/floor1.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor2.png b/examples/zm_aquarium/tiles/floor2.png deleted file mode 100755 index d7c0f11..0000000 Binary files a/examples/zm_aquarium/tiles/floor2.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor3.png b/examples/zm_aquarium/tiles/floor3.png deleted file mode 100755 index f28f203..0000000 Binary files a/examples/zm_aquarium/tiles/floor3.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor4.png b/examples/zm_aquarium/tiles/floor4.png deleted file mode 100755 index 662e516..0000000 Binary files a/examples/zm_aquarium/tiles/floor4.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor5.png b/examples/zm_aquarium/tiles/floor5.png deleted file mode 100755 index b4fbd5b..0000000 Binary files a/examples/zm_aquarium/tiles/floor5.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor6.png b/examples/zm_aquarium/tiles/floor6.png deleted file mode 100755 index b18c712..0000000 Binary files a/examples/zm_aquarium/tiles/floor6.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor7.png b/examples/zm_aquarium/tiles/floor7.png deleted file mode 100755 index 17a6d84..0000000 Binary files a/examples/zm_aquarium/tiles/floor7.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/floor8.png b/examples/zm_aquarium/tiles/floor8.png deleted file mode 100755 index 46d46ce..0000000 Binary files a/examples/zm_aquarium/tiles/floor8.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant1.png b/examples/zm_aquarium/tiles/plant1.png deleted file mode 100755 index 65a66b4..0000000 Binary files a/examples/zm_aquarium/tiles/plant1.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant10.png b/examples/zm_aquarium/tiles/plant10.png deleted file mode 100755 index 23b2e05..0000000 Binary files a/examples/zm_aquarium/tiles/plant10.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant11.png b/examples/zm_aquarium/tiles/plant11.png deleted file mode 100755 index 82ab129..0000000 Binary files a/examples/zm_aquarium/tiles/plant11.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant12.png b/examples/zm_aquarium/tiles/plant12.png deleted file mode 100755 index f31033d..0000000 Binary files a/examples/zm_aquarium/tiles/plant12.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant13.png b/examples/zm_aquarium/tiles/plant13.png deleted file mode 100755 index 8443d04..0000000 Binary files a/examples/zm_aquarium/tiles/plant13.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant14.png b/examples/zm_aquarium/tiles/plant14.png deleted file mode 100755 index 0222446..0000000 Binary files a/examples/zm_aquarium/tiles/plant14.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant2.png b/examples/zm_aquarium/tiles/plant2.png deleted file mode 100755 index ddb806f..0000000 Binary files a/examples/zm_aquarium/tiles/plant2.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant3.png b/examples/zm_aquarium/tiles/plant3.png deleted file mode 100755 index 1c5abf0..0000000 Binary files a/examples/zm_aquarium/tiles/plant3.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant4.png b/examples/zm_aquarium/tiles/plant4.png deleted file mode 100755 index a0bed9c..0000000 Binary files a/examples/zm_aquarium/tiles/plant4.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant5.png b/examples/zm_aquarium/tiles/plant5.png deleted file mode 100755 index 92b9fb6..0000000 Binary files a/examples/zm_aquarium/tiles/plant5.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant6.png b/examples/zm_aquarium/tiles/plant6.png deleted file mode 100755 index 17b890e..0000000 Binary files a/examples/zm_aquarium/tiles/plant6.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant7.png b/examples/zm_aquarium/tiles/plant7.png deleted file mode 100755 index 6d9ae63..0000000 Binary files a/examples/zm_aquarium/tiles/plant7.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant8.png b/examples/zm_aquarium/tiles/plant8.png deleted file mode 100755 index d2214e4..0000000 Binary files a/examples/zm_aquarium/tiles/plant8.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/plant9.png b/examples/zm_aquarium/tiles/plant9.png deleted file mode 100755 index b386816..0000000 Binary files a/examples/zm_aquarium/tiles/plant9.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/shark.png b/examples/zm_aquarium/tiles/shark.png deleted file mode 100644 index 15c2655..0000000 Binary files a/examples/zm_aquarium/tiles/shark.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton1.png b/examples/zm_aquarium/tiles/skeleton1.png deleted file mode 100755 index 6f5776d..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton1.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton10.png b/examples/zm_aquarium/tiles/skeleton10.png deleted file mode 100755 index e2c5ed7..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton10.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton2.png b/examples/zm_aquarium/tiles/skeleton2.png deleted file mode 100755 index 1190025..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton2.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton3.png b/examples/zm_aquarium/tiles/skeleton3.png deleted file mode 100755 index a3ed460..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton3.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton4.png b/examples/zm_aquarium/tiles/skeleton4.png deleted file mode 100755 index 588830d..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton4.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton5.png b/examples/zm_aquarium/tiles/skeleton5.png deleted file mode 100755 index 12ab78c..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton5.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton6.png b/examples/zm_aquarium/tiles/skeleton6.png deleted file mode 100755 index c1dc192..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton6.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton7.png b/examples/zm_aquarium/tiles/skeleton7.png deleted file mode 100755 index 0b01e7f..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton7.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton8.png b/examples/zm_aquarium/tiles/skeleton8.png deleted file mode 100755 index a693440..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton8.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/skeleton9.png b/examples/zm_aquarium/tiles/skeleton9.png deleted file mode 100755 index ead8d7e..0000000 Binary files a/examples/zm_aquarium/tiles/skeleton9.png and /dev/null differ diff --git a/examples/zm_aquarium/tiles/water.png b/examples/zm_aquarium/tiles/water.png deleted file mode 100755 index eb6e80f..0000000 Binary files a/examples/zm_aquarium/tiles/water.png and /dev/null differ diff --git a/examples/zm_boids/Boid.java b/examples/zm_boids/Boid.java deleted file mode 100644 index 02f67d2..0000000 --- a/examples/zm_boids/Boid.java +++ /dev/null @@ -1,130 +0,0 @@ -import schule.ngb.zm.*; - -import java.util.List; - -public class Boid extends Creature { - - public static final double COHESION_FACTOR = .5; - - public static final double SEPARATION_FACTOR = .5; - - public static final double ALIGNMENT_FACTOR = .5; - - public static final double FLIGHT_FACTOR = .5; - - public static final double VELOCITY_LIMIT = 3.0; - - public static final double FORCE_LIMIT = .1; - - public static final int FLOCK_RADIUS = 100; - - public static final boolean SHOW_RADIUS = false; - - public static final int BOID_WIDTH = 8; - - public static final int BOID_HEIGHT = 16; - - private boolean highlight = false; - - public Boid() { - // Generate random Boid - super( - Vector.random(BOID_WIDTH, width-BOID_WIDTH, BOID_HEIGHT, height-BOID_HEIGHT), - Vector.random(-1, 1).scale(random(VELOCITY_LIMIT)) - ); - senseRange = FLOCK_RADIUS; - } - - public Boid( Vector pos, Vector vel ) { - super(pos, vel); - senseRange = FLOCK_RADIUS; - } - - public void toggleHighlight() { - highlight = !highlight; - } - - public void draw( DrawingLayer drawing ) { - drawing.setFillColor(251, 241, 195); - drawing.setStrokeColor(239, 191, 77); - drawing.setStrokeWeight(2); - - drawing.pushMatrix(); - drawing.translate(position.x, position.y); - drawing.rotate(90 + velocity.angle()); - drawing.triangle(BOID_WIDTH / -2.0, BOID_HEIGHT / 2.0, 0, BOID_HEIGHT / -2.0, BOID_WIDTH / 2.0, BOID_HEIGHT / 2.0); - - if( SHOW_RADIUS || highlight ) { - drawing.setFillColor(251, 241, 195, 33); - drawing.noStroke(); - drawing.circle(0, 0, FLOCK_RADIUS); - } - drawing.popMatrix(); - } - - - public void update( List creatures ) { - Vector cohesion = new Vector(); - Vector separation = new Vector(); - Vector alignment = new Vector(); - Vector flight = new Vector(); - int boids = 0, predators = 0; - - for( Creature c: creatures ) { - if( isInRange(c) ) { - if( Predator.class.isInstance(c) ) { - double distSq = position.distanceSq(c.getPosition()); - flight.add(Vector.sub(position, c.getPosition()).div(distSq)); - - predators += 1; - } else { - cohesion.add(c.getPosition()); - alignment.add(c.getVelocity()); - - double distSq = position.distanceSq(c.getPosition()); - if( distSq > 0 ) { - separation.add(Vector.sub(position, c.getPosition()).div(distSq)); - } - - boids += 1; - } - } - } - - if( boids > 0 ) { - // Cohesion - cohesion.div(boids).sub(position); - cohesion.setLength(VELOCITY_LIMIT).sub(velocity); - cohesion.limit(FORCE_LIMIT); - cohesion.scale(COHESION_FACTOR); - // Separation - separation.div(boids); - separation.setLength(VELOCITY_LIMIT).sub(velocity); - separation.limit(FORCE_LIMIT); - separation.scale(SEPARATION_FACTOR); - // Alignment - alignment.div(boids); - alignment.setLength(VELOCITY_LIMIT).sub(velocity); - alignment.limit(FORCE_LIMIT); - alignment.scale(ALIGNMENT_FACTOR); - } - if( predators > 0 ) { - flight.div(predators); - flight.setLength(VELOCITY_LIMIT).sub(velocity); - flight.limit(FORCE_LIMIT*4.0); - flight.scale(FLIGHT_FACTOR); - } - - acceleration - .scale(0.0) - .add(separation) - .add(cohesion) - .add(alignment) - .add(flight); - - position.add(velocity); - limitPosition(); - velocity.add(acceleration).limit(VELOCITY_LIMIT); - } - -} diff --git a/examples/zm_boids/Boids.java b/examples/zm_boids/Boids.java deleted file mode 100644 index 05f3cfc..0000000 --- a/examples/zm_boids/Boids.java +++ /dev/null @@ -1,110 +0,0 @@ -import schule.ngb.zm.*; -import schule.ngb.zm.util.ImageLoader; - -import java.awt.event.KeyEvent; -import java.util.ArrayList; -import java.util.List; - -public class Boids extends Zeichenmaschine { - - public static void main( String[] args ) { - new Boids(); - } - - public static final boolean BORDER_WRAP = true; - - public static final int N_BOIDS = 200; - - public static final int N_PREDATORS = 0; - - private List creatures; - - public Boids() { - super(1280, 720, "ZM: Boids"); - } - - @Override - public void setup() { - setFullscreen(true); - setCursor(ImageLoader.loadImage("pointer.png"), 0, 0); - - creatures = new ArrayList(); - - synchronized( creatures ) { - for( int i = 0; i < N_BOIDS; i++ ) { - creatures.add(new Boid()); - } - for( int i = 0; i < N_PREDATORS; i++ ) { - creatures.add(new Predator()); - } - } - } - - @Override - public void update( double delta ) { - synchronized( creatures ) { - for( Creature c : creatures ) { - c.update(creatures); - if( Double.isNaN(c.getPosition().x) ) { - pause(); - break; - } - } - } - } - - @Override - public void draw() { - drawing.clear(0, 125, 182); - synchronized( creatures ) { - for( Creature c : creatures ) { - c.draw(drawing); - } - } - } - - @Override - public void mouseClicked() { - synchronized( creatures ) { - creatures.add(new Predator( - Vector.mouse(), Vector.ZERO - )); - } - } - - @Override - public void keyPressed() { - if( keyCode == KEY_G ) { - setSize(800, 800); - } else if( keyCode == KEY_C ) { - int cnt = 0; - for( Creature c : creatures ) { - Vector pos = c.getPosition(); - if( pos.x >= 0 && pos.x <= width && pos.y >= 0 && pos.y <= height ) { - cnt++; - } else { - System.out.printf("Missing: %s\n", c.getPosition().toString()); - } - } - System.out.printf("Screen: %dx%d\nCreatures: %d of %d\n", width, height, cnt, creatures.size()); - } else if( keyCode == KEY_F ) { - setFullscreen(true); - } else if( keyCode == KEY_Q ) { - for( Creature c : creatures ) { - c.getPosition().set(width/2, height/2); - } - } - } - - /*@Override - public void fullscreenChanged() { - if( creatures != null ) { - synchronized( creatures ) { - for( Creature c : creatures ) { - c.limitPosition(); - } - } - } - } - */ -} diff --git a/examples/zm_boids/Creature.java b/examples/zm_boids/Creature.java deleted file mode 100644 index 91b7d2b..0000000 --- a/examples/zm_boids/Creature.java +++ /dev/null @@ -1,77 +0,0 @@ -import schule.ngb.zm.Constants; -import schule.ngb.zm.DrawingLayer; -import schule.ngb.zm.Vector; - -import java.util.List; - -public abstract class Creature extends Constants { - - protected Vector position, velocity, acceleration; - - protected int senseRange = 100; - - public Creature( Vector pos, Vector vel ) { - position = pos.copy(); - velocity = vel.copy(); - acceleration = new Vector(); - } - - public Vector getPosition() { - return position; - } - - public Vector getVelocity() { - return velocity; - } - - public abstract void draw( DrawingLayer drawing ); - - public abstract void update( List creatures ); - - public void limitPosition() { - if( position.x < 0 ) { - if( Boids.BORDER_WRAP ) { - position.x = width; - } else { - position.x = 0; - //velocity.mult(-1); - acceleration.add(Vector.scale(velocity, -2)); - } - } else if( position.x > width ) { - if( Boids.BORDER_WRAP ) { - position.x = 0; - } else { - position.x = width; - //velocity.mult(-1); - acceleration.add(Vector.scale(velocity, -2)); - } - } - if( position.y < 0 ) { - if( Boids.BORDER_WRAP ) { - position.y = height; - } else { - position.y = 0; - //velocity.mult(-1); - acceleration.add(Vector.scale(velocity, -2)); - } - } else if( position.y > height ) { - if( Boids.BORDER_WRAP ) { - position.y = 0.0; - } else { - position.y = height; - //velocity.mult(-1); - acceleration.add(Vector.scale(velocity, -2)); - } - } - } - - protected boolean isInRange( Creature otherCreature ) { - if( otherCreature == this || otherCreature == null ) { - return false; - } - if( abs(position.x-otherCreature.getPosition().x) > senseRange ) { - return false; - } - return position.distanceSq(otherCreature.getPosition()) < senseRange*senseRange; - } -} diff --git a/examples/zm_boids/Predator.java b/examples/zm_boids/Predator.java deleted file mode 100644 index 00dfc70..0000000 --- a/examples/zm_boids/Predator.java +++ /dev/null @@ -1,97 +0,0 @@ -import schule.ngb.zm.DrawingLayer; -import schule.ngb.zm.Vector; - -import java.util.List; - -public class Predator extends Creature { - - public static final int SENSE_RADIUS = 180; - - public static final double AVOIDANCE_FACTOR = .65; - - public static final double HUNTING_FACTOR = .65; - - public static final double VELOCITY_LIMIT = 5.0; - - public static final double FORCE_LIMIT = .1; - - public static final int PREDATOR_WIDTH = 12; - - public static final int PREDATOR_HEIGHT = 26; - - public static final boolean SHOW_RADIUS = true; - - public Predator() { - // Generate random Predator - super( - Vector.random(PREDATOR_WIDTH, width - PREDATOR_WIDTH, PREDATOR_HEIGHT, height - PREDATOR_HEIGHT), - Vector.random(-1, 1).scale(random(VELOCITY_LIMIT)) - ); - senseRange = SENSE_RADIUS; - } - - public Predator( Vector pos, Vector vel ) { - super(pos, vel); - senseRange = SENSE_RADIUS; - } - - public void draw( DrawingLayer drawing ) { - drawing.setFillColor(152, 61, 83); - drawing.setStrokeColor(225, 33, 32); - drawing.setStrokeWeight(2); - - drawing.pushMatrix(); - drawing.translate(position.x, position.y); - drawing.rotate(90 + velocity.angle()); - drawing.triangle(PREDATOR_WIDTH / -2.0, PREDATOR_HEIGHT / 2.0, 0, PREDATOR_HEIGHT / -2.0, PREDATOR_WIDTH / 2.0, PREDATOR_HEIGHT / 2.0); - - if( SHOW_RADIUS ) { - drawing.setFillColor(152, 61, 83, 33); - drawing.noStroke(); - drawing.circle(0, 0, SENSE_RADIUS); - } - drawing.popMatrix(); - } - - public void update( List creatures ) { - Vector hunting = new Vector(); - Vector separation = new Vector(); - double boids = 0, predators = 0; - - for( Creature c : creatures ) { - if( isInRange(c) ) { - if( Boid.class.isInstance(c) ) { - hunting.add(c.getPosition()); - boids += 1; - } else { - double distSq = position.distanceSq(c.getPosition()); - separation.add(Vector.sub(position, c.getPosition()).div(distSq)); - - predators += 1; - } - } - } - if( boids > 0 ) { - hunting.div(boids).sub(position); - hunting.setLength(VELOCITY_LIMIT).sub(velocity); - hunting.limit(FORCE_LIMIT); - hunting.scale(HUNTING_FACTOR); - } - if( predators > 0 ) { - separation.div(predators); - separation.setLength(VELOCITY_LIMIT).sub(velocity); - separation.limit(FORCE_LIMIT); - separation.scale(AVOIDANCE_FACTOR); - } - - acceleration - .scale(0.0) - .add(hunting) - .add(separation); - - position.add(velocity); - limitPosition(); - velocity.add(acceleration).limit(VELOCITY_LIMIT); - } - -} diff --git a/examples/zm_boids/package.bluej b/examples/zm_boids/package.bluej deleted file mode 100644 index 667b354..0000000 --- a/examples/zm_boids/package.bluej +++ /dev/null @@ -1,55 +0,0 @@ -#BlueJ package file -dependency1.from=Attractor -dependency1.to=Gravity -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=380 -target1.y=220 -target2.height=70 -target2.name=Attractor -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=380 -target2.y=350 -target3.height=70 -target3.name=Gravity -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=120 -target3.y=120 diff --git a/examples/zm_boids/pointer.png b/examples/zm_boids/pointer.png deleted file mode 100644 index cba0d89..0000000 Binary files a/examples/zm_boids/pointer.png and /dev/null differ diff --git a/examples/zm_cookieclicker/Cookieclicker.java b/examples/zm_cookieclicker/Cookieclicker.java deleted file mode 100644 index b981dbd..0000000 --- a/examples/zm_cookieclicker/Cookieclicker.java +++ /dev/null @@ -1,101 +0,0 @@ -import schule.ngb.zm.GraphicsLayer; -import schule.ngb.zm.Options; -import schule.ngb.zm.Zeichenmaschine; -import schule.ngb.zm.shapes.Picture; -import schule.ngb.zm.shapes.Text; - -import java.util.ArrayList; - -public class Cookieclicker extends Zeichenmaschine { - - public static void main( String[] args ) { - new Cookieclicker(); - } - - private int cookies = 0; - - private int cookiesPerClick = 1; - - private int grandmas = 0; - - private int autoclicker = 12, autoclickerTimer = 0, autoClickerDelay = 600; - - private Text tCookies, tShopGrandma, tShopAutoclicker; - - private Picture pCookie; - - private boolean cookieDown = false; - - public Cookieclicker() { - super(1280, 900, "Cookieclicker"); - } - - @Override - public void setup() { - pCookie = new Picture(width / 2, height / 2, "assets/cookie.png"); - pCookie.scale(.5); - shapes.add(pCookie); - - tCookies = new Text(width - 60, 60, "" + cookies); - tCookies.setAnchor(NORTHEAST); - tCookies.setStrokeColor(255); - tCookies.setFontsize(36); - shapes.add(tCookies); - - background.setColor(0); - } - - @Override - public void update( double delta ) { - tCookies.setText("" + cookies); - - autoclickerTimer -= (int)(delta * 1000.0); - if( autoclickerTimer <= 0 ) { - cookies += autoclicker; - autoclickerTimer += autoClickerDelay; - } - - synchronized( particles ) { - ArrayList remove = new ArrayList<>(); - for( NumberParticle p : particles ) { - if( p.isActive() ) { - p.update(delta); - } else { - remove.add(p); - } - } - for( NumberParticle p : remove ) { - particles.remove(p); - } - } - } - - @Override - public void draw() { - } - - ArrayList particles = new ArrayList<>(); - - @Override - public void mousePressed() { - if( pCookie.getBounds().contains(mouseX, mouseY) ) { - cookieDown = true; - cookies += cookiesPerClick; - pCookie.scale(.95); - - synchronized( particles ) { - NumberParticle p = new NumberParticle(mouseX, mouseY, cookiesPerClick); - particles.add(p); - shapes.add(p); - } - } - } - - @Override - public void mouseReleased() { - if( cookieDown ) { - pCookie.scale(1 / .95); - } - } - -} diff --git a/examples/zm_cookieclicker/NumberParticle.java b/examples/zm_cookieclicker/NumberParticle.java deleted file mode 100644 index f63a9a3..0000000 --- a/examples/zm_cookieclicker/NumberParticle.java +++ /dev/null @@ -1,33 +0,0 @@ -import schule.ngb.zm.Updatable; -import schule.ngb.zm.shapes.Text; - -public class NumberParticle extends Text implements Updatable { - - double sinOffset, life = 0; - - public NumberParticle( double x, double y, int number ) { - super(x,y,"+"+number); - sinOffset = random(0.0, PI); - life = 1.5; - setStrokeColor(255); - setFontsize(36); - } - - @Override - public boolean isActive() { - return (life > 0); - } - - @Override - public void update( double delta ) { - if( isActive() ) { - double deltaX = sin(sinOffset + life); - x += deltaX; - y -= 100*delta; - - life -= delta; - setStrokeColor(strokeColor, (int) interpolate(0, 255, life / 1.5)); - } - } - -} diff --git a/examples/zm_cookieclicker/NumberParticleEmitter.java b/examples/zm_cookieclicker/NumberParticleEmitter.java deleted file mode 100644 index 5b36b4d..0000000 --- a/examples/zm_cookieclicker/NumberParticleEmitter.java +++ /dev/null @@ -1,111 +0,0 @@ -import schule.ngb.zm.Drawable; -import schule.ngb.zm.Updatable; -import schule.ngb.zm.shapes.Text; - -import java.awt.Graphics2D; -import java.util.ArrayList; - -public class NumberParticleEmitter implements Updatable, Drawable { - - public class NumberParticle extends Text implements Updatable { - - double velX = 0, velY = 0, accX = 0, accY = 0; - - double life = 0; - - public NumberParticle() { - super(0, 0, "0"); - // life = particleLifespan; - } - - @Override - public boolean isActive() { - return (life <= 0); - } - - public void activate() { - x = emitterX; - y = emitterY; - life = particleLifespan; - } - - @Override - public void update( double delta ) { - if( isActive() ) { - velX += accX; - velY += accY; - x += velX; - y += velY; - - life -= delta; - setFillColor(fillColor, (int) interpolate(0, 255, life / particleLifespan)); - } - } - - } - - private int particlesPerSecond, maxParticles; - - private double particleLifespan; - - private ArrayList particles; - - private int activeParticles = 0; - - private double lastEmit = 0.0; - - private double emitterX, emitterY; - - public NumberParticleEmitter( double x, double y, int particlesPerSecond, double particleLifespan ) { - emitterX = x; - emitterY = y; - - this.particlesPerSecond = particlesPerSecond; - this.particleLifespan = particleLifespan; - - maxParticles = (int) Math.ceil(particlesPerSecond * particleLifespan); - particles = new ArrayList<>(maxParticles); - - for( int i = 0; i < maxParticles; i++ ) { - particles.add(new NumberParticle()); - } - } - - @Override - public boolean isVisible() { - return activeParticles > 0; - } - - @Override - public void draw( Graphics2D graphics ) { - for( NumberParticle p : particles ) { - if( p.isActive() ) { - p.draw(graphics); - } - } - } - - @Override - public boolean isActive() { - return isVisible(); - } - - public void emitParticle( int number ) { - particles.add(new NumberParticle()); - } - - @Override - public void update( double delta ) { - //lastEmit -= delta; - - for( NumberParticle p : particles ) { - if( p.isActive() ) { - p.update(delta); - } /*else if( lastEmit <= 0 ) { - p.activate(); - lastEmit += 1/(double)particlesPerSecond; - }*/ - } - } - -} diff --git a/examples/zm_cookieclicker/ParticleTest.java b/examples/zm_cookieclicker/ParticleTest.java deleted file mode 100644 index 700298f..0000000 --- a/examples/zm_cookieclicker/ParticleTest.java +++ /dev/null @@ -1,36 +0,0 @@ -import schule.ngb.zm.GraphicsLayer; -import schule.ngb.zm.Zeichenmaschine; - -public class ParticleTest extends Zeichenmaschine { - - public static void main( String[] args ) { - new ParticleTest(); - } - - private NumberParticleEmitter emitter; - - private GraphicsLayer graphics; - - public ParticleTest() { - super(800,800, "Particles"); - } - - @Override - public void setup() { - graphics = new GraphicsLayer(); - canvas.addLayer(graphics); - - emitter = new NumberParticleEmitter(400, 400, 1, 10); - } - - @Override - public void update( double delta ) { - emitter.update(delta); - } - - @Override - public void draw() { - emitter.draw(graphics.getGraphics()); - } - -} diff --git a/examples/zm_cookieclicker/assets/Cookie.png b/examples/zm_cookieclicker/assets/Cookie.png deleted file mode 100644 index 231b81b..0000000 Binary files a/examples/zm_cookieclicker/assets/Cookie.png and /dev/null differ diff --git a/examples/zm_cookieclicker/package.bluej b/examples/zm_cookieclicker/package.bluej deleted file mode 100644 index 667b354..0000000 --- a/examples/zm_cookieclicker/package.bluej +++ /dev/null @@ -1,55 +0,0 @@ -#BlueJ package file -dependency1.from=Attractor -dependency1.to=Gravity -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=380 -target1.y=220 -target2.height=70 -target2.name=Attractor -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=380 -target2.y=350 -target3.height=70 -target3.name=Gravity -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=120 -target3.y=120 diff --git a/examples/zm_follow/Eye.java b/examples/zm_follow/Eye.java deleted file mode 100644 index 671c0db..0000000 --- a/examples/zm_follow/Eye.java +++ /dev/null @@ -1,51 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.DrawingLayer; -import schule.ngb.zm.Vector; -import schule.ngb.zm.Zeichenobjekt; - -public class Eye extends Zeichenobjekt { - - private Vector position; - - private double size; - - private Color color; - - public Eye() { - position = Vector.random(0, width, 0, height); - size = random(10.0, 25.0); - color = null; - } - - public Eye( float x, float y ) { - position = new Vector(x, y); - size = random(10.0, 25.0); - color = null; - } - - public Eye( float x, float y, Color color ) { - position = new Vector(x, y); - size = random(10.0, 25.0); - this.color = color; - } - - @Override - public void draw( DrawingLayer drawing ) { - Vector dir = Vector.sub(new Vector(mouseX, mouseY), position); - double len = dir.length(); - - drawing.setStrokeColor(0); - if( color == null ) { - drawing.setFillColor(colorHsb(354, 100.0 - limit(len, 0.0, 100.0), 100)); - } else { - drawing.setFillColor(color); - } - drawing.circle(position.x, position.y, size); - - - Vector pupil = Vector.add(position, dir.limit(size*.4)); - - drawing.setFillColor(0); - drawing.circle(pupil.x, pupil.y, size*.4); - } -} diff --git a/examples/zm_follow/Eyes.java b/examples/zm_follow/Eyes.java deleted file mode 100644 index d989711..0000000 --- a/examples/zm_follow/Eyes.java +++ /dev/null @@ -1,38 +0,0 @@ -import schule.ngb.zm.Zeichenmaschine; - -public class Eyes extends Zeichenmaschine { - - public static final int N_EYES = 30; - - public static void main( String[] args ) { - new Eyes(); - } - - Eye[] eyes; - - public Eyes() { - super(600, 600, "Eyes"); - } - - @Override - public void setup() { - eyes = new Eye[N_EYES]; - for( int i = 0; i < eyes.length; i++ ) { - eyes[i] = new Eye(); - } - } - - @Override - public void update( double delta ) { - - } - - @Override - public void draw() { - drawing.clear(200); - - for( int i = 0; i < eyes.length; i++ ) { - eyes[i].draw(drawing); - } - } -} diff --git a/examples/zm_follow/package.bluej b/examples/zm_follow/package.bluej deleted file mode 100644 index 667b354..0000000 --- a/examples/zm_follow/package.bluej +++ /dev/null @@ -1,55 +0,0 @@ -#BlueJ package file -dependency1.from=Attractor -dependency1.to=Gravity -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=380 -target1.y=220 -target2.height=70 -target2.name=Attractor -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=380 -target2.y=350 -target3.height=70 -target3.name=Gravity -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=120 -target3.y=120 diff --git a/examples/zm_forces/Atoms.java b/examples/zm_forces/Atoms.java deleted file mode 100644 index da47d15..0000000 --- a/examples/zm_forces/Atoms.java +++ /dev/null @@ -1,94 +0,0 @@ -import schule.ngb.zm.Zeichenmaschine; - -import java.util.LinkedList; - -public class Atoms extends Zeichenmaschine { - - /** - * Liste der beweglichen Objekte in der Welt. - */ - private LinkedList movers = new LinkedList<>(); - - /** - * Liste der Gravitationsquellen in der Welt. - */ - private LinkedList attractors = new LinkedList<>(); - - /** - * Erstellt die {@link Mover}- und {@link Attractor}-Objekte. - */ - public void setup() { - addAttractor( width / 2, height / 2, 20 ); - attractors.getFirst().setMovable(false); - attractors.getFirst().setActive(false); - attractors.getFirst().hide(); - - addAttractor( width*.4, height*.4, 8 ); - addAttractor( width*.6, height*.6, 8 ); - - for( int i = 0; i < 10; i++ ) { - Mover m = new Mover(random(10, width - 10), random(10, height - 10)); - movers.add(m); - shapes.add(m); - } - } - - private void addAttractor( double pX, double pY, int pMass ) { - Attractor a = new Attractor((int)pX, (int)pY, pMass); - attractors.add(a); - movers.add(a); - shapes.add(a); - } - - /** - * Aktualisiert die Beschleunigung der {@link Mover}-Objekte durch Anwenden - * der einwirkenden Kräfte und aktualisiert dann die Position entsprechend - * der Beschleunigung. - *

- * Die Position des ersten {@link Attractor} wird auf die Mausposition - * gesetzt. - * - * @param delta - */ - public void update( double delta ) { - // Erste Gravitationsquelle auf Mausposition setzen. - Attractor mouseFollow = attractors.get(0); - if( mouseFollow.isActive() ) { - mouseFollow.moveTo(mouseX, mouseY); - } - - // Kräfte anwenden - for( Attractor a : attractors ) { - if( a.isActive() ) { - for( Mover m : movers ) { - if( m.isActive() ) { - a.attract(m); - } - } - } - } - - // Position aktualisieren - for( Mover m : movers ) { - if( m.isActive() ) { - m.update(delta); - } - } - } - - /** - * Setzt die Position und Beschleunigung aller {@link Mover}-Objekte in der - * Welt zurück. - */ - public void mouseClicked() { - for( Mover m : movers ) { - m.moveTo(random(10, width - 10), random(10, height - 10)); - m.setVelocity(0, 0); - } - } - - public static void main( String[] args ) { - new Atoms(); - } - -} diff --git a/examples/zm_forces/Attractor.java b/examples/zm_forces/Attractor.java deleted file mode 100644 index e95c2b9..0000000 --- a/examples/zm_forces/Attractor.java +++ /dev/null @@ -1,110 +0,0 @@ -import schule.ngb.zm.Vector; - -import java.awt.Graphics2D; -import java.awt.geom.AffineTransform; - -/** - * Gravitationsquelle in der Simulation. - *

- * Eine Gravitationsquelle zieht mit einer Anziehungskraft proportional zu - * seiner Masse alle {@link Mover}-Objekte an. Dabei kommt die Newtonsche - * Gravitationsformel zur Anwendung. - *

- * Ein Attractor ist auch ein {@link Mover} und wird von anderen - * Gravitationsquellen beeinflusst. Dieses Verhalten kann durch Setzen von - * setMovable(false) abgeschaltet werden. - */ -public class Attractor extends Mover { - - /** - * Gravitationskonstante - *

- * Beeinflusst die Stärke der Anziehungskraft der {@link Attractor}en. - */ - public static final int G = 25; - - /** - * Ob dieser Attractor auch von anderen Kräften beeinflusst wird. - */ - private boolean movable = true; - - /** - * Erstellt einen Attractor an der angegebenen Position mit der angegebenen - * Masse. - * - * @param pX x-Koordinate des Objektes. - * @param pY y-Koordinate des Objektes. - * @param pMass Masse des Objektes. - */ - public Attractor( int pX, int pY, int pMass ) { - this(pX, pY, pMass, new Vector()); - } - - /** - * Erstellt einen Attractor an der angegebenen Position - * - * @param pX x-Koordinate des Objektes. - * @param pY y-Koordinate des Objektes. - * @param pMass Masse des Objektes. - * @param pVelocity Initialgeschwindigkeit des Objektes. - */ - public Attractor( int pX, int pY, int pMass, Vector pVelocity ) { - super(pX, pY, pVelocity); - mass = pMass; - - setFillColor(randomColor()); - } - - /** - * Stellt ein, ob dieser Attractor auch von anderen Kräften - * beeinflusst wird, oder ob er starr an einer Position bleibt. - * - * @param pMovable true oder false. - */ - public void setMovable( boolean pMovable ) { - this.movable = pMovable; - } - - /** - * Wendet die Anziehungskraft des Attractor auf einen - * Mover an. - * - * @param pMover Das Objekt, das angezogen wird. - */ - public void attract( Mover pMover ) { - if( pMover != this && isActive() ) { - Vector force = new Vector(this.x, this.y); - force.sub(pMover.getX(), pMover.getY()); - double v = G * mass / force.lengthSq(); - force.setLength(v).limit(1.0, 4 * G); - pMover.applyForce(force); - } - } - - /** - * Aktualisiert die momentante Geschwindigkeit und Position des Objektes und - * setzt die Beschleunigung zurück. - * - * @param delta Zeitintervall seit dem letzten Aufruf (in Sekunden). - */ - @Override - public void update( double delta ) { - if( movable ) { - super.update(delta); - } - } - - @Override - public void draw( Graphics2D graphics, AffineTransform transform ) { - double m = 2.0*mass; - - AffineTransform at = graphics.getTransform(); - graphics.transform(transform); - graphics.setColor(new java.awt.Color(255,193,64,66)); - graphics.fillOval((int)(-.5*m), (int)(-.5*m), (int)(2*getRadius()+m), (int)(2*getRadius()+m)); - graphics.setTransform(at); - - super.draw(graphics, transform); - } - -} diff --git a/examples/zm_forces/Gravity.java b/examples/zm_forces/Gravity.java deleted file mode 100644 index 96aec5e..0000000 --- a/examples/zm_forces/Gravity.java +++ /dev/null @@ -1,92 +0,0 @@ -import schule.ngb.zm.Vector; -import schule.ngb.zm.Zeichenmaschine; - -import java.util.LinkedList; - -/** - * Hauptklasse der Simulation. - */ -public class Gravity extends Zeichenmaschine { - - /** - * Liste der beweglichen Objekte in der Welt. - */ - private LinkedList movers = new LinkedList<>(); - - private final Vector gravity = new Vector(0, 6.734); - - /** - * Erstellt die {@link Mover}-Objekte. - */ - public void setup() { - for( int i = 0; i < 4; i++ ) { - //Mover m = new Mover(random(10, width - 10), 30); - Mover m = new Mover(10 + (i*30), 30, 5*(i+1)); - movers.add(m); - shapes.add(m); - } - } - - /** - * Aktualisiert die Beschleunigung der {@link Mover}-Objekte durch Anwenden - * der einwirkenden Kräfte und aktualisiert dann die Position entsprechend - * der Beschleunigung. - *

- * Die Position des ersten {@link Attractor} wird auf die Mausposition - * gesetzt. - * - * @param delta - */ - public void update( double delta ) { - // Kräfte anwenden - for( Mover m : movers ) { - if( m.isActive() ) { - m.applyForce(gravity); - } - } - - // Position aktualisieren - for( Mover m : movers ) { - if( m.isActive() ) { - m.update(delta); - - // Abprallen Boden - if( m.getY() >= height ) { - m.setY(height-1); - - m.getVelocity().y *= -1; - double s = 9.0 / m.getMass(); - m.getVelocity().scale(limit(s, 0.0, 1.0)); - } - // Abprallen rechter Rand - if( m.getX() >= width ) { - m.setX(width-1); - m.getVelocity().x *= -1; - } - // Abprallen linker Rand - if( m.getX() <= 0) { - m.setX(1); - m.getVelocity().x *= -1; - } - } - } - } - - /** - * Setzt die Position und Beschleunigung aller {@link Mover}-Objekte in der - * Welt zurück. - */ - public void mouseClicked() { - background.setColor(randomNiceColor()); - for( Mover m : movers ) { - m.moveTo(random(10, width - 10), 30); - m.setVelocity(mouseX-m.getX(), mouseY-m.getY()); - m.getVelocity().setLength(4.0); - } - } - - public static void main( String[] args ) { - new Gravity(); - } - -} diff --git a/examples/zm_forces/Mover.java b/examples/zm_forces/Mover.java deleted file mode 100644 index 4299c42..0000000 --- a/examples/zm_forces/Mover.java +++ /dev/null @@ -1,186 +0,0 @@ -import schule.ngb.zm.Updatable; -import schule.ngb.zm.Vector; -import schule.ngb.zm.shapes.Arrow; -import schule.ngb.zm.shapes.Circle; - -import java.awt.Graphics2D; -import java.awt.geom.AffineTransform; - -/** - * Ein bewegliches Objekt in der Simulation. - * - * Mover werden durch Kräfte beeinflusst. Diese Kräfte können von - * unterschiedlichen Quellen ausgehen. Die {@link Attractor}en wirken zum - * Beispiel mit ihrer Anziehungskraft auf die Mover ein. - */ -public class Mover extends Circle implements Updatable { - - /** - * Größe der Objekte in der Simulation. - */ - public static final int SIZE = 10; - - /** - * Ob die momentane Geschwindigkeit der Objekte als Pfeil dargestellt werden soll. - */ - public static final boolean SHOW_VELOCITY = true; - - - /** - * Masse des Objektes. - */ - protected double mass = 10.0; - - /** - * Ob dieses Objekt an der Simulation beteiligt ist. - */ - protected boolean active = true; - - /** - * Momentane Geschwindigkeit des Objektes. - */ - private Vector velocity; - - /** - * Momentane Beschleunigung des Objektes. - */ - private Vector acceleration = new Vector(); - - /** - * Erstellt einen Mover an der angegebenen Position mit der momentanen - * Geschwindigkeit (0, 0). - * - * @param pX x-Position des Objektes. - * @param pY y-Position des Objektes. - */ - public Mover( int pX, int pY ) { - this(pX, pY, new Vector()); - } - - - /** - * Erstellt einen Attractor an der angegebenen Position mit der angegebenen - * Masse. - * - * @param pX x-Koordinate des Objektes. - * @param pY y-Koordinate des Objektes. - * @param pMass Masse des Objektes. - */ - public Mover( int pX, int pY, int pMass ) { - this(pX, pY, pMass, new Vector()); - } - - /** - * Erstellt einen Mover an der angegebenen Position mit der angegebenen - * Initialgeschwindigkeit. - * - * @param pX x-Position des Objektes. - * @param pY y-Position des Objektes. - * @param pVelocity Momentane Geschwindigkeit des Objektes. - */ - public Mover( int pX, int pY, Vector pVelocity ) { - super(pX, pY, SIZE); - velocity = pVelocity.copy(); - } - - /** - * Erstellt einen Attractor an der angegebenen Position - * - * @param pX x-Koordinate des Objektes. - * @param pY y-Koordinate des Objektes. - * @param pMass Masse des Objektes. - * @param pVelocity Initialgeschwindigkeit des Objektes. - */ - public Mover( int pX, int pY, int pMass, Vector pVelocity ) { - super(pX, pY, SIZE); - mass = pMass; - velocity = pVelocity.copy(); - } - - /** - * Gibt die Masse des Objektes zurück. - * - * @return Die Masse des Objektes. - */ - public double getMass() { - return mass; - } - - /** - * Gibt die momentane Geschwindigkeit zurück. - * @return Die momentane Geschwindigkeit als Vektor. - */ - public Vector getVelocity() { - return velocity; - } - - /** - * Setzt die momentane Geschwindigkeit des Objektes. - * - * @param pDx Momentane Geschwindigkeit in x-Richtung. - * @param pDy Momentane Geschwindigkeit in y-Richtung. - */ - public void setVelocity( double pDx, double pDy ) { - velocity.set(pDx, pDy); - } - - /** - * Addiert eine Kraft zur momentanen Beschleunigung des Objektes. Die - * Beschleunigung wird einmal pro Update auf die Geschwindigkeit angewandt - * und dann wieder auf (0, 0) gesetzt. - * - * @param force Ein Vektor, der die Kraft darstellt. - */ - public void applyForce( Vector force ) { - acceleration.add(force); - } - - /** - * Ob dieses Objekt aktiv ist und Updates erhalten soll. - * - * @return Ob das Objekt simuliert wird. - */ - public boolean isActive() { - return active; - } - - /** - * Aktiviert / Deaktiviert das Objekt. - * @param pActive - */ - public void setActive( boolean pActive ) { - this.active = pActive; - } - - /** - * Aktualisiert die momentante Geschwindigkeit und Position des Objektes und - * setzt die Beschleunigung zurück. - * - * @param delta Zeitintervall seit dem letzten Aufruf (in Sekunden). - */ - public void update( double delta ) { - acceleration.scale(delta); - velocity.add(acceleration); - acceleration.scale(0.0); - - if( velocity.length() > 0.5 ) { - this.x += velocity.x; - this.y += velocity.y; - } - } - - @Override - public void draw( Graphics2D graphics, AffineTransform transform ) { - if( SHOW_VELOCITY ) { - Vector v = velocity.copy().scale(10); - Arrow ar = new Arrow(v); - - AffineTransform af = new AffineTransform(transform); - af.translate(radius, radius); - ar.draw(graphics, af); - } - - super.draw(graphics, transform); - } - -} diff --git a/examples/zm_forces/package.bluej b/examples/zm_forces/package.bluej deleted file mode 100644 index 667b354..0000000 --- a/examples/zm_forces/package.bluej +++ /dev/null @@ -1,55 +0,0 @@ -#BlueJ package file -dependency1.from=Attractor -dependency1.to=Gravity -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=380 -target1.y=220 -target2.height=70 -target2.name=Attractor -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=380 -target2.y=350 -target3.height=70 -target3.name=Gravity -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=120 -target3.y=120 diff --git a/examples/zm_formen/Dreieck.java b/examples/zm_formen/Dreieck.java deleted file mode 100644 index a14789a..0000000 --- a/examples/zm_formen/Dreieck.java +++ /dev/null @@ -1,33 +0,0 @@ - -/** - * Beschreiben Sie hier die Klasse Dreieck. - * - * @author (Ihr Name) - * @version (eine Versionsnummer oder ein Datum) - */ -public class Dreieck -{ - // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen - private int x; - - /** - * Konstruktor für Objekte der Klasse Dreieck - */ - public Dreieck() - { - // Instanzvariable initialisieren - x = 0; - } - - /** - * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen - * - * @param y ein Beispielparameter für eine Methode - * @return die Summe aus x und y - */ - public int beispielMethode(int y) - { - // tragen Sie hier den Code ein - return x + y; - } -} diff --git a/examples/zm_formen/Kreis.java b/examples/zm_formen/Kreis.java deleted file mode 100644 index c3559c3..0000000 --- a/examples/zm_formen/Kreis.java +++ /dev/null @@ -1,88 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Drawable; - -import java.awt.Graphics2D; - -public class Kreis implements Drawable { - - private int x; - - private int y; - - private int radius; - - private Color farbe; - - private Color linienfarbe; - - private boolean sichtbar; - - public Kreis() { - x = 420; - y = 420; - - radius = 80; - - farbe = Color.BLUE; - linienfarbe = Color.BLACK; - - sichtbar = true; - } - - public void anzeigen() { - sichtbar = true; - } - - public void verstecken() { - sichtbar = false; - } - - public void setPosition( int pX, int pY ) { - x = pX; - y = pY; - } - - public void links() { - x -= 10; - } - - public void rechts() { - x += 10; - } - - public void hoch() { - y -= 10; - } - - public void runter() { - y += 10; - } - - public void setRadius( int pRadius ) { - radius = pRadius; - } - - public void setFarbe( String pFarbe ) { - farbe = Color.parseString(pFarbe); - } - - public void setLinienfarbe( String pLinienfarbe ) { - linienfarbe = Color.parseString(pLinienfarbe); - } - - @Override - public boolean isVisible() { - return sichtbar; - } - - @Override - public void draw( Graphics2D graphics ) { - if( x-(radius/2.0) > 0 && x+(radius/2.0) < 800 && y-(radius/2.0) > 0 && y+(radius/2.0) < 800 ) { - graphics.setColor(farbe.getJavaColor()); - graphics.fillOval(x, y, radius, radius); - graphics.setColor(linienfarbe.getJavaColor()); - graphics.drawOval(x, y, radius, radius); - } - } - -} diff --git a/examples/zm_formen/Leinwand.java b/examples/zm_formen/Leinwand.java deleted file mode 100644 index 2e51cec..0000000 --- a/examples/zm_formen/Leinwand.java +++ /dev/null @@ -1,29 +0,0 @@ -import schule.ngb.zm.Drawable; -import schule.ngb.zm.DrawableLayer; -import schule.ngb.zm.Zeichenmaschine; - -public class Leinwand { - - private final Zeichenmaschine zm; - - private final DrawableLayer zeichenflaeche; - - public Leinwand() { - zm = new Zeichenmaschine(800, 800, "ZM: Shapes", false); - zeichenflaeche = new DrawableLayer(); - zm.addLayer(zeichenflaeche); - } - - public void anzeigen( Drawable pForm ) { - zeichenflaeche.add(pForm); - } - - public void beenden() { - zm.exit(); - } - - public void zeichnen() { - zm.redraw(); - } - -} diff --git a/examples/zm_formen/Rechteck.java b/examples/zm_formen/Rechteck.java deleted file mode 100644 index 985a60d..0000000 --- a/examples/zm_formen/Rechteck.java +++ /dev/null @@ -1,95 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Drawable; - -import java.awt.Graphics2D; - -public class Rechteck implements Drawable { - - private int x; - - private int y; - - private int breite; - - private int hoehe; - - private Color farbe; - - private Color linienfarbe; - - private boolean sichtbar; - - public Rechteck() { - x = 320; - y = 240; - - breite = 100; - hoehe = 60; - - farbe = Color.RED; - linienfarbe = Color.BLACK; - - sichtbar = true; - } - - public void anzeigen() { - sichtbar = true; - } - - public void verstecken() { - sichtbar = false; - } - - public void setPosition( int pX, int pY ) { - x = pX; - y = pY; - } - - public void links() { - x -= 10; - } - - public void rechts() { - x += 10; - } - - public void hoch() { - y -= 10; - } - - public void runter() { - y += 10; - } - - public void setBreite( int pBreite ) { - breite = pBreite; - } - - public void setHoehe( int pHoehe ) { - hoehe = pHoehe; - } - - public void setFarbe( String pFarbe ) { - farbe = Color.parseString(pFarbe); - } - - public void setLinienfarbe( String pLinienfarbe ) { - linienfarbe = Color.parseString(pLinienfarbe); - } - - @Override - public boolean isVisible() { - return sichtbar; - } - - @Override - public void draw( Graphics2D graphics ) { - if( x-(breite/2.0) > 0 && x+(breite/2.0) < 800 && y-(hoehe/2.0) > 0 && y+(hoehe/2.0) < 800 ) { - graphics.setColor(farbe.getJavaColor()); - graphics.fillRect(x, y, breite, hoehe); - graphics.setColor(linienfarbe.getJavaColor()); - graphics.drawRect(x, y, breite, hoehe); - } - } - -} diff --git a/examples/zm_formen/package.bluej b/examples/zm_formen/package.bluej deleted file mode 100644 index f929cf9..0000000 --- a/examples/zm_formen/package.bluej +++ /dev/null @@ -1,53 +0,0 @@ -#BlueJ package file -editor.fx.0.height=728 -editor.fx.0.width=800 -editor.fx.0.x=488 -editor.fx.0.y=107 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=36 -package.editor.y=155 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=0 -package.numTargets=4 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=30 -target1.name=Rechteck -target1.showInterface=false -target1.type=ClassTarget -target1.width=70 -target1.x=190 -target1.y=50 -target2.height=30 -target2.name=Dreieck -target2.showInterface=false -target2.type=ClassTarget -target2.width=70 -target2.x=190 -target2.y=170 -target3.height=30 -target3.name=Kreis -target3.showInterface=false -target3.type=ClassTarget -target3.width=70 -target3.x=190 -target3.y=110 -target4.height=60 -target4.name=Leinwand -target4.showInterface=false -target4.type=ClassTarget -target4.width=120 -target4.x=40 -target4.y=100 diff --git a/examples/zm_gallery/Gallery.java b/examples/zm_gallery/Gallery.java deleted file mode 100644 index 3d98043..0000000 --- a/examples/zm_gallery/Gallery.java +++ /dev/null @@ -1,257 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Zeichenmaschine; - -/** - * Eine Bildergallerie von Bildern eines Informatikkurses des 10. Jahrgangs. - */ -public class Gallery extends Zeichenmaschine { - - public static void main(String[] args) { - new Gallery(); - } - - public void setup() { - setSize(600, 600); - setTitle("ZM: Gallery"); - } - - /** - * Wählt ein zufälliges Bild aus und zeigt es an. - */ - public void draw() { - drawRandom(); - } - - /** - * Zeigt ein zufälliges Bild an. - */ - public void drawRandom() { - switch (random(0, 4)) { - case 0: - rainbow(); - break; - case 1: - snowman(); - break; - case 2: - deathstar(); - break; - case 3: - prideflag(); - break; - } - } - - /** - * Bei Betätigen der Leertaste ein Zufallsbild anzeigen. - */ - public void keyPressed() { - if (keyCode == 32) { - drawRandom(); - } - } - - /** - * Startet eine fortlaufende Präsentation aller Bilder. - * - * @param pWartezeit Die Wartezeit zum nächsten Bildwechsel in Millisekunden. - */ - public void slideshow(int pWartezeit) { - int i = 0; - while (true) { - switch (i) { - case 0: - rainbow(); - break; - case 1: - snowman(); - break; - case 2: - deathstar(); - break; - case 3: - prideflag(); - break; - } - - i = (i + 1) % 4; - delay(pWartezeit); - } - } - - /** - * Regenbogen - *

- * von - */ - public void rainbow() { - // Blauer Hintergrund - drawing.clear(60, 155, 217); - - // Einige Werte berechnen, um Bild an Bildgröße anzupassen - double size = (width + height) * 0.03333; - double r = width / 2.0; - - // Kleiner werdende Kreise in den Farben des Bogens zeichnen - drawing.noStroke(); - drawing.setFillColor(207, 71, 67); - drawing.circle(width / 2.0, height, r - 1 * size); - drawing.setFillColor(235, 134, 42); - drawing.circle(width / 2.0, height, r - 2 * size); - drawing.setFillColor(234, 181, 58); - drawing.circle(width / 2.0, height, r - 3 * size); - // Mitte mit "himmelfarbe" übermalen, um Ringe zu erzeugen - drawing.setFillColor(60, 155, 217); - drawing.circle(width / 2.0, height, r - 4 * size); - - // Sonne zeichnen - drawing.setFillColor(232, 200, 52); - drawing.circle(width * 0.8333, size * 2.6666, size * 2); - - // Bild auf Leinwand übertragen - redraw(); - } - - /** - * LGBTQ-Flagge - *

- * von - */ - public void prideflag() { - // Schwarzer Hintergrund - drawing.clear(0); - drawing.setStrokeColor(0); - - // Farben der Streifen festlegen - Color[] colors = new Color[] { - RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE - }; - - // Breite der Streifen an Bildgröße anpassen - double size = height * 0.06666; - double borderX = width / 6.0, borderY = height / 6.0; - - // Flaggenstab zeichnen - drawing.setFillColor(BROWN); - drawing.rect(borderX, borderY, size, height - 2 * borderY, NORTHWEST); - // Streifen zeichnen - for (int i = 0; i < colors.length; i++) { - drawing.setFillColor(colors[i]); - drawing.rect(borderX, borderY + i * size, width - 2 * borderX, size, NORTHWEST); - } - - // Bild auf Leinwand übertragen - redraw(); - } - - /** - * Todesstern - *

- * von Niklas, Henry und Ben - */ - public void deathstar() { - // Sternenhimmel zeichnen - drawing.clear(0); - drawing.noStroke(); - drawing.setFillColor(WHITE); - - // Zufällig erzeugte Sterne - for (int i = 0; i < (width + height) / 4; i++) { - drawing.circle(random(0.0, width), random(0.0, height), random(1, 3)); - } - - // Einige Werte berechnen, die später verwendet werden, um - // die Zeichnung an die Bildschirmgröße anzupassen. - double radius = limit(width * 0.6666, 0.0, height * 0.6666) / 2.0; - double w2 = width / 2.0, h2 = height / 2.0; - double r2 = radius / 2.0, - r3 = radius / 3.0, r4 = radius / 4.0, - r5 = radius / 5.0, r10 = radius / 10.0; - - // Korpus zeichnen - drawing.setFillColor(128); - drawing.circle(width / 2.0, height / 2.0, radius); - // Graben am Äquator zeichnen - drawing.setStrokeColor(0); - drawing.setStrokeWeight(1.4); - drawing.arc(width / 2.0, height / 2.0, radius + radius, r2, 180, 360); - - // Schüssel zeichnen - drawing.setFillColor(96); - drawing.circle(w2 + r2, h2 - r3, r4); - drawing.setFillColor(84); - drawing.circle(w2 + r2 + 2, h2 - r3 - 2, r10); - - // Strahlen des Lasers zeichnen - int beams = 8; // Anzahl Strahlen - for (int i = 0; i < beams; i++) { - drawing.setStrokeColor(GREEN); - drawing.setStrokeType(SOLID); - drawing.setStrokeWeight(1.6); - drawing.line( - w2 + r2 - r4 * cos(radians(360 / beams * i)), - h2 - r3 + r4 * sin(radians(360 / beams * i)), - w2 + r2 + 2 + r5, - h2 - r3 - 2 - r5); - - drawing.setStrokeType(DASHED); - drawing.setStrokeWeight(3.0); - drawing.line( - w2 + r2 - r4 * cos(radians(360 / beams * i)), - h2 - r3 + r4 * sin(radians(360 / beams * i)), - w2 + r2 + 2 + r5, - h2 - r3 - 2 - r5); - - drawing.setStrokeColor(WHITE); - drawing.setStrokeType(SOLID); - drawing.setStrokeWeight(1.0); - drawing.line( - w2 + r2 - r4 * cos(radians(360 / beams * i)), - h2 - r3 + r4 * sin(radians(360 / beams * i)), - w2 + r2 + 2 + r5, - h2 - r3 - 2 - r5); - } - - // Hauptstrahl - drawing.setStrokeColor(GREEN); - drawing.setStrokeType(SOLID); - drawing.setStrokeWeight(4); - drawing.line(w2 + r2 + 2 + r5, h2 - r3 - 2 - r5, width, h2 - w2 + radius / 6.0); - drawing.setStrokeWeight(1); - drawing.setStrokeColor(255); - drawing.line(w2 + r2 + 2 + r5, h2 - r3 - 2 - r5, width, h2 - w2 + radius / 6.0); - - // Bild auf Leinwand übertragen - redraw(); - } - - /** - * Schneemann - *

- * von - */ - public void snowman() { - // Hellblauer Hintergrund - drawing.clear(219, 253, 255); - drawing.noStroke(); - drawing.setFillColor(255); - - // Drei Schneekugeln - drawing.circle(width / 2.0, height - 100, 100); - drawing.circle(width / 2.0, height - 180 - 60, 60); - drawing.circle(width / 2.0, height - 180 - 110 - 40, 40); - - // Zwei Augen - drawing.setFillColor(0); - drawing.circle(width / 2.0 - 15, height - 345, 4); - drawing.circle(width / 2.0 + 15, height - 345, 4); - - // Nase - drawing.setFillColor(255, 147, 0); - drawing.triangle(width / 2.0, height - 335, width / 2.0 - 5, height - 330, width / 2.0 + 5, height - 330); - - // Bild auf Leinwand übertragen - redraw(); - } - -} diff --git a/examples/zm_gallery/README.TXT b/examples/zm_gallery/README.TXT deleted file mode 100644 index faaa609..0000000 --- a/examples/zm_gallery/README.TXT +++ /dev/null @@ -1,22 +0,0 @@ -# Zeichenmaschine: Gallery - -Die Bildergallerie ist eine Sammlung statischer Bilder, die mit der -Zeichenmaschine programmiert wurden. - -Die Bilder selbst wurden von einem Informatikkurs des Jahrgangs 10 in -Processing (https://processing.org) erstellt und für dieses Beispielprojekt -auf die Zeichenmaschine angespasst. - -Die Autoren der Bilder sind: -- Schneemann: -- Todesstern -- Regenbogen: -- LGBTQ-Flagge: - -## Verwendung - -Beim Start wird eines der vorhandenen Bilder ausgewählt und angezeigt. - -Mit der Methode "slideshow()" wird eine fortlaufende Präsentation der Bilder -gestartet. Die Wartezeit bis zum nächsten Bildwechsel kann als Parameter in -Millisekunden angegeben werden. diff --git a/examples/zm_gallery/package.bluej b/examples/zm_gallery/package.bluej deleted file mode 100644 index 8b02d61..0000000 --- a/examples/zm_gallery/package.bluej +++ /dev/null @@ -1,32 +0,0 @@ -#BlueJ package file -editor.fx.0.height=0 -editor.fx.0.width=0 -editor.fx.0.x=0 -editor.fx.0.y=0 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=0 -package.editor.y=0 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Gallery -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=70 -target1.y=10 diff --git a/examples/zm_generative/BouncingLine.java b/examples/zm_generative/BouncingLine.java deleted file mode 100644 index 39946dd..0000000 --- a/examples/zm_generative/BouncingLine.java +++ /dev/null @@ -1,77 +0,0 @@ -import schule.ngb.zm.Vector; -import schule.ngb.zm.Zeichenmaschine; - -public class BouncingLine extends Zeichenmaschine { - - public static void main( String[] args ) { - new BouncingLine(); - } - - private Vector start, end, dStart, dEnd; - - private int r, g, b; - - private boolean mouseFollow = false; - - public BouncingLine() { - super(800, 800, "Bouncing Lines"); - } - - @Override - public void setup() { - start = Vector.random(0, width, 0, height); - end = Vector.random(0, width, 0, height); - dStart = Vector.random(-5, 5); - dEnd = Vector.random(-5, 5); - - r = random(255); - g = random(255); - b = random(255); - } - - @Override - public void update( double delta ) { - start.add(dStart); - end.add(dEnd); - - if( start.x > width || start.x < 0 ) { - dStart.x *= -1; - } - if( end.x > width || end.x < 0 ) { - dEnd.x *= -1; - } - if( start.y > width || start.y < 0 ) { - dStart.y *= -1; - } - if( end.y > width || end.y < 0 ) { - dEnd.y *= -1; - } - - r += limit(random(-5, 5), 0, 255); - g += limit(random(-5, 5), 0, 255); - b += limit(random(-5, 5), 0, 255); - } - - @Override - public void draw() { - drawing.setStrokeColor(r, g, b); - drawing.line(start.x, start.y, end.x, end.y); - // bezier(0, 0, startX, startY, endX, endY, width, height); - } - - @Override - public void mouseClicked() { - mouseFollow = !mouseFollow; - } - - @Override - public void mouseMoved() { - if( mouseFollow ) { - dStart = new Vector(mouseX - start.x, mouseY - start.y); - dStart.setLength(5); - dEnd = new Vector(mouseX - end.x, mouseY - end.y); - dEnd.setLength(5); - } - } - -} diff --git a/examples/zm_generative/GenColors.java b/examples/zm_generative/GenColors.java deleted file mode 100644 index 3b478d1..0000000 --- a/examples/zm_generative/GenColors.java +++ /dev/null @@ -1,40 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Zeichenmaschine; - -public class GenColors extends Zeichenmaschine { - - public static void main( String[] args ) { - new GenColors(); - } - - public GenColors() { - super(800, 800, "Nice Colors"); - } - - @Override - public void setup() { - genPattern(); - } - - public void genPattern() { - drawing.noStroke(); - - int SIZE = 40; - for( int i = 0; i < width/SIZE; i++ ) { - for( int j = 0; j < height/SIZE; j++ ) { - Color c = randomNiceColor(); - float[] hsl = Color.RGBtoHSL(c.getRGBA(), null); - System.out.printf("%f, %f, %f\n", hsl[0], hsl[1], hsl[2]); - drawing.setFillColor(c); - drawing.square(i*SIZE, j*SIZE, SIZE, NORTHWEST); - } - } - } - - @Override - public void mouseClicked() { - genPattern(); - redraw(); - } - -} diff --git a/examples/zm_generative/GenHitomezashi.java b/examples/zm_generative/GenHitomezashi.java deleted file mode 100644 index f671637..0000000 --- a/examples/zm_generative/GenHitomezashi.java +++ /dev/null @@ -1,122 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Constants; -import schule.ngb.zm.Options; -import schule.ngb.zm.Zeichenmaschine; - -public class GenHitomezashi extends Zeichenmaschine { - - public static final int TILE_SIZE = 20; - - public static final int COLUMNS = 30; - - public static final int ROWS = 30; - - public static final double P = 0.5; - - public static final Color[] colors = new Color[]{ - randomNiceColor(), - randomNiceColor(), - color(241, 124, 55), - color(62, 156, 191) - }; - - private int[] stitchesX, stitchesY; - - public static void main( String[] args ) { - new GenHitomezashi(); - } - - - public GenHitomezashi() { - super(TILE_SIZE*COLUMNS, TILE_SIZE*ROWS, "Hitomezashi Pattern"); - } - - @Override - public void setup() { - drawing.setStrokeColor(0); - drawing.setFillColor(0); - - generatePattern(); - - pause(); - } - - public void generatePattern() { - stitchesX = new int[COLUMNS]; - for ( int i = 0; i < COLUMNS; i++ ) { - stitchesX[i] = random(0, 1) < P ? 1 : 0; - } - stitchesY = new int[COLUMNS]; - for ( int j = 0; j < ROWS; j++ ) { - stitchesY[j] = random(0, 1) < P ? 1 : 0; - } - } - - public boolean hasStitch( int i, int j, Options.Direction dir ) { - switch( dir ) { - case UP: - return (j > 0 && (stitchesY[j-1]+i)%2 == 1); - case DOWN: - return (j >= 0 && (stitchesY[j]+i)%2 == 1); - case LEFT: - return (i > 0 && (stitchesX[i-1]+j)%2 == 1); - case RIGHT: - return (i >= 0 && (stitchesX[i]+j)%2 == 1); - default: - return false; - } - } - - @Override - public void update( double delta ) { - - } - - @Override - public void draw() { - drawing.clear(200); - - int clr = random(1), clr2 = clr; - drawing.noStroke(); - for ( int i = 0; i < COLUMNS; i++ ) { - if ( hasStitch(i, 0, LEFT) ) { - clr = (clr2+1)%2; - clr2 = clr; - } else { - clr = clr2; - } - - for ( int j = 0; j < ROWS; j++ ) { - drawing.setFillColor(colors[clr]); - drawing.rect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE, NORTHWEST); - - if ( hasStitch(i, j, DOWN) ) { - clr = (clr+1)%2; - } - } - } - - drawing.setStrokeColor(0); - drawing.setStrokeWeight(2); - for ( int i = 0; i < COLUMNS; i++ ) { - for ( int j = 0; j < ROWS; j++ ) { - boolean stitchX = (stitchesX[i]+j)%2 == 1; - if ( i < COLUMNS-1 && stitchX ) { - drawing.line((i+1)*TILE_SIZE, j*TILE_SIZE, (i+1)*TILE_SIZE, (j+1)*TILE_SIZE); - } - - boolean stitchY = (stitchesY[j]+i)%2 == 1; - if ( j < ROWS-1 && stitchY ) { - drawing.line(i*TILE_SIZE, (j+1)*TILE_SIZE, (i+1)*TILE_SIZE, (j+1)*TILE_SIZE); - } - } - } - } - - @Override - public void mousePressed() { - generatePattern(); - redraw(); - } - -} diff --git a/examples/zm_generative/GenLines.java b/examples/zm_generative/GenLines.java deleted file mode 100644 index 2e57076..0000000 --- a/examples/zm_generative/GenLines.java +++ /dev/null @@ -1,62 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Zeichenmaschine; - -public class GenLines extends Zeichenmaschine { - - public static final int BORDER = 16; - - public static final int SIZE = 400; - - public static Color[] colors = new Color[]{ - color(62, 156, 191), - color(167, 236, 242), - color(242, 196, 61), - color(241, 124, 55), - color(242, 109, 80) - }; - - - public static void main( String[] args ) { - new GenLines(); - } - - - private int i = 0; - - public GenLines() { - super(SIZE, SIZE, "Lines"); - } - - @Override - public void setup() { - setFramesPerSecond(10); - drawing.clear(33); - } - - @Override - public void update( double delta ) { - } - - @Override - public void draw() { - int a = random(BORDER, SIZE-BORDER); - - //drawing.setStrokeColor(random(50, 200)); - drawing.setStrokeColor(colors[random(colors.length-1)]); - drawing.setStrokeWeight(random(4,12)); - - int d; - if( a > SIZE*0.5 ) { - d = random(1, (SIZE - a) - BORDER); - } else { - d = random(1, a - BORDER); - } - drawing.line(a - d, a + d, a + d, a - d); - - i += 1; - if( i == SIZE ) { - stop(); - } - } - -} diff --git a/examples/zm_generative/GenSpiral.java b/examples/zm_generative/GenSpiral.java deleted file mode 100644 index e8486ce..0000000 --- a/examples/zm_generative/GenSpiral.java +++ /dev/null @@ -1,60 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Zeichenmaschine; - -public class GenSpiral extends Zeichenmaschine { - - public static final int SIZE = 800; - - public static final double D_SCALE = .33; - public static final double A_SCALE = 6.0; - - public static Color[] colors = new Color[]{ - color(62, 156, 191, 44), - color(167, 236, 242, 44), - color(242, 196, 61, 44), - color(241, 124, 55, 44), - color(242, 109, 80, 44) - }; - - public static void main( String[] args ) { - new GenSpiral(); - } - - - private int i = 0; - - public GenSpiral() { - super(SIZE, SIZE, "Lines"); - } - - @Override - public void setup() { - setFramesPerSecond(60); - drawing.clear(33); - drawing.translate(SIZE/2, SIZE/2); - } - - @Override - public void update( double delta ) { - } - - @Override - public void draw() { - double d = (tick * D_SCALE); // + random(0,3); - double a = radians(tick * tick / A_SCALE); - // a = radians(tick * A_SCALE / D_SCALE); - // a = radians(d * A_SCALE); - - int x = (int)(d * cos(a)); - int y = (int)(d * sin(a)); - - drawing.setFillColor(colors[random(colors.length - 1)]); - drawing.noStroke(); - drawing.circle(x, y, 10); - - if( d > SIZE+SIZE ) { - stop(); - } - } - -} diff --git a/examples/zm_generative/GenWalk.java b/examples/zm_generative/GenWalk.java deleted file mode 100644 index 0828c55..0000000 --- a/examples/zm_generative/GenWalk.java +++ /dev/null @@ -1,43 +0,0 @@ -import schule.ngb.zm.DrawingLayer; -import schule.ngb.zm.Zeichenmaschine; - -public class GenWalk extends Zeichenmaschine { - - public static final int N_WALKERS = 8; - - private Walker[] walkers; - - public static void main( String[] args ) { - new GenWalk(); - } - - public GenWalk() { - super(800, 800, "Randomwalk"); - } - - @Override - public void setup() { - this.walkers = new Walker[N_WALKERS]; - for( int i = 0; i < walkers.length; i++ ) { - this.walkers[i] = new Walker(width/2, height/2, drawing); - } - - drawing.clear(0); - } - - @Override - public void update( double delta ) { - for( Walker walker: walkers ) { - walker.update(); - } - } - - @Override - public void draw() { - drawing.clear(0, 5); - for( Walker walker: walkers ) { - walker.draw(); - } - } - -} diff --git a/examples/zm_generative/README.TXT b/examples/zm_generative/README.TXT deleted file mode 100644 index 4a5e196..0000000 --- a/examples/zm_generative/README.TXT +++ /dev/null @@ -1,12 +0,0 @@ -# Zeichenmaschine: GenLines - -GenLines ist ein kreatives Projekt, bei dem ein Feld von Punkten durch geschickt -gewählte mathematische Formeln animiert wird. - -Die Idee stammt von der Seite http://tixy.land - -Dort finden sich auch weitere Beispiele für interessante Animationen. - -## Verwendung - - diff --git a/examples/zm_generative/Walker.java b/examples/zm_generative/Walker.java deleted file mode 100644 index bd90a71..0000000 --- a/examples/zm_generative/Walker.java +++ /dev/null @@ -1,50 +0,0 @@ -import schule.ngb.zm.*; - -// TODO: Build Interface (like Drawable) that uses DrawingLayer instead of Graphics2D ? - -public class Walker extends Constants { - - public static final int SIZE = 8; - - public static final int STEP = 6; - - private static final Color[] colors = new Color[]{ - Color.parseHexcode("#b13254"), - Color.parseHexcode("#ff5349"), - Color.parseHexcode("#ff7249"), - Color.parseHexcode("#ff9248") - }; - - private int x; - - private int y; - - private Color color; - - private DrawingLayer drawing; - - public Walker(DrawingLayer drawing) { - this(0, 0, drawing); - } - - public Walker( int x, int y, DrawingLayer drawing) { - this.x = x; - this.y = y; - this.color = choice(colors); - this.drawing = drawing; - } - - public void update() { - x += random(-STEP, STEP); - y += random(-STEP, STEP); - x = limit(x, 10, drawing.getWidth() - 10); - y = limit(y, 10, drawing.getHeight() - 10); - } - - public void draw() { - drawing.setFillColor(color); - drawing.noStroke(); - drawing.square(x, y, SIZE, MIDDLE); - } - -} diff --git a/examples/zm_generative/package.bluej b/examples/zm_generative/package.bluej deleted file mode 100644 index 2f9f212..0000000 --- a/examples/zm_generative/package.bluej +++ /dev/null @@ -1,58 +0,0 @@ -#BlueJ package file -dependency1.from=GenLines -dependency1.to=MyTIXY -dependency1.type=UsesDependency -dependency2.from=GenLines -dependency2.to=Dot -dependency2.type=UsesDependency -dependency3.from=MyTIXY -dependency3.to=Dot -dependency3.type=UsesDependency -dependency4.from=Dot -dependency4.to=GenLines -dependency4.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=4 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=GenLines -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=120 -target1.y=60 -target2.height=70 -target2.name=MyTIXY -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=200 -target2.y=210 -target3.height=70 -target3.name=Dot -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=420 -target3.y=140 diff --git a/examples/zm_hehomon/Alligung.java b/examples/zm_hehomon/Alligung.java deleted file mode 100755 index 52a1866..0000000 --- a/examples/zm_hehomon/Alligung.java +++ /dev/null @@ -1,40 +0,0 @@ - - -public class Alligung extends Hehomon { - - private int lernLevel; - - public Alligung() { - super("Alligung", "Drache", 80, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid", "Alligung.png"); - - lernLevel = 0; - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - gegner.nimmSchaden(zufall); - // gegner.nimmSchaden(100000000); - } - - @Override - public void angriff2( Hehomon gegner ) { - gegner.nimmSchaden(angr); - } - - @Override - public void verteidigung1( Hehomon gegner ) { - if(lernLevel < 3) { - lernLevel += 1; - } else { - angr *= 2; - lernLevel = 0; - } - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - } - -} diff --git a/examples/zm_hehomon/Display.java b/examples/zm_hehomon/Display.java deleted file mode 100644 index f52851e..0000000 --- a/examples/zm_hehomon/Display.java +++ /dev/null @@ -1,31 +0,0 @@ -import schule.ngb.zm.Drawable; -import schule.ngb.zm.Options; -import schule.ngb.zm.shapes.Rectangle; -import schule.ngb.zm.shapes.ShapeGroup; -import schule.ngb.zm.shapes.Text; - -public class Display extends ShapeGroup { - - private Rectangle background; - - private Text text; - - public Display( int pX, int pY ) { - super(pX, pY); - background = new Rectangle(0, 0, 400, 110); - background.setFillColor(0, 133); - - text = new Text(5, 5, "Der Kampf beginnt"); - text.setFontColor(255); - text.setFontsize(20); - text.setAnchor(NORTHWEST); - text.setFont("fonts/FredokaOne-Regular.ttf"); - - add(background, text); - } - - public void setText( String pText ) { - text.setText(pText); - } - -} diff --git a/examples/zm_hehomon/Gardon.java b/examples/zm_hehomon/Gardon.java deleted file mode 100755 index bb92065..0000000 --- a/examples/zm_hehomon/Gardon.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Gardon extends Hehomon { - - private boolean doppelterSchaden = false; - - public Gardon() { - super("Gardon", "Elektro", 100, 8, 6, "Gardoschlag", "Hauer", "Konzentration", "Heilung", "mia_Salamanyte.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/Hehomon.java b/examples/zm_hehomon/Hehomon.java deleted file mode 100644 index d8e623f..0000000 --- a/examples/zm_hehomon/Hehomon.java +++ /dev/null @@ -1,147 +0,0 @@ -import schule.ngb.zm.Drawable; -import schule.ngb.zm.Options; -import schule.ngb.zm.Updatable; -import schule.ngb.zm.shapes.Picture; - -public class Hehomon extends Picture implements Updatable { - - private String name, typ, bild; - - protected int angr, vert; - - protected int lp, lpMax; - - protected boolean paralysiert = false, vergiftet = false; - - private String angr1, angr2, vert1, vert2; - - private double sinOffset; - - public Hehomon( String pName, String pTyp, int pLp, int pAngr, int pVert, String pAngr1, String pAngr2, String pVert1, String pVert2, String pBild ) { - super(0, 0, "images/" + pBild); - - name = pName; - lp = pLp; - lpMax = pLp; - angr = pAngr; - vert = pVert; - angr1 = pAngr1; - angr2 = pAngr2; - vert1 = pVert1; - vert2 = pVert2; - bild = pBild; - - sinOffset = random(-PI, PI); - } - - public String getName() { - return name; - } - - public String getTyp() { - return typ; - } - - public String getBild() { - return bild; - } - - public int getLp() { - return lp; - } - - public int getLpMax() { - return lpMax; - } - - public int getAngr() { - return angr; - } - - public int getVert() { - return vert; - } - - public boolean isParalysiert() { - return paralysiert; - } - - public boolean isVergiftet() { - return vergiftet; - } - - public String getNameAngr1() { - return angr1; - } - - public String getNameAngr2() { - return angr2; - } - - public String getNameVert1() { - return vert1; - } - - public String getNameVert2() { - return vert2; - } - - public void setAngr( int pAngr ) { - angr = pAngr; - } - - public void setVert( int pVert ) { - vert = pVert; - } - - public void setParalysiert( boolean pParalysiert ) { - paralysiert = pParalysiert; - } - - public void setVergiftet( boolean pVergiftet ) { - vergiftet = pVergiftet; - } - - public void nimmSchaden( int pSchaden ) { - if( lp-pSchaden < 0 ) { - lp = 0; - } else { - lp -= pSchaden; - } - } - - public void heilen( int pHeilung ) { - if( lp+pHeilung > lpMax ) { - lp = lpMax; - } else { - lp += pHeilung; - } - } - - public void angriff1( Hehomon gegner ) { - - } - - public void angriff2( Hehomon gegner ) { - - } - - public void verteidigung1( Hehomon gegner ) { - - } - - public void verteidigung2( Hehomon gegner ) { - - } - - public boolean isActive() { - return true; - } - - @Override - public void update( double delta ) { - double deltaY = sin(runtime / 800.0 * PI + sinOffset); - this.move(0.0, deltaY); - } - -} diff --git a/examples/zm_hehomon/HehomonGame.java b/examples/zm_hehomon/HehomonGame.java deleted file mode 100644 index 89f89e4..0000000 --- a/examples/zm_hehomon/HehomonGame.java +++ /dev/null @@ -1,153 +0,0 @@ -import schule.ngb.zm.ImageLayer; -import schule.ngb.zm.Spielemaschine; -import schule.ngb.zm.util.FontLoader; - -import java.awt.Font; -import java.lang.reflect.InvocationTargetException; - -public class HehomonGame extends Spielemaschine { - - public static void main( String[] args ) { - new HehomonGame(); - } - - - private Hehomon attacker, defender; - - private Hitpoints hpAttacker, hpDefender; - - private Display display; - - private Menu menu; - - private boolean idle = true; - - private static final Class[] HEHOMONS = new Class[]{ - Alligung.class, Salamanyte.class, Gardon.class, Mantairy.class, Shigong.class, Toxo.class, Wokachu.class - }; - - public HehomonGame() { - super(960, 642, "ZM: Hehomon"); - //setFullscreen(true); - } - - private Hehomon newHehomon() { - try { - Class clazz = (Class) choice(HEHOMONS); - return clazz.getConstructor().newInstance(); - } catch( NoSuchMethodException | InstantiationException | - IllegalAccessException | InvocationTargetException ex ) { - exit(); - return null; - } - } - - @Override - public void setup() { - Font font = FontLoader.loadFont("fonts/FredokaOne-Regular.ttf" ); - - ImageLayer bg = new ImageLayer("images/hintergrund.jpg"); - canvas.addLayer(1, bg); - - - - attacker = newHehomon(); - attacker.moveTo(width * .25, 250); - attacker.flip(LEFT); - defender = newHehomon(); - defender.moveTo(width * .75, 250); - - hpAttacker = new Hitpoints(attacker); - hpDefender = new Hitpoints(defender); - - display = new Display(500, 500); - display.alignTo(SOUTHEAST, -50.0); - - menu = new Menu(attacker); - menu.getWidth(); - menu.alignTo(SOUTHWEST, -50.0); - - add(attacker, defender); - add(hpAttacker, hpDefender); - add(display, menu); - } - - public void keyPressed() { - if( !idle ) { - return; - } - - idle = false; - if( keyCode == KEY_A ) { - display.setText(attacker.getName() + " benutzt " + attacker.getNameAngr1() + "!"); - delay(500); - attacker.angriff1(defender); - } else if( keyCode == KEY_S ) { - display.setText(attacker.getName() + " benutzt " + attacker.getNameAngr2() + "!"); - delay(500); - attacker.angriff2(defender); - } else if( keyCode == KEY_D ) { - display.setText(attacker.getName() + " benutzt " + attacker.getNameVert1() + "!"); - delay(500); - attacker.verteidigung1(defender); - } else if( keyCode == KEY_F ) { - display.setText(attacker.getName() + " benutzt " + attacker.getNameVert2() + "!"); - delay(500); - attacker.verteidigung2(defender); - } - - delay(500); - pruefeSiegbedingung(); - verteidigerAmZug(); - display.setText(attacker.getName() + " ist am Zug."); - idle = true; - } - - private void verteidigerAmZug() { - int zufall = random(1, 4); - switch( zufall ) { - case 1: - display.setText(defender.getName() + " benutzt " + defender.getNameAngr1() + "!"); - delay(500); - defender.angriff1(attacker); - break; - case 2: - display.setText(defender.getName() + " benutzt " + defender.getNameAngr2() + "!"); - delay(500); - defender.angriff2(attacker); - break; - case 3: - display.setText(defender.getName() + " benutzt " + defender.getNameVert1() + "!"); - delay(500); - defender.verteidigung1(attacker); - break; - case 4: - display.setText(defender.getName() + " benutzt " + defender.getNameVert2() + "!"); - delay(500); - defender.verteidigung2(attacker); - break; - } - - delay(500); - pruefeSiegbedingung(); - } - - private void pruefeSiegbedingung() { - if( defender.getLp() <= 0 || true ) { - //view.angreiferGewinnt(); - display.setText(attacker.getName() + " gewinnt!"); - } else if( attacker.getLp() <= 0 ) { - //view.verteidigerGewinnt(); - display.setText(defender.getName() + " gewinnt!"); - } - } - - @Override - public void fullscreenChanged() { - if( defender != null ) { - defender.moveTo(width * .75, 250); - hpDefender.moveTo(width * .75, defender.getAbsAnchorPoint(DOWN).y + 50); - } - } - -} diff --git a/examples/zm_hehomon/Hitpoints.java b/examples/zm_hehomon/Hitpoints.java deleted file mode 100644 index 1d64b01..0000000 --- a/examples/zm_hehomon/Hitpoints.java +++ /dev/null @@ -1,45 +0,0 @@ -import org.w3c.dom.css.Rect; -import schule.ngb.zm.Color; -import schule.ngb.zm.Updatable; -import schule.ngb.zm.shapes.Rectangle; -import schule.ngb.zm.shapes.ShapeGroup; - -public class Hitpoints extends ShapeGroup implements Updatable { - - private Hehomon hehomon; - - private Rectangle rectMax, rectCurrent; - - public Hitpoints(Hehomon pHehomon ) { - super(); - - hehomon = pHehomon; - - rectMax = new Rectangle(0, 0,206,11); - rectMax.setFillColor(0); - rectMax.noStroke(); - rectCurrent = new Rectangle(3,3,200,5); - rectCurrent.setFillColor(255); - rectCurrent.noStroke(); - - update(0); - - add(rectMax); - add(rectCurrent); - nextTo(pHehomon, DOWN); - } - - @Override - public boolean isActive() { - return true; - } - - @Override - public void update( double delta ) { - double lpAnteil = ((double)hehomon.getLp()/hehomon.getLpMax()); - - rectCurrent.setWidth( morph(0.0, rectMax.getWidth()-6.0, lpAnteil) ); - rectCurrent.setFillColor( Color.interpolate(RED, GREEN, lpAnteil) ); - } - -} diff --git a/examples/zm_hehomon/Mantairy.java b/examples/zm_hehomon/Mantairy.java deleted file mode 100755 index f709c1a..0000000 --- a/examples/zm_hehomon/Mantairy.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Mantairy extends Hehomon { - - private boolean doppelterSchaden = false; - - public Mantairy() { - super("Mantairy", "Elektro", 100, 8, 6, "Shigoschlag", "Hauer", "Konzentration", "Heilung", "lea_Mantairy.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/Menu.java b/examples/zm_hehomon/Menu.java deleted file mode 100755 index 1d26c0c..0000000 --- a/examples/zm_hehomon/Menu.java +++ /dev/null @@ -1,40 +0,0 @@ -import schule.ngb.zm.shapes.Rectangle; -import schule.ngb.zm.shapes.ShapeGroup; -import schule.ngb.zm.shapes.Text; - -public class Menu extends ShapeGroup { - - private Rectangle background; - - private Text[] lines; - - public Menu( Hehomon pHehomon ) { - super(0, 0); - - background = new Rectangle(0, 0, 400, 110); - background.setFillColor(0, 133); - add(background); - - lines = new Text[4]; - for( int i = 0; i < lines.length; i++ ) { - lines[i] = new Text(5, 5+i*25, "", "Arial-BOLD-20"); - lines[i].setFontColor(WHITE); - lines[i].setFontsize(20); - lines[i].setAnchor(NORTHWEST); - } - add(lines); - - setText(0, pHehomon.getNameAngr1()); - setText(1, pHehomon.getNameAngr2()); - setText(2, pHehomon.getNameVert1()); - setText(3, pHehomon.getNameVert2()); - } - - public void setText( int pLineNumber, String pText ) { - if( pLineNumber < lines.length && pLineNumber >= 0 ) { - char button = new char[]{'A', 'S', 'D', 'F'}[pLineNumber]; - lines[pLineNumber].setText(button + ": " + pText); - } - } - -} diff --git a/examples/zm_hehomon/Salamanyte.java b/examples/zm_hehomon/Salamanyte.java deleted file mode 100755 index c1450bc..0000000 --- a/examples/zm_hehomon/Salamanyte.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Salamanyte extends Hehomon { - - private boolean doppelterSchaden = false; - - public Salamanyte() { - super("Salamanyte", "Elektro", 100, 8, 6, "Shigoschlag", "Hauer", "Konzentration", "Heilung", "mia_Salamanyte.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/Shigong.java b/examples/zm_hehomon/Shigong.java deleted file mode 100755 index 77ef22d..0000000 --- a/examples/zm_hehomon/Shigong.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Shigong extends Hehomon { - - private boolean doppelterSchaden = false; - - public Shigong() { - super("Shigong", "Elektro", 100, 8, 6, "Shigoschlag", "Hauer", "Konzentration", "Heilung", "ayman_Shigong.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/Toxo.java b/examples/zm_hehomon/Toxo.java deleted file mode 100755 index 4957eba..0000000 --- a/examples/zm_hehomon/Toxo.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Toxo extends Hehomon { - - private boolean doppelterSchaden = false; - - public Toxo() { - super("Toxo", "Elektro", 100, 8, 6, "Shigoschlag", "Hauer", "Konzentration", "Heilung", "moritz_Toxo.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/Wokachu.java b/examples/zm_hehomon/Wokachu.java deleted file mode 100755 index 417ed70..0000000 --- a/examples/zm_hehomon/Wokachu.java +++ /dev/null @@ -1,42 +0,0 @@ - - -public class Wokachu extends Hehomon { - - private boolean doppelterSchaden = false; - - public Wokachu() { - super("Wokachu", "Elektro", 100, 8, 6, "Shigoschlag", "Hauer", "Konzentration", "Heilung", "julian_Wokachu.png"); - } - - @Override - public void angriff1( Hehomon gegner ) { - int zufall = (int)(Math.random() * angr) + 4; - if( doppelterSchaden ) { - zufall *= 2; - doppelterSchaden = false; - } - gegner.nimmSchaden(zufall); - } - - @Override - public void angriff2( Hehomon gegner ) { - if( doppelterSchaden ) { - gegner.nimmSchaden(angr*2); - doppelterSchaden = false; - } else { - gegner.nimmSchaden(angr); - } - } - - @Override - public void verteidigung1( Hehomon gegner ) { - doppelterSchaden = true; - } - - @Override - public void verteidigung2( Hehomon gegner ) { - heilen(10); - doppelterSchaden = false; - } - -} diff --git a/examples/zm_hehomon/fonts/FredokaOne-Regular.ttf b/examples/zm_hehomon/fonts/FredokaOne-Regular.ttf deleted file mode 100755 index 9b384aa..0000000 Binary files a/examples/zm_hehomon/fonts/FredokaOne-Regular.ttf and /dev/null differ diff --git a/examples/zm_hehomon/images/Alligung.png b/examples/zm_hehomon/images/Alligung.png deleted file mode 100755 index 1498f9e..0000000 Binary files a/examples/zm_hehomon/images/Alligung.png and /dev/null differ diff --git a/examples/zm_hehomon/images/ayman_Shigong.png b/examples/zm_hehomon/images/ayman_Shigong.png deleted file mode 100755 index 061f54f..0000000 Binary files a/examples/zm_hehomon/images/ayman_Shigong.png and /dev/null differ diff --git a/examples/zm_hehomon/images/emma_Hehomon.png b/examples/zm_hehomon/images/emma_Hehomon.png deleted file mode 100755 index 67c4dd9..0000000 Binary files a/examples/zm_hehomon/images/emma_Hehomon.png and /dev/null differ diff --git a/examples/zm_hehomon/images/hintergrund.jpg b/examples/zm_hehomon/images/hintergrund.jpg deleted file mode 100755 index 31ae55f..0000000 Binary files a/examples/zm_hehomon/images/hintergrund.jpg and /dev/null differ diff --git a/examples/zm_hehomon/images/julian_Wokachu.png b/examples/zm_hehomon/images/julian_Wokachu.png deleted file mode 100755 index 8080232..0000000 Binary files a/examples/zm_hehomon/images/julian_Wokachu.png and /dev/null differ diff --git a/examples/zm_hehomon/images/lea_Mantairy.png b/examples/zm_hehomon/images/lea_Mantairy.png deleted file mode 100755 index 5a6bdfd..0000000 Binary files a/examples/zm_hehomon/images/lea_Mantairy.png and /dev/null differ diff --git a/examples/zm_hehomon/images/lizenz.txt b/examples/zm_hehomon/images/lizenz.txt deleted file mode 100755 index 0fec4bb..0000000 --- a/examples/zm_hehomon/images/lizenz.txt +++ /dev/null @@ -1,16 +0,0 @@ -Alligung.png, CC BY-SA 4.0 Jonas Neugebauer - -hintergrund.jpg, Quelle: https://pixabay.com/photos/bullfight-arena-spanish-pride-389342/ - -Pixabay License - -mages and Videos on Pixabay are made available under the Pixabay License on the following terms. Under the Pixabay License you are granted an irrevocable, worldwide, non-exclusive and royalty free right to use, download, copy, modify or adapt the Images and Videos for commercial or non-commercial purposes. Attribution of the photographer or Pixabay is not required but is always appreciated. - -The Pixabay License does not allow: - - sale or distribution of Images or Videos as digital stock photos or as digital wallpapers; - sale or distribution of Images or Videos e.g. as a posters, digital prints or physical products, without adding any additional elements or otherwise adding value; - depiction of identifiable persons in an offensive, pornographic, obscene, immoral, defamatory or libelous way; or - any suggestion that there is an endorsement of products and services by depicted persons, brands, and organisations, unless permission was granted. - -Please be aware that while all Images and Videos on Pixabay are free to use for commercial and non-commercial purposes, depicted items in the Images or Videos, such as identifiable people, logos, brands, etc. may be subject to additional copyrights, property rights, privacy rights, trademarks etc. and may require the consent of a third party or the license of these rights - particularly for commercial applications. Pixabay does not represent or warrant that such consents or licenses have been obtained, and expressly disclaims any liability in this respect. \ No newline at end of file diff --git a/examples/zm_hehomon/images/mats_Hehomon.png b/examples/zm_hehomon/images/mats_Hehomon.png deleted file mode 100755 index 9110412..0000000 Binary files a/examples/zm_hehomon/images/mats_Hehomon.png and /dev/null differ diff --git a/examples/zm_hehomon/images/mia_Salamanyte.png b/examples/zm_hehomon/images/mia_Salamanyte.png deleted file mode 100755 index 648b56c..0000000 Binary files a/examples/zm_hehomon/images/mia_Salamanyte.png and /dev/null differ diff --git a/examples/zm_hehomon/images/moritz_Toxo.png b/examples/zm_hehomon/images/moritz_Toxo.png deleted file mode 100755 index 901d549..0000000 Binary files a/examples/zm_hehomon/images/moritz_Toxo.png and /dev/null differ diff --git a/examples/zm_hehomon/images/paul_Schweinbärmann.png b/examples/zm_hehomon/images/paul_Schweinbärmann.png deleted file mode 100755 index c700a24..0000000 Binary files a/examples/zm_hehomon/images/paul_Schweinbärmann.png and /dev/null differ diff --git a/examples/zm_hehomon/images/rabab_Hehomon.png b/examples/zm_hehomon/images/rabab_Hehomon.png deleted file mode 100755 index 6f319e6..0000000 Binary files a/examples/zm_hehomon/images/rabab_Hehomon.png and /dev/null differ diff --git a/examples/zm_hehomon/music/Water-Balloon-Maniacs.mp3 b/examples/zm_hehomon/music/Water-Balloon-Maniacs.mp3 deleted file mode 100755 index 3bcfe9e..0000000 Binary files a/examples/zm_hehomon/music/Water-Balloon-Maniacs.mp3 and /dev/null differ diff --git a/examples/zm_hehomon/package.bluej b/examples/zm_hehomon/package.bluej deleted file mode 100644 index 2f9f212..0000000 --- a/examples/zm_hehomon/package.bluej +++ /dev/null @@ -1,58 +0,0 @@ -#BlueJ package file -dependency1.from=GenLines -dependency1.to=MyTIXY -dependency1.type=UsesDependency -dependency2.from=GenLines -dependency2.to=Dot -dependency2.type=UsesDependency -dependency3.from=MyTIXY -dependency3.to=Dot -dependency3.type=UsesDependency -dependency4.from=Dot -dependency4.to=GenLines -dependency4.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=4 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=GenLines -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=120 -target1.y=60 -target2.height=70 -target2.name=MyTIXY -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=200 -target2.y=210 -target3.height=70 -target3.name=Dot -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=420 -target3.y=140 diff --git a/examples/zm_raindrops/README.TXT b/examples/zm_raindrops/README.TXT deleted file mode 100644 index 71367fc..0000000 --- a/examples/zm_raindrops/README.TXT +++ /dev/null @@ -1,14 +0,0 @@ -# Zeichenmaschine: Raindrops - -Raindrops ist ein einfaches Spiel, bei dem Regentropfen vom Himmel fallen, -die von der Spieler:in mit einem Eimer aufgefangen werden müssen. - -Das Spiel wird nach und nach schwerer (mehr Tropfen, höheres Tempo), bis die -Spieler:in zu viele Tropfen fallen gelassen hat. - -Diese Variante des Spiels ist mit dem DrawingLayer implementiert. -Eine objektorientierte Version ist im Beispielprojekt zm_raindrops_oop zu finden. - -## Quellen -- raindrop.png by @lagartoflojo (https://openclipart.org/detail/4063/water-drop) -- bucket.png diff --git a/examples/zm_raindrops/Raindrops.java b/examples/zm_raindrops/Raindrops.java deleted file mode 100644 index bef8a47..0000000 --- a/examples/zm_raindrops/Raindrops.java +++ /dev/null @@ -1,183 +0,0 @@ -import schule.ngb.zm.Zeichenmaschine; - -public class Raindrops extends Zeichenmaschine { - - /** - * Zähler für die gefangenen und fallen gelassenen Tropfen. - */ - int catched = 0, dropped = 0; - - /** - * Startgeschwindigkeit, in der die Tropfen fallen. - * - * Die Tropfen fallen pro Frame (also ungefähr 60-mal pro Sekunde). - */ - double drop_speed = 1.0; - - /** - * Objektvariablen für die Positionen der fünf Tropfen. - */ - double x1 = random(10, 390), y1 = 10; - double x2 = random(10, 390), y2 = -60; - double x3 = random(10, 390), y3 = -100; - double x4 = random(10, 390), y4 = -170; - double x5 = random(10, 390), y5 = -230; - - /** - * Wird zu Beginn aufgerufen, um das Spiel zu initialisieren. - */ - public void setup() { - setSize(400, 600); - setTitle("ZM: Raindrops"); - hideCursor(); - - drawing.setFontSize(64); - } - - /** - * Aktualisiert die Position der Tropfen und prüft, ob die Tropfen mit dem - * Eimer oder dem Boden kollidieren. Ist dies der Fall, wird der Tropfen - * wieder "nach oben" befördert und der entsprechende Zähler wird um eins - * erhöht. Anschließend wird geprüft, ob die Geschwindigkeit erhöht werden - * muss, oder ob das Spiel verloren wurde. - */ - public void update( double delta ) { - // Tropfen bewegen - y1 += drop_speed; - y2 += drop_speed; - y3 += drop_speed; - y4 += drop_speed; - y5 += drop_speed; - - // Kollision mit Eimer prüfen (Tropfen 1) - if( x1 > mouseX-20 && x1 < mouseX+20 && y1 > 520 && y1 < 560 ) { - x1 = random(10, 390); - y1 = -10; - catched += 1; - - // Nächster Level? - if( catched > 0 && catched%10 == 0 ) { - drop_speed += 2; - } - } else if( y1 > 560 ) { - x1 = random(10, 390); - y1 = -10; - dropped += 1; - } - // Kollision mit Eimer prüfen (Tropfen 2) - if( x2 > mouseX-20 && x2 < mouseX+20 && y2 > 520 && y2 < 560 ) { - x2 = random(10, 390); - y2 = -10; - catched += 1; - - // Nächster Level? - if( catched > 0 && catched%10 == 0 ) { - drop_speed += 2; - } - } else if( y2 > 560 ) { - x2 = random(10, 390); - y2 = -10; - dropped += 1; - } - // Kollision mit Eimer prüfen (Tropfen 3) - if( x3 > mouseX-20 && x3 < mouseX+20 && y3 > 520 && y3 < 560 ) { - x3 = random(10, 390); - y3 = -10; - catched += 1; - - // Nächster Level? - if( catched > 0 && catched%10 == 0 ) { - drop_speed += 2; - } - } else if( y3 > 560 ) { - x3 = random(10, 390); - y3 = -10; - dropped += 1; - } - // Kollision mit Eimer prüfen (Tropfen 4) - if( x4 > mouseX-20 && x4 < mouseX+20 && y4 > 520 && y4 < 560 ) { - x4 = random(10, 390); - y4 = -10; - catched += 1; - - // Nächster Level? - if( catched > 0 && catched%10 == 0 ) { - drop_speed += 2; - } - } else if( y4 > 560 ) { - x4 = random(10, 390); - y4 = -10; - dropped += 1; - } - // Kollision mit Eimer prüfen (Tropfen 5) - if( x5 > mouseX-20 && x5 < mouseX+20 && y5 > 520 && y5< 560 ) { - x5 = random(10, 390); - y5 = -10; - catched += 1; - - // Nächster Level? - if( catched > 0 && catched%10 == 0 ) { - drop_speed += 2; - } - } else if( y5 > 560 ) { - x5 = random(10, 390); - y5 = -10; - dropped += 1; - } - - // Game over? - if( dropped >= 13 ) { - stop(); // Stoppt das Spiel und ruft teardown() auf - } - } - - /** - * Zeichnet die Spielszene (hintergrund, Eimer, Tropfen, Zähler) - */ - public void draw() { - // Hintergrund blaugrau - drawing.clear(129, 174, 206); - // Boden zeichnen - drawing.setFillColor(0, 144, 81); - drawing.noStroke(); - drawing.rect(0, height - 40, width, 40, NORTHWEST); - - // Eimer zeichnen - drawing.image("bucket.png", mouseX, 540, 0.25); - - // Tropfen zeichnen - drawing.image("raindrop.png", x1, y1, 0.1); - drawing.image("raindrop.png", x2, y2, 0.1); - drawing.image("raindrop.png", x3, y3, 0.1); - drawing.image("raindrop.png", x4, y4, 0.1); - drawing.image("raindrop.png", x5, y5, 0.1); - - // Punktezähler - drawing.setFillColor(0); - drawing.text(""+catched, 10, 10, NORTHWEST); - drawing.text(""+dropped, 390, 10, NORTHEAST); - } - - /** - * Wird nach dem Aufruf von {@code stop()} aufgerufen. - */ - public void teardown() { - // Alles löschen - drawing.clear(129, 174, 206); - - // Text anzeigen (Punkte und Zeit) - drawing.setFillColor(33); - drawing.setFontSize(64); - drawing.text("Game Over!", 200, 300); - drawing.setFontSize(32); - drawing.text("Punkte: " + catched, 200, 364); - drawing.text("Zeit: " + (runtime/1000.0), 200, 396); - - redraw(); - } - - public static void main( String[] args ) { - new Raindrops(); - } - -} diff --git a/examples/zm_raindrops/bucket.png b/examples/zm_raindrops/bucket.png deleted file mode 100644 index 0bdd04a..0000000 Binary files a/examples/zm_raindrops/bucket.png and /dev/null differ diff --git a/examples/zm_raindrops/package.bluej b/examples/zm_raindrops/package.bluej deleted file mode 100644 index 35e079d..0000000 --- a/examples/zm_raindrops/package.bluej +++ /dev/null @@ -1,32 +0,0 @@ -#BlueJ package file -editor.fx.0.height=0 -editor.fx.0.width=0 -editor.fx.0.x=0 -editor.fx.0.y=0 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Raindrops -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=70 -target1.y=10 diff --git a/examples/zm_raindrops/raindrop.png b/examples/zm_raindrops/raindrop.png deleted file mode 100644 index fd5c2fd..0000000 Binary files a/examples/zm_raindrops/raindrop.png and /dev/null differ diff --git a/examples/zm_raindrops_oop/Bucket.java b/examples/zm_raindrops_oop/Bucket.java deleted file mode 100644 index 87d42b1..0000000 --- a/examples/zm_raindrops_oop/Bucket.java +++ /dev/null @@ -1,13 +0,0 @@ -import schule.ngb.zm.shapes.Picture; - -public class Bucket extends Picture { - - public Bucket( int x, int y ) { - super(x, y, "bucket.png"); - } - - public boolean contains( Drop pDrop ) { - return getBounds().contains(pDrop.getX(), pDrop.getY()); - } - -} diff --git a/examples/zm_raindrops_oop/Drop.java b/examples/zm_raindrops_oop/Drop.java deleted file mode 100644 index 86139f4..0000000 --- a/examples/zm_raindrops_oop/Drop.java +++ /dev/null @@ -1,45 +0,0 @@ -import schule.ngb.zm.Updatable; -import schule.ngb.zm.shapes.Picture; - -public class Drop extends Picture implements Updatable { - - public static final double SPEED_PIXELPERSECOND = 100.0; - - public static final double SPEED_INCREASE = 1.2; - - public static final int START_Y = 40; - - - private double speed = SPEED_PIXELPERSECOND; - - private boolean active = false; - - public Drop() { - super(0, 0, "raindrop.png"); - hide(); - } - - public void increaseSpeed() { - this.speed *= SPEED_INCREASE; - } - - public void activate() { - this.active = true; - } - - public void reset() { - moveTo(random(Raindrops.GAME_BORDER, Raindrops.GAME_WIDTH - Raindrops.GAME_BORDER), START_Y); - show(); - } - - @Override - public boolean isActive() { - return active; - } - - @Override - public void update( double delta ) { - y += speed * delta; - } - -} diff --git a/examples/zm_raindrops_oop/README.TXT b/examples/zm_raindrops_oop/README.TXT deleted file mode 100644 index ef5c43f..0000000 --- a/examples/zm_raindrops_oop/README.TXT +++ /dev/null @@ -1,14 +0,0 @@ -# Zeichenmaschine: Raindrops - -Raindrops ist ein einfaches Spiel, bei dem Regentropfen vom Himmel fallen, -die von der Spieler:in mit einem Eimer aufgefangen werden müssen. - -Das Spiel wird nach und nach schwerer (mehr Tropfen, höheres Tempo), bis die -Spieler:in zu viele Tropfen fallen gelassen hat. - -Diese Variante des Spiels ist Objektorientiert mit dem ShapesLayer implementiert. -Eine nicht OOP Version ist im Beispielprojekt zm_raindrops zu finden. - -## Quellen -- raindrop.png by @lagartoflojo (https://openclipart.org/detail/4063/water-drop) -- bucket.png diff --git a/examples/zm_raindrops_oop/Raindrops.java b/examples/zm_raindrops_oop/Raindrops.java deleted file mode 100644 index f98cdaa..0000000 --- a/examples/zm_raindrops_oop/Raindrops.java +++ /dev/null @@ -1,194 +0,0 @@ -import schule.ngb.zm.Zeichenmaschine; -import schule.ngb.zm.shapes.Text; - -import java.awt.Font; - -public class Raindrops extends Zeichenmaschine { - - //@formatter:off - // Einstellungen für das Spiel - - // Breite / Höhe des Spielfensters. - public static final int GAME_WIDTH = 400; - public static final int GAME_HEIGHT = 600; - // Breite des Randes (dort werden keine Tropfen erstellt). - public static final int GAME_BORDER = 10; - - // Anzahl Tropfen zu Beginn des Spiels. - public static final int GAME_START_DROPS = 5; - // Maximale Anzahl Tropfen im Spiel. - public static final int GAME_MAX_DROPS = 12; - // Anzahl gefangenere Tropfen, ab der ein neuer Level anfängt. - public static final int GAME_NEXT_LEVEL_AT = 10; - // Anzahl Tropfen, die fallen gelassen werden dürfen, - // bevor das Spiel vorbei ist. - public static final int GAME_MAX_DROPPED = 13; - //@formatter:on - - public static void main( String[] args ) { - new Raindrops(); - } - - /** - * Array der Tropfen-Objekte. - */ - private Drop[] drops; - - /** - * Das Eimer-Objekt. - */ - private Bucket bucket; - - /** - * Anzahl Tropfen, die aktuell im Spiel sind. - */ - private int noOfDrops = GAME_START_DROPS; - - /** - * Anzahl gefangener / fallen gelassener Tropfen. - */ - private int dropped = 0, catched = 0; - - /** - * Text-Objekte für die Anzeige der gefangenen / fallen gelassenen Tropfen. - */ - private Text textDropped, textCatched; - - public Raindrops() { - super(GAME_WIDTH, GAME_HEIGHT, "ZM: Raindrops"); - } - - /** - * Initialisierung des Spiels und der benötigten Objekte. - */ - public void setup() { - hideCursor(); - - // Hintergrund blaugrau - background.setColor(129, 174, 206); - - // Hintergrundbild zeichnen (DrawingLayer) - drawing.setFillColor(0, 144, 81); - drawing.noStroke(); - drawing.rect(0, height - 40, width, 40, NORTHWEST); - - // Eimer-Objekt erstellen - bucket = new Bucket(width / 2, height - 60); - bucket.scale(.25); - shapes.add(bucket); - - // Tropfen-Objekte erstellen - // Die maximale Anzahl Tropfen kann durch GAME_MAX_DROPS eingestellt werden - // Es werden alle Tropfen erstellt, anber nur die ersten noOfDrops - // Objekt im Spiel angezeigt. - drops = new Drop[GAME_MAX_DROPS]; - for( int i = 0; i < drops.length; i++ ) { - drops[i] = new Drop(); - drops[i].scale(.1); - shapes.add(drops[i]); - } - - // Die ersten noOfDrops Tropfen zu Beginn anzeigen. - // Die Tropfen werden mit zufälliger x-Koordinate etwas versetzt - // übereinander positioniert, damit sie nicht alle gleichzeitig fallen. - for( int i = 0; i < noOfDrops; i++ ) { - drops[i].moveTo( - random(GAME_BORDER, GAME_WIDTH - GAME_BORDER), - Drop.START_Y - i * (2 * Drop.START_Y) - random(-10, 10) - ); - drops[i].activate(); - drops[i].show(); - } - - // Erstellen der Text-Objekte für dei Zähler. - textCatched = new Text(10, 60, "0"); - textCatched.setFontsize(64); - textCatched.setAnchor(NORTHWEST); //linksbündig - shapes.add(textCatched); - textDropped = new Text(width - 10, 60, "0"); - textDropped.setFontsize(64); - textDropped.setAnchor(NORTHEAST); // rechtsbündig - shapes.add(textDropped); - } - - /** - * Hier passiert die Spiel-Logik. Die Position des Eimers und der Tropfen - * wird aktualisiert. Es wird geprüft, ob ein Tropfen mit dem Eimer - * kollidiert oder den Boden erreicht hat. - * - * @param delta - */ - public void update( double delta ) { - // Position des Eimers auf Mausposition setzen. - if( mouseX < 0 ) { - // Stopp am linken Rand - bucket.setX(0); - } else if( mouseX > width ) { - // Stopp am rechten Rand - bucket.setX(width); - } else { - bucket.setX(mouseX); - } - - // Die Position der Tropfen aktualisieren und Kollisionen prüfen. - for( int i = 0; i < noOfDrops; i++ ) { - drops[i].update(delta); - - if( drops[i].getY() >= height - 40 ) { - // Tropfen hat Boden erreicht! - dropped += 1; - textDropped.setText("" + dropped); - drops[i].reset(); - } else if( bucket.contains(drops[i]) ) { - // Tropfen wurde gefangen! - catched += 1; - textCatched.setText("" + catched); - drops[i].reset(); - - // Wurde ein Tropfen gefangen (und nur dann) wird geprüft, ob - // das nächste Level erreicht wurde. - if( catched > 0 && (catched % GAME_NEXT_LEVEL_AT) == 0 ) { - // Falls noch nicht alle Tropfen im Spiel, aktiviere einen - // weiteren. - if( noOfDrops < drops.length ) { - noOfDrops += 1; - drops[noOfDrops - 1].activate(); - drops[noOfDrops - 1].reset(); - } - - // Geschwindigkeit aller Tropfen erhöhen. - for( int j = 0; j < drops.length; j++ ) { - drops[j].increaseSpeed(); - } - } - } - } - - // Prüfen, ob das Spiel verloren wurde. - if( dropped >= GAME_MAX_DROPPED ) { - stop(); // Stoppt den Game-Loop und ruft dann teardown() auf. - } - } - - /** - * Wird aufgerufen, nachdem das Spiel gestoppt wurde und zeigt den Game Over - * Bildschirm an. - */ - public void teardown() { - // Alle Formen (Eimer, Tropfen, Texte) entfernen. - shapes.removeAll(); - - // "Game Over" Text - Text gameOver = new Text(width / 2, 300, "Game Over"); - gameOver.setFontsize(64); - shapes.add(gameOver); - - // Ergebnis anzeigen (Anzahl gefangener Tropfen, Spielzeit in Sekunden). - Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 32); - shapes.add(new Text(width / 2, 360, "Catched: " + catched, f)); - shapes.add(new Text(width / 2, 360 + f.getSize(), "Time: " + (runtime / 1000.0), f)); - - redraw(); - } - -} diff --git a/examples/zm_raindrops_oop/bucket.png b/examples/zm_raindrops_oop/bucket.png deleted file mode 100644 index 0bdd04a..0000000 Binary files a/examples/zm_raindrops_oop/bucket.png and /dev/null differ diff --git a/examples/zm_raindrops_oop/package.bluej b/examples/zm_raindrops_oop/package.bluej deleted file mode 100644 index 2f9f212..0000000 --- a/examples/zm_raindrops_oop/package.bluej +++ /dev/null @@ -1,58 +0,0 @@ -#BlueJ package file -dependency1.from=GenLines -dependency1.to=MyTIXY -dependency1.type=UsesDependency -dependency2.from=GenLines -dependency2.to=Dot -dependency2.type=UsesDependency -dependency3.from=MyTIXY -dependency3.to=Dot -dependency3.type=UsesDependency -dependency4.from=Dot -dependency4.to=GenLines -dependency4.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=4 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=GenLines -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=120 -target1.y=60 -target2.height=70 -target2.name=MyTIXY -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=200 -target2.y=210 -target3.height=70 -target3.name=Dot -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=420 -target3.y=140 diff --git a/examples/zm_raindrops_oop/raindrop.png b/examples/zm_raindrops_oop/raindrop.png deleted file mode 100644 index fd5c2fd..0000000 Binary files a/examples/zm_raindrops_oop/raindrop.png and /dev/null differ diff --git a/examples/zm_skyline/README.TXT b/examples/zm_skyline/README.TXT deleted file mode 100644 index b3600d4..0000000 --- a/examples/zm_skyline/README.TXT +++ /dev/null @@ -1,10 +0,0 @@ -# Zeichenmaschine: Skyline - -Skyline ist ein Projekt mit der Turtle-Ebene der Zeichenmaschine. Jede -Schüler:in programmiert ein Haus der Skyline. Dazu müssen vorher -gemeinsam Vorgaben festgelegt werden. Wichtig ist, dass die Turtle immer in der -unteren linken Ecke des Hauses startet und in der rechten unteren Ecke endet -(damit dort dann das nächste Haus gezeichnet werden kann). - -Wenn jede Schüler:in ihr Haus in eine eigene Methode schreibt, können diese -nacheinander aufgerufen werden, um die finale Skyline zu erstellen. diff --git a/examples/zm_skyline/Skyline.java b/examples/zm_skyline/Skyline.java deleted file mode 100644 index 32b8a79..0000000 --- a/examples/zm_skyline/Skyline.java +++ /dev/null @@ -1,65 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Zeichenmaschine; -import schule.ngb.zm.turtle.TurtleLayer; - -public class Skyline extends Zeichenmaschine { - - TurtleLayer turtle; - - public void setup() { - setSize(1000, 600); - setTitle("Zeichenmaschine: Skyline"); - - // Turtle-Ebene erstellen - turtle = new TurtleLayer(); - addLayer(turtle); - - // Hintergrund schwarz - background.setColor(BLACK); - turtle.noStroke(); - - turtle.penUp(); - turtle.lt(90); - turtle.fd(300); - turtle.rt(90); - turtle.penDown(); - } - - public void draw() { - for( int i = 0; i < 6; i++ ) { - haus1(randomColor()); - } - turtle.setStrokeColor(BLUE); - } - - public void haus1( Color clr ) { - turtle.setFillColor(clr); - quad(100, 80); - turtle.fill(); - turtle.fd(100); - turtle.rt(45); - turtle.fd(80/sqrt(2)); - turtle.rt(90); - turtle.fd(80/sqrt(2)); - turtle.rt(45); - turtle.fill(); - turtle.fd(100); - turtle.rt(180); - } - - public void quad( int a, int b ) { - turtle.fd(a); - turtle.rt(90); - turtle.fd(b); - turtle.rt(90); - turtle.fd(a); - turtle.rt(90); - turtle.fd(b); - turtle.rt(90); - } - - public static void main( String[] args ) { - new Skyline(); - } - -} diff --git a/examples/zm_skyline/package.bluej b/examples/zm_skyline/package.bluej deleted file mode 100644 index b9734eb..0000000 --- a/examples/zm_skyline/package.bluej +++ /dev/null @@ -1,69 +0,0 @@ -#BlueJ package file -dependency1.from=BluejTest -dependency1.to=ClasspathInspector -dependency1.type=UsesDependency -dependency2.from=Gravity -dependency2.to=Mover -dependency2.type=UsesDependency -dependency3.from=Gravity -dependency3.to=Attractor -dependency3.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=3 -package.numTargets=5 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=Mover -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=320 -target1.y=200 -target2.height=70 -target2.name=BluejTest -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=70 -target2.y=10 -target3.height=70 -target3.name=Attractor -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=390 -target3.y=350 -target4.height=70 -target4.name=ClasspathInspector -target4.showInterface=false -target4.type=ClassTarget -target4.width=130 -target4.x=380 -target4.y=30 -target5.height=70 -target5.name=Gravity -target5.showInterface=false -target5.type=ClassTarget -target5.width=120 -target5.x=100 -target5.y=300 diff --git a/examples/zm_tixy/Dot.java b/examples/zm_tixy/Dot.java deleted file mode 100644 index 7550aaa..0000000 --- a/examples/zm_tixy/Dot.java +++ /dev/null @@ -1,58 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Constants; -import schule.ngb.zm.Drawable; - -import java.awt.Graphics2D; - - -public class Dot implements Drawable { - - public static final Color DOT_RED = new Color(244, 32, 65); - - public static final Color DOT_WHITE = new Color(255); - - public static final int SIZE = TIXY.DOT_SIZE; - - public static final int RADIUS = TIXY.DOT_SIZE / 2; - - public static final int GAP = TIXY.DOT_GAP; - - public final int x, y, i; - - public int size = SIZE; - - public Color color; - - - public Dot( int x, int y, int i ) { - this.x = x; - this.y = y; - this.i = i; - - color = DOT_WHITE; - } - - public void setValue( double value ) { - if( value < 0 ) { - color = DOT_RED; - value = value * -1; - } else { - color = DOT_WHITE; - } - - value = Constants.limit(value, 0.0, 1.0); - size = (int) (SIZE * value); - } - - @Override - public boolean isVisible() { - return true; - } - - @Override - public void draw( Graphics2D graphics ) { - graphics.setColor(color.getJavaColor()); - graphics.fillOval(GAP + x * (SIZE + GAP) + RADIUS - (size / 2), GAP + y * (SIZE + GAP) + RADIUS - (size / 2), size, size); - } - -} diff --git a/examples/zm_tixy/MyTIXY.java b/examples/zm_tixy/MyTIXY.java deleted file mode 100644 index c3ffaa4..0000000 --- a/examples/zm_tixy/MyTIXY.java +++ /dev/null @@ -1,16 +0,0 @@ -import schule.ngb.zm.Color; -import schule.ngb.zm.Constants; - -public class MyTIXY extends Constants { - - public double update( double t, int i, int x, int y ) { - return sin(t-sqrt(pow((x-7.5),2)+pow((y-6),2))); - } - - public void update( double t, Dot dot ) { - if( dot.color.equals(Dot.DOT_RED) ) { - dot.color = BLUE; - } - } - -} diff --git a/examples/zm_tixy/README.TXT b/examples/zm_tixy/README.TXT deleted file mode 100644 index 4a5e196..0000000 --- a/examples/zm_tixy/README.TXT +++ /dev/null @@ -1,12 +0,0 @@ -# Zeichenmaschine: GenLines - -GenLines ist ein kreatives Projekt, bei dem ein Feld von Punkten durch geschickt -gewählte mathematische Formeln animiert wird. - -Die Idee stammt von der Seite http://tixy.land - -Dort finden sich auch weitere Beispiele für interessante Animationen. - -## Verwendung - - diff --git a/examples/zm_tixy/TIXY.java b/examples/zm_tixy/TIXY.java deleted file mode 100644 index 7264ab5..0000000 --- a/examples/zm_tixy/TIXY.java +++ /dev/null @@ -1,68 +0,0 @@ -import schule.ngb.zm.DrawableLayer; -import schule.ngb.zm.Zeichenmaschine; - -public class TIXY extends Zeichenmaschine { - - public static final int FIELD_SIZE = 16; - - public static final int DOT_SIZE = 16; - - public static final int DOT_GAP = 4; - - public static void main( String[] args ) { - new TIXY(); - } - - private Dot[][] dots; - - private MyTIXY tixy; - - public TIXY() { - super( - DOT_GAP + FIELD_SIZE * (DOT_SIZE + DOT_GAP), - DOT_GAP + FIELD_SIZE * (DOT_SIZE + DOT_GAP), - "tixy" - ); - } - - @Override - public void setup() { - background.setColor(BLACK); - - addLayer(new DrawableLayer()); - DrawableLayer dl = canvas.getLayer(DrawableLayer.class); - - tixy = new MyTIXY(); - - dots = new Dot[FIELD_SIZE][FIELD_SIZE]; - for( int i = 0; i < FIELD_SIZE; i++ ) { - for( int j = 0; j < FIELD_SIZE; j++ ) { - dots[i][j] = new Dot(i, j, i * FIELD_SIZE + j); - dl.add(dots[i][j]); - } - } - } - - @Override - public void draw() { - } - - @Override - public void update( double delta ) { - for( int i = 0; i < FIELD_SIZE; i++ ) { - for( int j = 0; j < FIELD_SIZE; j++ ) { - Dot d = dots[i][j]; - double value = tixy.update(runtime / 1000.0, d.i, d.x, d.y); - dots[i][j].setValue(value); - - tixy.update(runtime / 1000.0, dots[i][j]); - } - } - } - - @Override - public void mousePressed() { - stop(); - } - -} diff --git a/examples/zm_tixy/package.bluej b/examples/zm_tixy/package.bluej deleted file mode 100644 index 2f9f212..0000000 --- a/examples/zm_tixy/package.bluej +++ /dev/null @@ -1,58 +0,0 @@ -#BlueJ package file -dependency1.from=GenLines -dependency1.to=MyTIXY -dependency1.type=UsesDependency -dependency2.from=GenLines -dependency2.to=Dot -dependency2.type=UsesDependency -dependency3.from=MyTIXY -dependency3.to=Dot -dependency3.type=UsesDependency -dependency4.from=Dot -dependency4.to=GenLines -dependency4.type=UsesDependency -editor.fx.0.height=728 -editor.fx.0.width=1037 -editor.fx.0.x=95 -editor.fx.0.y=53 -objectbench.height=94 -objectbench.width=776 -package.divider.horizontal=0.6 -package.divider.vertical=0.8305369127516778 -package.editor.height=488 -package.editor.width=661 -package.editor.x=374 -package.editor.y=158 -package.frame.height=660 -package.frame.width=800 -package.numDependencies=4 -package.numTargets=3 -package.showExtends=true -package.showUses=true -project.charset=UTF-8 -readme.height=60 -readme.name=@README -readme.width=48 -readme.x=10 -readme.y=10 -target1.height=70 -target1.name=GenLines -target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=120 -target1.y=60 -target2.height=70 -target2.name=MyTIXY -target2.showInterface=false -target2.type=ClassTarget -target2.width=120 -target2.x=200 -target2.y=210 -target3.height=70 -target3.name=Dot -target3.showInterface=false -target3.type=ClassTarget -target3.width=120 -target3.x=420 -target3.y=140