first commit
This commit is contained in:
11
FindTheHole/FindTheHole.iml
Normal file
11
FindTheHole/FindTheHole.iml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
27
FindTheHole/src/Distance.java
Normal file
27
FindTheHole/src/Distance.java
Normal file
@@ -0,0 +1,27 @@
|
||||
import basis.TextFeld;
|
||||
|
||||
import java.awt.*;
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
public class Distance {
|
||||
TextFeld textFeld;
|
||||
Player player;
|
||||
Player target;
|
||||
DecimalFormat dc;
|
||||
public Distance(Player player, Player target, int frameWidth, Color framColor) {
|
||||
this.player = player;
|
||||
this.target = target;
|
||||
textFeld = new TextFeld();
|
||||
textFeld.setzeGroesse(200,50);
|
||||
textFeld.setzeHintergrundFarbe(framColor);
|
||||
textFeld.setzeSchriftFarbe(player.getColor());
|
||||
textFeld.setzePosition(frameWidth/2-textFeld.breite()/2,textFeld.hoehe());
|
||||
textFeld.setzeSchriftGroesse(25);
|
||||
textFeld.entferneRand();
|
||||
dc = new DecimalFormat("0");
|
||||
}
|
||||
|
||||
public void getValue(){
|
||||
textFeld.setzeText("Distance: " + dc.format(player.getPlayerPos().distance(target.getPlayerPos())));
|
||||
}
|
||||
}
|
||||
18
FindTheHole/src/Hitdetection.java
Normal file
18
FindTheHole/src/Hitdetection.java
Normal file
@@ -0,0 +1,18 @@
|
||||
public class Hitdetection implements Runnable {
|
||||
Player player;
|
||||
Player target;
|
||||
public Hitdetection(Player player1, Player player2) {
|
||||
player = player1;
|
||||
target = player2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (!Thread.currentThread().isInterrupted()){
|
||||
if (player.getPlayerPos().distance(target.getPlayerPos())<50){
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
46
FindTheHole/src/Operator.java
Normal file
46
FindTheHole/src/Operator.java
Normal file
@@ -0,0 +1,46 @@
|
||||
import basis.Hilfe;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class Operator {
|
||||
private Output out;
|
||||
private Player player;
|
||||
private Player target;
|
||||
private Render playerRender;
|
||||
private Hitdetection hitdetection;
|
||||
private Distance distance;
|
||||
|
||||
private Runnable[] runnables;
|
||||
|
||||
private ExecutorService executor = Executors.newCachedThreadPool();
|
||||
public Operator() {
|
||||
out = new Output();
|
||||
player = new Player(Hilfe.zufall(50, 1870), Hilfe.zufall(50, 1030), Color.GREEN);
|
||||
target = new Player(Hilfe.zufall(50, 1870), Hilfe.zufall(50, 1030), Color.BLACK);
|
||||
playerRender = new Render(player);
|
||||
hitdetection = new Hitdetection(player,target);
|
||||
distance = new Distance(player,target,out.getFrame().breite(),
|
||||
out.getFrame().hintergrundFarbe());
|
||||
runnables = new Runnable[]{playerRender, hitdetection};
|
||||
}
|
||||
|
||||
private void operate() {
|
||||
player.move();
|
||||
for (Runnable r : runnables
|
||||
) {
|
||||
executor.execute(r);
|
||||
}
|
||||
while (true){
|
||||
player.move();
|
||||
distance.getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Operator op = new Operator();
|
||||
op.operate();
|
||||
}
|
||||
}
|
||||
16
FindTheHole/src/Output.java
Normal file
16
FindTheHole/src/Output.java
Normal file
@@ -0,0 +1,16 @@
|
||||
import basis.Farbe;
|
||||
import basis.Fenster;
|
||||
import basis.Hilfe;
|
||||
|
||||
public class Output {
|
||||
private Fenster frame;
|
||||
|
||||
public Output() {
|
||||
frame = new Fenster(Hilfe.monitorBreite(), Hilfe.monitorHoehe());
|
||||
frame.setzeHintergrundFarbe(Farbe.rgb(40, 40, 40));
|
||||
}
|
||||
|
||||
public Fenster getFrame() {
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
83
FindTheHole/src/Player.java
Normal file
83
FindTheHole/src/Player.java
Normal file
@@ -0,0 +1,83 @@
|
||||
import basis.Hilfe;
|
||||
import basis.Maus;
|
||||
import basis.Stift;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class Player {
|
||||
private Point playerPos;
|
||||
private Maus mouse;
|
||||
private Stift pen;
|
||||
private Color c;
|
||||
|
||||
private Point[] positions;
|
||||
private double[] angles;
|
||||
private int times;
|
||||
private boolean updated;
|
||||
|
||||
public Player(int x, int y, Color color) {
|
||||
playerPos = new Point(x, y);
|
||||
mouse = new Maus();
|
||||
pen = new Stift();
|
||||
pen.bewegeAuf(playerPos.getX(),playerPos.getY());
|
||||
c = color;
|
||||
|
||||
times = 0;
|
||||
updated = false;
|
||||
positions = new Point[200];
|
||||
angles = new double[positions.length];
|
||||
}
|
||||
|
||||
public void move(){
|
||||
pen.dreheInRichtung(mouse.hPosition(),mouse.vPosition());
|
||||
pen.bewegeUm(1);
|
||||
playerPos.setLocation(pen.hPosition(),pen.vPosition());
|
||||
updated = false;
|
||||
|
||||
Point temp = new Point(playerPos);
|
||||
if (positions[positions.length-1] == null){
|
||||
positions[times] = temp;
|
||||
angles[times] = penOrientation();
|
||||
} else {
|
||||
System.arraycopy(positions,1,positions,0,positions.length-1);
|
||||
positions[positions.length-1] = temp;
|
||||
|
||||
System.arraycopy(angles,1,angles,0,angles.length-1);
|
||||
angles[angles.length-1] = penOrientation();
|
||||
}
|
||||
times++;
|
||||
Hilfe.warte(1);
|
||||
}
|
||||
|
||||
public double[] getAngles() {
|
||||
return angles;
|
||||
}
|
||||
|
||||
public double penOrientation(){
|
||||
return pen.winkel()+90;
|
||||
}
|
||||
|
||||
public boolean isUpdated() {
|
||||
return updated;
|
||||
}
|
||||
|
||||
public Point[] getPositions() {
|
||||
return positions;
|
||||
}
|
||||
|
||||
public void setUpdated(boolean updated) {
|
||||
this.updated = updated;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return c;
|
||||
}
|
||||
|
||||
public Point getPlayerPos() {
|
||||
return playerPos;
|
||||
}
|
||||
|
||||
public void setPlayerPos(Point playerPos) {
|
||||
this.playerPos = playerPos;
|
||||
}
|
||||
}
|
||||
48
FindTheHole/src/Render.java
Normal file
48
FindTheHole/src/Render.java
Normal file
@@ -0,0 +1,48 @@
|
||||
import basis.Hilfe;
|
||||
import basis.Muster;
|
||||
import basis.Stift;
|
||||
|
||||
public class Render implements Runnable {
|
||||
private Stift pen;
|
||||
private Player posPlayer;
|
||||
|
||||
private int times;
|
||||
|
||||
public Render(Player player) {
|
||||
pen = new Stift();
|
||||
pen.setzeFarbe(player.getColor());
|
||||
pen.setzeFuellMuster(Muster.GEFUELLT);
|
||||
|
||||
posPlayer = player;
|
||||
|
||||
times = 0;
|
||||
}
|
||||
|
||||
public void draw() {
|
||||
pen.kreis(posPlayer.getPlayerPos().getX(), posPlayer.getPlayerPos().getY(), 20);
|
||||
pen.setzeTransparenzGrad(0.05);
|
||||
pen.kreis(posPlayer.getPlayerPos().getX(), posPlayer.getPlayerPos().getY(), 30);
|
||||
}
|
||||
|
||||
private void erase(){
|
||||
pen.radiere();
|
||||
pen.setzeFuellMuster(Muster.DURCHSICHTIG);
|
||||
pen.kreisBogen(posPlayer.getPositions()[0].getX(),posPlayer.getPositions()[0].getY(),30,posPlayer.getAngles()[0],180);
|
||||
pen.setzeFuellMuster(Muster.GEFUELLT);
|
||||
pen.normal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (!Thread.currentThread().isInterrupted()){
|
||||
if (!posPlayer.isUpdated()) {
|
||||
draw();
|
||||
posPlayer.setUpdated(true);
|
||||
if (posPlayer.getPositions()[posPlayer.getPositions().length-1] != null) {
|
||||
this.erase();
|
||||
}
|
||||
times++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user