MMProg: Praktikum: WiSe 2017/18: Ball03b: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 63: | Zeile 63: | ||
**<code>new Circle</code> muss durch <code>new ModelCircle</code> aus dem gleichen Grund ersetzt werden. | **<code>new Circle</code> muss durch <code>new ModelCircle</code> aus dem gleichen Grund ersetzt werden. | ||
** Die Init-Funktion muss angepasst werden: | ** Die Init-Funktion muss angepasst werden: | ||
***Sie erwartet andere Parameter (vergleichen Sie die Parameterlisten von <code>init</code> in den Klassendiagrammen von [[:Datei:WK Ball03 ClassModel01.png|app01]] und [[:Datei:WK Ball03 ClassModel02.png|app02]]) | ***Sie erwartet andere Parameter (vergleichen Sie die Parameterlisten von <code>init</code> in den Klassendiagrammen von [[:Datei:WK Ball03 ClassModel01.png|app01]] und [[:Datei:WK Ball03 ClassModel02.png|app02]]). Ersetzen Sie also die Parameterliste von <code>init</code> durch die korrekte Parameterliste <source lang="javascript" | ||
>p_pixi, p_canvas, p_config, f_ready</source>. | |||
***Sie Parameter <code>p_pixi</code> und <code>p_canvas</code> gibt es immer noch, der Parameter <code>p_stage</code> ist weggefallen (er hatte die Größenparameter der Bühne enthalten), dafür sind <code>p_config</code> und <code>p_ready</code> hinzugekommen. Im Parameter <code>p_config</code> übergibt die Hauptanwendung <code>app02</code> den Inhalt der Konfigurationsdatei <code>json/config02.json</code>. In diesem Objekt sind insbesondere auch die Größenparameter der Bühne enthalten. Und die Funktion <code>f_ready</code> muss aufgerufen werden, sobald die Initialisierung vollständig erfolgt ist (vgl. [[MMProg:_Praktikum:_WiSe_2017/18:_Ball02#Aufgabe_3|Praktikumsausgabe Ball02, Aufgabe 3]]). | |||
***Passen Sie daher die die ersten beiden Befehle der Init-Funktion an: <source lang="javascript" | |||
>v_stage.width = p_config.model.stage.width;</source> sowie <source lang="javascript" | |||
>v_stage.height = p_config.model.stage.height;</source> | |||
*** Fügen Sie nun noch den Aufruf <code>f_ready();</code> als letzten Befehl in <code>die Init-Funktion ein. Nun sollte die Anwendung (nach einer Übersetzung mittels Grunt) im Browser wieder laufen. | |||
==Quellen== | ==Quellen== | ||
<references/> | <references/> | ||
Version vom 23. November 2017, 15:39 Uhr
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:
| Korrektheit: 3 (zu größeren Teilen überprüft) |
Umfang: 4 (unwichtige Fakten fehlen) |
Quellenangaben: 3 (wichtige Quellen vorhanden) |
Quellenarten: 5 (ausgezeichnet) |
Konformität: 3 (gut) |
Inhalt | Game Loop 01 | Ball 02 | Ball 03 | Ball 03b | Pong 01
Musterlösung: SVN-Repository
Ziel
In diesem Praktikum wird die im dritten Teils des Tutoriums begonnene Modularisierung des Projektes aus dem zweiten Teils des Tutoriums weitergeführt.
Aufgaben
Laden Sie das leere Projekt WK_Ball03b_empty auf Ihren Rechner.
Installieren Sie aber nicht die Node.js-Module, das machen Sie später. Sie finden das leere Projekt im
Repository-Pfad https://glossar.hs-augsburg.de/beispiel/tutorium/es6 im Unterordner empty.
Erstellen Sie ein neues Projekt praktikum03b und kopieren Sie die Ordner src und web (samt Inhalt)
sowie alle Dateien, die Sie im Wurzelverzeichnis des Projektes WK_Ball03b_Empty
finden, mittels Crtl-/Apfel-C Crtl-/Apfel-V in Ihr eigenes Projekt. (Die Frage, ob WebStorm seinen eigenen File Watcher zum
Übersetzen von ES6-Code in ES5-Code verwenden soll, beantworten Sie bitte mit „No“. Das erledigt Webpack für Sie.)
Sie können Ihr Projekt zur Übung auch im Subversion-Repository speichern. Das ist aber nicht so wichtig.
Nun können Sie in Ihrem eigenen Projekt die benötigten Node.js-Module installieren: npm i.
In Ihrem Projekt finden Sie wiederum mehrere Web-Anwendungen: index01.html verwendet die gepackte Version von app01.js,
die ihrerseits das Spiel game01/game.js einbindet. Et cetera. Die Web-Anwendung app00 basiert auf dem
nicht-modularen Spiel game00.js, das in der vorherigen Praktikumsaufgabe teilweise modularisiert wurde. Eine Musterlösung
der Praktikumsaufgabe MMProg: Praktikum: WiSe 2017/18: Ball03 finden Sie im Ordner src/js/app/game01 vor.
Sie können zur Lösung der nachfolgenden Aufgaben natürlich auch auf IHre eigene Lösung der letzten PRaktikumsaufgabe zurückgreifen.
Schreiben Sie Ihre Lösungen der Aufgabe $i$ in die Ordner game$i$.js.
Versuchen Sie möglichst viele Module der jeweils vorangegangenen Aufgabe wiederzuverwenden.
Aufgabe 1: Modularisierung des Modells
Machen Sie sich noch einmal klar, wie sich die Web-Anwendungen app00 und app01 unterscheiden.
Da der Code für beide Anwendungen in Ihrem Projekt bereits enthalten ist, brauchen Sie hier nichts zu implementieren.
Aufgabe 2: Modularisierung des Modells
Diese Aufgabe verfolgt zwei Ziele: Zum einen soll die Moularisierung voranschreiten und zum anderen soll JSON zum Initialisieren der Anwendung zum Einsatz kommen.

app02 (mit Properties)Beginnen Sie mit der Modularisierung. Wenn Sie die beiden obigen Diagramme vergleichen, stellen
Sie fest, dass drei zusätzliche Module eingeführt werden: modelUpdate, viewUpdate und
die Klasse Movable.
Kopieren Sie zunächst Code aus den bereits vorhandenen Module aus game01 in die zugehörigen Dateien von game02:
- Die Datei
game01/model/collision.jskönnen Sie vollständig übernehmen. - Die in der Klasse
Circle(game01/model/Circle.js) enthaltenen Methoden können Sie ebenfalls übernehmen. Beacten Sie allerdings, dass die Klasse jetztMovableCircleheißt. Sie dürfen in der Dateigame01/model/MovableCircle.jsden Klassennamen und den Export-Befehl nicht ändern. Sie sollten in den vorgegebenen Klassenrahmen lediglich die kopierten Funktionen einfügen. Wenn Sie nun Grunt laufen lassen, werden Sie feststellen, dass ein Fehler gemeldet wird. Der Grund dafür ist, dassMovableCircleals Subklasse vonMovabledeklariert wurde (MovableCircle extends Movable), Der Konstruktor einer Subklasse muss immer den Konstruktor der zugehörigen Superklasse aufrufen. Dieser Aufruf muss als erster Befehl im Konstruktor stehen. Fügen Sie also den Befehlsuper();in den Konstruktor vonMovableCircleein. Jetzt sollte Grunt den Code wieder fehlerfrei übersetzen können. - Die Datei
game01/model/Stage.jskönnen Sie ebenfalls vollständig übernehmen. Diese Datei wird erst in der nächsten Aufgabe angepasst. - Ebenso können Sie die Datei
game01/view/ViewCircle.jskönnen Sie in das neue Projekt kopieren. Diese Datei wird im Folgenden noch etwas vereinfacht, aber notwendig ist das nicht unbedingt. - Zu guter Letzt können Sie die
let-Anweisung und die drei Funktionsdefinitionrninit,modelUpdatesundviewUpdatesaus der Dateigame01/game.jsind die Dateigame02/game.jskopieren (ohne die Import- und den Exportbefehl zu verändern). Grunt sollte jetzt das Projekt übersetzen können, aber wenn Sie es starten, sehen Sie nur eine leere Bühne. Sie müssen in dieser Datei (game02/game.js) noch ein paar Anpassungen vornehmen:new Stagemuss durchnew ModelStageersetzt werden, da die KlasseStagejetzt unter diesem Namen importiert wird.new Circlemuss durchnew ModelCircleaus dem gleichen Grund ersetzt werden.- Die Init-Funktion muss angepasst werden:
- Sie erwartet andere Parameter (vergleichen Sie die Parameterlisten von
initin den Klassendiagrammen von app01 und app02). Ersetzen Sie also die Parameterliste voninitdurch die korrekte Parameterliste.p_pixi, p_canvas, p_config, f_ready
- Sie Parameter
p_pixiundp_canvasgibt es immer noch, der Parameterp_stageist weggefallen (er hatte die Größenparameter der Bühne enthalten), dafür sindp_configundp_readyhinzugekommen. Im Parameterp_configübergibt die Hauptanwendungapp02den Inhalt der Konfigurationsdateijson/config02.json. In diesem Objekt sind insbesondere auch die Größenparameter der Bühne enthalten. Und die Funktionf_readymuss aufgerufen werden, sobald die Initialisierung vollständig erfolgt ist (vgl. Praktikumsausgabe Ball02, Aufgabe 3). - Passen Sie daher die die ersten beiden Befehle der Init-Funktion an: sowie
v_stage.width = p_config.model.stage.width;
v_stage.height = p_config.model.stage.height;
- Fügen Sie nun noch den Aufruf
f_ready();als letzten Befehl indie Init-Funktion ein. Nun sollte die Anwendung (nach einer Übersetzung mittels Grunt) im Browser wieder laufen.
- Sie erwartet andere Parameter (vergleichen Sie die Parameterlisten von
Quellen
- Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)



