mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-04-14 14:43:33 +02:00
Hehomon Beispiel implementiert
Noch Bugs bei Verwendung des Vollbildmodus vorhanden
This commit is contained in:
@@ -3,18 +3,18 @@
|
|||||||
public class Alligung extends Hehomon {
|
public class Alligung extends Hehomon {
|
||||||
|
|
||||||
private int lernLevel;
|
private int lernLevel;
|
||||||
|
|
||||||
public Alligung() {
|
public Alligung() {
|
||||||
super("Alligung", "Drache", 80, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid", "Alligung.png");
|
super("Alligung", "Drache", 80, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid", "Alligung.png");
|
||||||
|
|
||||||
lernLevel = 0;
|
lernLevel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void angriff1( Hehomon gegner ) {
|
public void angriff1( Hehomon gegner ) {
|
||||||
int zufall = (int)(Math.random() * angr) + 4;
|
int zufall = (int)(Math.random() * angr) + 4;
|
||||||
// gegner.nimmSchaden(zufall);
|
gegner.nimmSchaden(zufall);
|
||||||
gegner.nimmSchaden(100000000);
|
// gegner.nimmSchaden(100000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
30
examples/zm_hehomon/Display.java
Normal file
30
examples/zm_hehomon/Display.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
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);
|
||||||
|
|
||||||
|
add(background, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText( String pText ) {
|
||||||
|
text.setText(pText);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
import schule.ngb.zm.Drawable;
|
import schule.ngb.zm.Drawable;
|
||||||
|
import schule.ngb.zm.Options;
|
||||||
import schule.ngb.zm.Updatable;
|
import schule.ngb.zm.Updatable;
|
||||||
import schule.ngb.zm.shapes.Picture;
|
import schule.ngb.zm.shapes.Picture;
|
||||||
|
|
||||||
public class Hehomon {
|
public class Hehomon extends Picture implements Updatable {
|
||||||
|
|
||||||
private String name, typ, bild;
|
private String name, typ, bild;
|
||||||
|
|
||||||
@@ -14,7 +15,11 @@ public class Hehomon {
|
|||||||
|
|
||||||
private String angr1, angr2, vert1, vert2;
|
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 ) {
|
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;
|
name = pName;
|
||||||
lp = pLp;
|
lp = pLp;
|
||||||
lpMax = pLp;
|
lpMax = pLp;
|
||||||
@@ -25,6 +30,8 @@ public class Hehomon {
|
|||||||
vert1 = pVert1;
|
vert1 = pVert1;
|
||||||
vert2 = pVert2;
|
vert2 = pVert2;
|
||||||
bild = pBild;
|
bild = pBild;
|
||||||
|
|
||||||
|
sinOffset = random(-PI, PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
@@ -127,4 +134,14 @@ public class Hehomon {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update( double delta ) {
|
||||||
|
double deltaY = sin(runtime / 800.0 * PI + sinOffset);
|
||||||
|
this.move(0.0, deltaY);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
import schule.ngb.zm.Zeichenmaschine;
|
import schule.ngb.zm.Constants;
|
||||||
|
import schule.ngb.zm.ImageLayer;
|
||||||
|
import schule.ngb.zm.Spielemaschine;
|
||||||
import schule.ngb.zm.shapes.Picture;
|
import schule.ngb.zm.shapes.Picture;
|
||||||
|
|
||||||
public class HehomonGame extends Zeichenmaschine {
|
import java.awt.Image;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
|
public class HehomonGame extends Spielemaschine {
|
||||||
|
|
||||||
public static void main( String[] args ) {
|
public static void main( String[] args ) {
|
||||||
new HehomonGame();
|
new HehomonGame();
|
||||||
@@ -12,36 +17,119 @@ public class HehomonGame extends Zeichenmaschine {
|
|||||||
|
|
||||||
private Hitpoints hpAttacker, hpDefender;
|
private Hitpoints hpAttacker, hpDefender;
|
||||||
|
|
||||||
|
private Display display;
|
||||||
|
|
||||||
|
private Menu menu;
|
||||||
|
|
||||||
|
private boolean idle = true;
|
||||||
|
|
||||||
public HehomonGame() {
|
public HehomonGame() {
|
||||||
super(1024, 768, "ZM: Hehomon");
|
super(960, 642, "ZM: Hehomon");
|
||||||
//setFullscreen(true);
|
setFullscreen(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup() {
|
public void setup() {
|
||||||
|
ImageLayer bg = new ImageLayer("images/hintergrund.jpg");
|
||||||
|
canvas.addLayer(1, bg);
|
||||||
|
|
||||||
attacker = new Alligung();
|
attacker = new Alligung();
|
||||||
|
attacker.moveTo(width * .25, 250);
|
||||||
|
attacker.flip(LEFT);
|
||||||
defender = new Salamanyte();
|
defender = new Salamanyte();
|
||||||
|
defender.moveTo(width * .75, 250);
|
||||||
|
|
||||||
hpAttacker = new Hitpoints(200, 400, attacker);
|
hpAttacker = new Hitpoints(attacker);
|
||||||
hpDefender = new Hitpoints(width-100, 400, defender);
|
hpDefender = new Hitpoints(defender);
|
||||||
|
|
||||||
shapes.add(new Picture(200, 100, "images/"+attacker.getBild()));
|
display = new Display(500, 500);
|
||||||
shapes.add(new Picture(width-200, 100, "images/"+defender.getBild()));
|
display.alignTo(SOUTHEAST, -50.0);
|
||||||
shapes.add(hpAttacker, hpDefender);
|
|
||||||
|
menu = new Menu(attacker);
|
||||||
|
menu.getWidth();
|
||||||
|
menu.alignTo(SOUTHWEST, -50.0);
|
||||||
|
|
||||||
|
add(attacker, defender);
|
||||||
|
add(hpAttacker, hpDefender);
|
||||||
|
add(display, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update( double delta ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void draw() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed() {
|
public void keyPressed() {
|
||||||
attacker.nimmSchaden(random(0, 10));
|
if( !idle ) {
|
||||||
defender.nimmSchaden(random(0, 10));
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,13 +10,15 @@ public class Hitpoints extends ShapeGroup implements Updatable {
|
|||||||
|
|
||||||
private Rectangle rectMax, rectCurrent;
|
private Rectangle rectMax, rectCurrent;
|
||||||
|
|
||||||
public Hitpoints( int pX, int pY, Hehomon pHehomon ) {
|
public Hitpoints(Hehomon pHehomon ) {
|
||||||
|
super();
|
||||||
|
|
||||||
hehomon = pHehomon;
|
hehomon = pHehomon;
|
||||||
|
|
||||||
rectMax = new Rectangle(pX,pY,206,11);
|
rectMax = new Rectangle(0, 0,206,11);
|
||||||
rectMax.setFillColor(0);
|
rectMax.setFillColor(0);
|
||||||
rectMax.noStroke();
|
rectMax.noStroke();
|
||||||
rectCurrent = new Rectangle(pX+3,pY+3,200,5);
|
rectCurrent = new Rectangle(3,3,200,5);
|
||||||
rectCurrent.setFillColor(255);
|
rectCurrent.setFillColor(255);
|
||||||
rectCurrent.noStroke();
|
rectCurrent.noStroke();
|
||||||
|
|
||||||
@@ -24,6 +26,7 @@ public class Hitpoints extends ShapeGroup implements Updatable {
|
|||||||
|
|
||||||
add(rectMax);
|
add(rectMax);
|
||||||
add(rectCurrent);
|
add(rectCurrent);
|
||||||
|
nextTo(pHehomon, DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -35,14 +38,8 @@ public class Hitpoints extends ShapeGroup implements Updatable {
|
|||||||
public void update( double delta ) {
|
public void update( double delta ) {
|
||||||
double lpAnteil = ((double)hehomon.getLp()/hehomon.getLpMax());
|
double lpAnteil = ((double)hehomon.getLp()/hehomon.getLpMax());
|
||||||
|
|
||||||
rectCurrent.setWidth( (int)((double)(rectMax.getWidth()-6) * lpAnteil) );
|
rectCurrent.setWidth( morph(0.0, rectMax.getWidth()-6.0, lpAnteil) );
|
||||||
rectCurrent.setFillColor(
|
rectCurrent.setFillColor( Color.interpolate(RED, GREEN, lpAnteil) );
|
||||||
new Color(
|
|
||||||
255 - ((int)(255.0 * lpAnteil)),
|
|
||||||
(int)(255.0 * lpAnteil),
|
|
||||||
0
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
40
examples/zm_hehomon/Menu.java
Executable file
40
examples/zm_hehomon/Menu.java
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
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, "");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user