From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/examples/Listing3409.java | 176 +++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/examples/Listing3409.java (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing3409.java') diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/Listing3409.java b/Master/Reference Architectures and Patterns/hjp5/examples/Listing3409.java new file mode 100644 index 0000000..58f20bc --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/examples/Listing3409.java @@ -0,0 +1,176 @@ +/* Listing3409.java */ + +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +class ColorRectangle +extends Rectangle +{ + public Color color; +} + +public class Listing3409 +extends Frame +implements Runnable +{ + //Konstanten + private static final int SIZERECT = 7; + private static final int SLEEP = 40; + private static final int NUMELEMENTS = 20; + private static final Color BGCOLOR = Color.lightGray; + + //Instanzvariablen + private Thread th; + private Vector snake; + private int dx; + private int dy; + + public static void main(String[] args) + { + Listing3409 frame = new Listing3409(); + frame.setSize(200,150); + frame.setVisible(true); + frame.startAnimation(); + } + + public Listing3409() + { + super("Animierte Schlange"); + setBackground(BGCOLOR); + addWindowListener(new WindowClosingAdapter(true)); + snake = new Vector(); + } + + public void startAnimation() + { + th = new Thread(this); + th.start(); + } + + public void run() + { + //Schlange konstruieren + ColorRectangle cr; + int x = 100; + int y = 100; + for (int i=0; i < NUMELEMENTS; ++i) { + cr = new ColorRectangle(); + cr.x = x; + cr.y = y; + cr.width = SIZERECT; + cr.height = SIZERECT; + x += SIZERECT; + cr.color = new Color( + i*(256/NUMELEMENTS), + 0, + 240-i*(256/NUMELEMENTS) + ); + snake.addElement(cr); + } + + //Vorzugsrichtung festlegen + dx = -1; + dy = -1; + + //Schlange laufen lassen + while (true) { + repaint(); + try { + Thread.sleep(SLEEP); + } catch (InterruptedException e){ + //nichts + } + moveSnake(); + } + } + + public void moveSnake() + { + Dimension size = getSize(); + int sizex = size.width-getInsets().left-getInsets().right; + int sizey = size.height-getInsets().top-getInsets().bottom; + ColorRectangle cr = (ColorRectangle)snake.firstElement(); + boolean lBorder = false; + int xalt, yalt; + int xtmp, ytmp; + + //Kopf der Schlange neu berechnen + if (cr.x <= 1) { + dx = 1; + lBorder = true; + } + if (cr.x + cr.width >= sizex) { + dx = -1; + lBorder = true; + } + if (cr.y <= 1) { + dy = 1; + lBorder = true; + } + if (cr.y + cr.height >= sizey) { + dy = -1; + lBorder = true; + } + if (! lBorder) { + if (rand(10) == 0) { + if (rand(2) == 0) { + switch (rand(5)) { + case 0: case 1: + dx = -1; + break; + case 2: + dx = 0; + break; + case 3: case 4: + dx = 1; + break; + } + } else { + switch (rand(5)) { + case 0: case 1: + dy = -1; + break; + case 2: + dy = 0; + break; + case 3: case 4: + dy = 1; + break; + } + } + } + } + xalt = cr.x + SIZERECT * dx; + yalt = cr.y + SIZERECT * dy; + //Rest der Schlange hinterherziehen + Enumeration e = snake.elements(); + while (e.hasMoreElements()) { + cr = (ColorRectangle)e.nextElement(); + xtmp = cr.x; + ytmp = cr.y; + cr.x = xalt; + cr.y = yalt; + xalt = xtmp; + yalt = ytmp; + } + } + + public void paint(Graphics g) + { + ColorRectangle cr; + Enumeration e = snake.elements(); + int inleft = getInsets().left; + int intop = getInsets().top; + while (e.hasMoreElements()) { + cr = (ColorRectangle)e.nextElement(); + g.setColor(cr.color); + g.fillRect(cr.x+inleft,cr.y+intop,cr.width,cr.height); + } + } + + private int rand(int limit) + { + return (int)(Math.random() * limit); + } +} \ No newline at end of file -- cgit v1.2.3