Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:gng:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:gng:start [2022/06/21 21:02] – [Beispiel: Einfacher Timer] Martin Pabstapi:documentation:gng:start [2023/06/11 15:09] (aktuell) Martin Pabst
Zeile 1: Zeile 1:
 ====== Graphics'n Games-API des Cornelsen-Verlages ====== ====== Graphics'n Games-API des Cornelsen-Verlages ======
-<WRAP center round info 80%> +<WRAP center round info 70%> 
-Die Autoren der [[https://informatikschulbuch.de/|Informatik-Bücher des Cornelsen-Verlages für bayerische Gymnasien]] haben eine API geschrieben, die es auf einfache Weise ermöglicht, kleine Spiele zu Programmieren. Diese API heißt "Graphics and Games". Sie wurde von den Buchautoren in den Programmiersprachen Java, Python und Swift implementiert. Damit die Beispiele der Cornelsen-Bücher auch in der Online-IDE lauffähig sind, habe ich die Java-Version der Graphics and Games-API nach Typescript portiert. \\ +Die Autoren der [[https://informatikschulbuch.de/|Informatik-Bücher des Cornelsen-Verlages für bayerische Gymnasien]] haben eine API geschrieben, die es auf einfache Weise ermöglicht, kleine Spiele zu programmieren. Diese API heißt "Graphics and Games". Sie wurde von den Buchautoren in den Programmiersprachen Java, Python und Swift implementiert. Damit die Beispiele der Cornelsen-Bücher auch in der Online-IDE lauffähig sind, habe ich die Java-Version der Graphics and Games-API nach Typescript portiert. \\ 
   * Die Vorlagen für die Buchaufgaben finden Sie [[https://informatikschulbuch.de/jahrgangsstufe-9-uebersicht/objektorientierte-modellierung-und-programmierung/|hier auf der Website der Buchautoren]].   * Die Vorlagen für die Buchaufgaben finden Sie [[https://informatikschulbuch.de/jahrgangsstufe-9-uebersicht/objektorientierte-modellierung-und-programmierung/|hier auf der Website der Buchautoren]].
   * Hier die [[http://gng4java.informatikschulbuch.de/package-summary.html|Dokumentation der Java-Variante der Graphics and Games-API als JavaDoc]].   * Hier die [[http://gng4java.informatikschulbuch.de/package-summary.html|Dokumentation der Java-Variante der Graphics and Games-API als JavaDoc]].
  
-Im Folgenden eine Beschreibung, wie die Graphics and Games-API in der Online IDE bzw. der Embedded-IDE aktiviert wird sowie eine kurze Dokumentation der API. Ich kenne die API selbst nur aufgrund der [[http://gng4java.informatikschulbuch.de/package-summary.html|JavaDoc-Beschreibung der Buchautoren]] und der Aufgaben im Buch. Entsprechend erhebt die Dokumentation unten keinen Anspruch auf Vollständigkeit oder Korrektheit. +Im Folgenden eine Beschreibung, wie die Graphics and Games-API in der Online IDE bzw. der Embedded-IDE aktiviert wird sowie eine kurze Dokumentation der API. **Ich kenne die API selbst nur aufgrund der [[http://gng4java.informatikschulbuch.de/package-summary.html|JavaDoc-Beschreibung der Buchautoren]] und der Aufgaben im Buch. Entsprechend erhebt die Dokumentation unten keinen Anspruch auf Vollständigkeit oder Korrektheit.** 
   * Eine einführende Beschreibung der API ist mir nicht bekannt. Falls Sie eine kennen, schreiben Sie mir bitte, ich verlinke sie gerne!   * Eine einführende Beschreibung der API ist mir nicht bekannt. Falls Sie eine kennen, schreiben Sie mir bitte, ich verlinke sie gerne!
-  * Falls Sie unten Fehler finden oder Verbesserungsbedarf, schreiben Sie mir bitte. Vielleicht gibt es sogar jemanden unter Ihnen, die/der es übernehmen möchte, das Kapitel unten zu überarbeiten/vervollständigen? Ich würde mich freuen!+  * Falls Sie unten Fehler finden oder Verbesserungsbedarf, **schreiben Sie mir bitte**. Vielleicht gibt es sogar jemanden unter Ihnen, die/der es übernehmen möchte, das Kapitel unten zu überarbeiten/vervollständigen? Ich würde mich freuen!
 </WRAP> </WRAP>
  
Zeile 52: Zeile 52:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 350px; width: 70%" data-java-online="{'withBottomPanel': false, 'id': 'gng1', 'libraries':['gng']}">+<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'gng1', 'libraries':['gng']}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
Zeile 70: Zeile 70:
   * Das **Rechteck** ist 100 Pixel breit, 100 Pixel hoch und achsenparallel. Seine Linke obere Ecke befindet sich bei (10/10). Drehpunkt ist sein Diagonalenschnittpunkt. Die Methode ''PositionSetzen(x,y)'' verschiebt das Rechteck so, dass seine **linke obere Ecke** am Punkt ''x/y'' zu liegen kommt.   * Das **Rechteck** ist 100 Pixel breit, 100 Pixel hoch und achsenparallel. Seine Linke obere Ecke befindet sich bei (10/10). Drehpunkt ist sein Diagonalenschnittpunkt. Die Methode ''PositionSetzen(x,y)'' verschiebt das Rechteck so, dass seine **linke obere Ecke** am Punkt ''x/y'' zu liegen kommt.
   * Der **Kreis** hat einen Radius von 50 Pixel, sein Mittelpunkt (= Drehpunkt) befindet sich bei (60/60). Die Methode ''PositionSetzen(x,y)'' verschiebt den Kreis so, dass sein **Mittelpunkt** am Punkt ''x/y'' zu liegen kommt.   * Der **Kreis** hat einen Radius von 50 Pixel, sein Mittelpunkt (= Drehpunkt) befindet sich bei (60/60). Die Methode ''PositionSetzen(x,y)'' verschiebt den Kreis so, dass sein **Mittelpunkt** am Punkt ''x/y'' zu liegen kommt.
-  * Die Eckpunkte des **Dreiecks** haben die Koordinaten ''60/10'', ''110/110'' und ''10/110''. Das Dreieck ist also gleichschenklig, aber nicht gleichseitig. Drehpunkt ist der Punkt ''60/60''. Die Methode ''PositionSetzen(x/y)'' verschiebt das Dreieck so, dass der Punkt des Dreiecks, der vorher bei ''60/10'' lag (also die obere Spitze), danach bei ''x/y'' liegt.+  * Die Eckpunkte des **Dreiecks** haben die Koordinaten ''60/10'', ''110/110'' und ''10/110''. Das Dreieck ist also gleichschenklig, aber nicht gleichseitig. **Drehpunkt** ist der Punkt ''60/60''. Die Methode ''PositionSetzen(x/y)'' verschiebt das Dreieck so, dass der Punkt des Dreiecks, der vorher bei ''60/10'' lag (also die **obere Spitze**), danach bei ''x/y'' liegt.
   * Das Text-Objekt schreibt initial "Text" ungefähr in die linke obere Ecke.   * Das Text-Objekt schreibt initial "Text" ungefähr in die linke obere Ecke.
  
Zeile 123: Zeile 123:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 350px; width: 70%" data-java-online="{'withBottomPanel': false, 'id': 'gng3', 'libraries':['gng']}">+<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'gng3', 'libraries':['gng']}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
Zeile 184: Zeile 184:
 ===== Die Klasse Figur ===== ===== Die Klasse Figur =====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Ein Objekt der Klasse ''Figur'' besteht aus beliebig vielen Dreiecken, Rechtecken und Ellipsen. Es kann - ähnlich einer Gruppierung in einem vektororientierten Grafikprogramm - als ganzes verschoben, gedreht oder gestreckt werden. Zudem kann ermittelt werden, ob es mit anderen graphischen Objekten kollidiert. \\ \\ +Ein Objekt der Klasse ''Figur'' besteht aus beliebig vielen Dreiecken, Rechtecken und Ellipsen. Es kann - ähnlich einer Gruppierung in einem vektororientierten Grafikprogramm - als Ganzes verschoben, gedreht oder gestreckt werden. Zudem kann ermittelt werden, ob es mit anderen graphischen Objekten kollidiert. \\ \\ 
 Ein Objekt der Klasse Figur kann - in Maßen - auch animiert werden. Dazu ist es jedoch nötig, für jeden Animationsschritt alle Bestandteile der Figur zu löschen und neu zu zeichnen. \\  \\   Ein Objekt der Klasse Figur kann - in Maßen - auch animiert werden. Dazu ist es jedoch nötig, für jeden Animationsschritt alle Bestandteile der Figur zu löschen und neu zu zeichnen. \\  \\  
-Die Idee hinter der Klasse ''Figur'' ist, eine Unterklasse zu erstellen und mit Methoden zu versehen, die die einzelnen Animationsbilder zeichnen. Durch überschreiben der Methoden ''TasteGedrückt'', ''SondertasteGedrückt'' und ''Mausgeklickt'' kann man auf Tastatur- und Mausereignisse reagieren. Die Methode ''AktionAusführen'' wird periodisch vom Taktgeber aufgerufen. Durch Überschreiben lässt sich also eine Game Loop-artige Programmierung realisieren.+Die Idee hinter der Klasse ''Figur'' ist, eine Unterklasse zu erstellen und mit Methoden zu versehen, die die einzelnen Animationsbilder zeichnen. Durch Überschreiben der Methoden ''TasteGedrückt'', ''SondertasteGedrückt'' und ''Mausgeklickt'' kann man auf Tastatur- und Mausereignisse reagieren. Die Methode ''AktionAusführen'' wird periodisch vom Taktgeber aufgerufen. Durch Überschreiben lässt sich also eine Game Loop-artige Programmierung realisieren.
 </WRAP> </WRAP>
  
Zeile 192: Zeile 192:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 350px; width: 70%" data-java-online="{'withBottomPanel': false, 'id': 'gng4', 'libraries':['gng']}">+<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'gng4', 'libraries':['gng']}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
Zeile 314: Zeile 314:
 </WRAP> </WRAP>
  
-==== Beispiel: Einfacher Timer ====+==== Beispiel 1: Einfacher Timer durch Implementieren des Interfaces Aktionsempfänger ====
 <HTML> <HTML>
  
-<div class="java-online" style="height: 350px; width: 70%" data-java-online="{'withBottomPanel': false, 'id': 'gng4', 'libraries':['gng']}">+<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'gng4', 'libraries':['gng']}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
 +SystemTools.setSpeed(-1);
 Zeichenfenster.AktionsEmpfängerEintragen(new Zeitanzeige()); Zeichenfenster.AktionsEmpfängerEintragen(new Zeitanzeige());
 Zeichenfenster.TaktdauerSetzen(1000); Zeichenfenster.TaktdauerSetzen(1000);
Zeile 369: Zeile 370:
  
 </HTML> </HTML>
 +
 +
 +
 +
 +==== Beispiel 2: Einfacher Timer durch Erben von der Klasse Ereignisbehandlung ====
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'gng5', 'libraries':['gng']}">
 +
 +<script type="text/plain" title="Test2.java">
 +SystemTools.setSpeed(-1);
 +Zeichenfenster.TaktdauerSetzen(200);   // Taktdauer in ms
 +Zeichenfenster.TaktgeberStarten();
 +
 +Test t = new Test();
 +
 +while (true);
 +
 +
 +
 +class Test extends Ereignisbehandlung {
 +   
 +   int n = 0;
 +
 +   public void TaktImpulsAusführen() {
 +      println(n++);
 +   }
 +   
 +   /**
 +   * Die folgenden drei Methoden können bei Bedarf ebenfalls
 +   * überschrieben werden:
 +   */
 +   public void TasteGedrückt(char taste);
 +
 +   public void SonderTasteGedrückt(int taste);
 +
 +   public void MausGeklickt(int x, int y, int anzahl);
 +
 +}
 +
 +</script>
 +</div>
 +</HTML>
 +
api/documentation/gng/start.1655838121.txt.gz · Zuletzt geändert: 2022/06/21 21:02 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki