/* * Engine Alpha ist eine anfängerorientierte 2D-Gaming Engine. * * Copyright (c) 2011 - 2014 Michael Andonie and contributors. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package ea.edu; import ea.API; import ea.Bild; import ea.Maus; import ea.Punkt; import ea.internal.util.Logger; /** * Die Klasse SPIEL ist ein Template, das so wie es ist an Schueler ausgegeben werden kann. (Einzige * Voraussetzung ist, dass die engine-alpha-Bibliothek im Suchpfad erreichbar ist.) Es startet alles * Notwendige fuer ein Spiel. * <p/> * Beim Konstruktor ohne Parameter gibt es keine Punkte-Anzeigen und auch keine Maus-Interaktion. * Die Methoden tick() und tasteReagieren() werden immer automatisch aufgerufen. * <p/> * Beim Konstruktor mit Parametern koennen die linken und rechten Punkte-Anzeigen sowie die * Interaktion mit der Maus ein- bzw. ausgeschaltet werden. * * @author Michael Andonie (nach Idee von Bendikt Lindemann und Mike Ganshorn), Niklas Keller */ public class SPIEL { /** * Die Anzeige des Spiels. */ private AnzeigeE anzeige; /** * Ermöglicht den Tick-Tack-Wechsel. */ private boolean tick; /** * Erstellt ein einfaches Spiel ohne Anzeige und Maus.<br /> Das Spiel hat somit Ticker und * Tastatureingaben. */ @API @SuppressWarnings ( "unused" ) public SPIEL () { this(808, 629, false, false, false); } /** * Erstellt ein Spiel. Startet die Anzeige. * * @param punkteLinks * ist dieser Wert <code>true</code>, so sieht man links eine Punkteanzeige. Ist er * <code>false</code> sieht man keine. * @param punkteRechts * ist dieser Wert <code>true</code>, so sieht man rechts eine Punkteanzeige. Ist er * <code>false</code> sieht man keine. * @param maus * ist dieser Wert <code>true</code>, wird eine Maus im Spiel angezeigt und verwendet. Ist er * <code>false</code>, gibt es keine Maus. */ @API @SuppressWarnings ( "unused" ) public SPIEL (int breite, int hoehe, boolean punkteLinks, boolean punkteRechts, boolean maus) { this(breite, hoehe, punkteLinks, punkteRechts, maus, true); } /** * Erstellt ein Spiel. Startet die Anzeige. * * @param punkteLinks * ist dieser Wert <code>true</code>, so sieht man links eine Punkteanzeige. Ist er * <code>false</code> sieht man keine. * @param punkteRechts * ist dieser Wert <code>true</code>, so sieht man rechts eine Punkteanzeige. Ist er * <code>false</code> sieht man keine. * @param maus * ist dieser Wert <code>true</code>, wird eine Maus im Spiel angezeigt und verwendet. Ist er * <code>false</code>, gibt es keine Maus. */ @API @SuppressWarnings ( "unused" ) public SPIEL (int breite, int hoehe, boolean punkteLinks, boolean punkteRechts, boolean maus, boolean tickerAnmelden) { // Tick, Tack, ... tick = false; anzeige = new AnzeigeE(breite, hoehe); // Punkteanzeige anzeige.punkteLinksSichtbarSetzen(punkteLinks); anzeige.punkteRechtsSichtbarSetzen(punkteRechts); // Maus ggf. aktivieren if (maus) { anzeige.klickReagierbarAnmelden(this, true); } // Tastatur anzeige.tastenReagierbarAnmelden(this); // Ticker // Alle 500 Millisekunden (=Jede halbe Sekunde) ein Tick if (tickerAnmelden) { anzeige.tickerAnmelden(this, 500); } } /** * Wird regelmäßig aufgerufen. So kommt Bewegung ins Spiel! */ @SuppressWarnings ( "unused" ) public void tick () { // Einfache Bildschirmausgabe. Kann spaeter in Subklasse beliebig ueberschreiben werden. tick = !tick; // toggle Logger.info(tick ? "Tick!" : "Tack!"); } /** * Wird bei jedem Mausklick (Linksklick) automatisch aufgerufen. * * @param x * Die X-Koordinate des Klicks * @param y * Die Y-Koordinate des Klicks */ @SuppressWarnings ( "unused" ) public void klickReagieren (int x, int y) { // Einfache Bildschirmausgabe. Kann spaeter in Subklasse beliebig ueberschrieben werden. Logger.info("Klick bei (" + x + ", " + y + ")."); } /** * Wird bei jedem Tastendruck automatisch aufgerufen. * * @param tastenkuerzel * Der int-Wert, der fuer die gedrueckte Taste steht. Details koennen in der <i>Tabelle aller * Tastaturkuerzel</i> abgelesen werden. */ @SuppressWarnings ( "unused" ) public void tasteReagieren (int tastenkuerzel) { Logger.info("Taste mit Kuerzel " + tastenkuerzel + " wurde gedrueckt"); } /** * Setzt das Ticker-Intervall. * * @param ms * Die Zeit in Millisekunden zwischen zwei Aufrufen der <code>tick()</code>-Methode. */ @API @SuppressWarnings ( "unused" ) public void tickerIntervallSetzen (int ms) { anzeige.tickerAbmelden(this); anzeige.tickerAnmelden(this, ms); } /** * Stoppt die Ticker-Funktion. Die <code>tick()</code>-Methode wird nicht weiter aufgerufen. Der * automatische Aufruf der <code>tick()</code>-Methode kann durch die Methode * <code>tickerNeuStarten(int ms)</code> wiedergestartet werden. * * @see #tickerNeuStarten(int) */ @API @SuppressWarnings ( "unused" ) public void tickerStoppen () { anzeige.tickerAbmelden(this); } /** * Startet den Ticker neu. * * @param ms * Die Zeit in Millisekunden zwischen zwei Aufrufen der <code>tick()</code>-Methode. */ @API @SuppressWarnings ( "unused" ) public void tickerNeuStarten (int ms) { anzeige.tickerAbmelden(this); anzeige.tickerAnmelden(this, ms); } @API @SuppressWarnings ( "unused" ) public void tickerStarten () { this.tickerStarten(500); } @API @SuppressWarnings ( "unused" ) public void tickerStarten (int ms) { this.anzeige.tickerAnmelden(this, ms); } /** * Setzt ein neues Maus-Icon. * * @param pfad * Der Pfad zu dem Bild (jpg, bmp, png), das das neue Maus-Icon werden soll. ZB: * "mausicon.png" * @param hotspotX * Die X-Koordinate des Hotspots fuer das neue Maus-Icon. (relativ im Icon) * @param hotspotY * Die Y-Koordinate des Hotspots fuer das neue Maus-Icon. (relativ im Icon) */ @API @SuppressWarnings ( "unused" ) public void mausIconSetzen (String pfad, int hotspotX, int hotspotY) { ea.edu.FensterE.getFenster().mausAnmelden(new Maus(new Bild(0, 0, pfad), new Punkt(hotspotX, hotspotY)), true); } /** * Sorgt dafuer, dass sowohl der rechte als auch der linke Punktestand sichtbar ist. */ @API @SuppressWarnings ( "unused" ) public void allePunkteSichtbar () { anzeige.punkteLinksSichtbarSetzen(true); anzeige.punkteRechtsSichtbarSetzen(true); } /** * Sorgt dafuer, dass nur der linke Punktestand sichtbar ist. */ @API @SuppressWarnings ( "unused" ) public void nurRechtePunkteSichtbar () { anzeige.punkteLinksSichtbarSetzen(false); anzeige.punkteRechtsSichtbarSetzen(true); } /** * Sorgt dafuer, dass nur der rechte Punktestand sichtbar ist. */ @API @SuppressWarnings ( "unused" ) public void nurLinkePunkteSichtbar () { anzeige.punkteLinksSichtbarSetzen(true); anzeige.punkteRechtsSichtbarSetzen(false); } /** * Sorgt dafuer, dass weder der rechte noch der linke Punktestand sichtbar ist. */ @API @SuppressWarnings ( "unused" ) public void allePunkteUnsichtbar () { anzeige.punkteLinksSichtbarSetzen(false); anzeige.punkteRechtsSichtbarSetzen(false); } /** * Setzt den linken Punktestand. Aenderungen sind nur sichtbar, wenn auch der linke Punktestand * sichtbar ist. * * @param pl * Der neue linke Punktestand. */ @API @SuppressWarnings ( "unused" ) public void punkteLinksSetzen (int pl) { anzeige.punkteLinksSetzen(pl); } /** * Setzt den rechten Punktestand. Aenderungen sind nur sichtbar, wenn auch der rechte * Punktestand sichtbar ist. * * @param pr * Der neue rechte Punktestand. */ @API @SuppressWarnings ( "unused" ) public void punkteRechtsSetzen (int pr) { anzeige.punkteRechtsSetzen(pr); } /** * * @param farbe Die neue Farbe der Punkteanzeige */ public void setzeFarbePunktestand(String farbe) { anzeige.setzeFarbePunktestand(farbe); } /** * Gibt eine Zufallszahl aus. * * @param von * Die Untergrenze der Zufallszahl (INKLUSIVE) * @param bis * Die Obergrenze der Zufallszahl (INKLUSIVE) * * @return Eine Zufallszahl z mit: von <= z <= bis */ @API @SuppressWarnings ( "unused" ) public int zufallszahlVonBis (int von, int bis) { return anzeige.zufallszahlVonBis(von, bis); } /** * Setzt eine Hintergrundgrafik fuer das Spiel. * * @param pfad * Der Pfad der Bilddatei (jpg, bmp, png) des Bildes, das benutzt werden soll. ZB: * "hintergrund.jpg" */ @API @SuppressWarnings ( "unused" ) public void hintergrundgrafikSetzen (String pfad) { ea.edu.FensterE.getFenster().hintergrundSetzen(new Bild(0, 0, pfad)); } }