Hehomon Beispiel implementiert

Noch Bugs bei Verwendung des Vollbildmodus vorhanden
This commit is contained in:
ngb
2022-06-29 22:35:24 +02:00
parent ff56e689f8
commit 4f1bd25ad7
6 changed files with 208 additions and 36 deletions

View File

@@ -3,18 +3,18 @@
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);
gegner.nimmSchaden(zufall);
// gegner.nimmSchaden(100000000);
}
@Override

View 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);
}
}

View File

@@ -1,8 +1,9 @@
import schule.ngb.zm.Drawable;
import schule.ngb.zm.Options;
import schule.ngb.zm.Updatable;
import schule.ngb.zm.shapes.Picture;
public class Hehomon {
public class Hehomon extends Picture implements Updatable {
private String name, typ, bild;
@@ -14,7 +15,11 @@ public class Hehomon {
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;
@@ -25,6 +30,8 @@ public class Hehomon {
vert1 = pVert1;
vert2 = pVert2;
bild = pBild;
sinOffset = random(-PI, PI);
}
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);
}
}

View File

@@ -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;
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 ) {
new HehomonGame();
@@ -12,36 +17,119 @@ public class HehomonGame extends Zeichenmaschine {
private Hitpoints hpAttacker, hpDefender;
private Display display;
private Menu menu;
private boolean idle = true;
public HehomonGame() {
super(1024, 768, "ZM: Hehomon");
//setFullscreen(true);
super(960, 642, "ZM: Hehomon");
setFullscreen(true);
}
@Override
public void setup() {
ImageLayer bg = new ImageLayer("images/hintergrund.jpg");
canvas.addLayer(1, bg);
attacker = new Alligung();
attacker.moveTo(width * .25, 250);
attacker.flip(LEFT);
defender = new Salamanyte();
defender.moveTo(width * .75, 250);
hpAttacker = new Hitpoints(200, 400, attacker);
hpDefender = new Hitpoints(width-100, 400, defender);
hpAttacker = new Hitpoints(attacker);
hpDefender = new Hitpoints(defender);
shapes.add(new Picture(200, 100, "images/"+attacker.getBild()));
shapes.add(new Picture(width-200, 100, "images/"+defender.getBild()));
shapes.add(hpAttacker, hpDefender);
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);
}
@Override
public void update( double delta ) {
}
@Override
public void draw() {
}
@Override
public void keyPressed() {
attacker.nimmSchaden(random(0, 10));
defender.nimmSchaden(random(0, 10));
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);
}
}
}

View File

@@ -10,13 +10,15 @@ public class Hitpoints extends ShapeGroup implements Updatable {
private Rectangle rectMax, rectCurrent;
public Hitpoints( int pX, int pY, Hehomon pHehomon ) {
public Hitpoints(Hehomon pHehomon ) {
super();
hehomon = pHehomon;
rectMax = new Rectangle(pX,pY,206,11);
rectMax = new Rectangle(0, 0,206,11);
rectMax.setFillColor(0);
rectMax.noStroke();
rectCurrent = new Rectangle(pX+3,pY+3,200,5);
rectCurrent = new Rectangle(3,3,200,5);
rectCurrent.setFillColor(255);
rectCurrent.noStroke();
@@ -24,6 +26,7 @@ public class Hitpoints extends ShapeGroup implements Updatable {
add(rectMax);
add(rectCurrent);
nextTo(pHehomon, DOWN);
}
@Override
@@ -35,14 +38,8 @@ public class Hitpoints extends ShapeGroup implements Updatable {
public void update( double delta ) {
double lpAnteil = ((double)hehomon.getLp()/hehomon.getLpMax());
rectCurrent.setWidth( (int)((double)(rectMax.getWidth()-6) * lpAnteil) );
rectCurrent.setFillColor(
new Color(
255 - ((int)(255.0 * lpAnteil)),
(int)(255.0 * lpAnteil),
0
)
);
rectCurrent.setWidth( morph(0.0, rectMax.getWidth()-6.0, lpAnteil) );
rectCurrent.setFillColor( Color.interpolate(RED, GREEN, lpAnteil) );
}
}

40
examples/zm_hehomon/Menu.java Executable file
View 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);
}
}
}