HTML5-Tutorium: Canvas: MiniPong 05: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(71 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HTML5-Tutorium:Canvas:MiniPong:Menü}}
{{HTML5-Tutorium:Canvas:MiniPong:Menü}}
'''Musterlösung''': <code>[http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04/WebContent/index.html Minipong 4]</code>
'''Musterlösung''': <code>[https://glossar.hs-augsburg.de/beispiel/tutorium/es5/minipong/WK_MiniPong05/web/index.html index.html]</code>
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04 SVN-Repository])
([https://glossar.hs-augsburg.de/beispiel/tutorium/es5/minipong/WK_MiniPong05/ WK_MiniPong05 (SVN)])


{{In Bearbeitung}}
==Ziel: Das fertige Spiel „MiniPong“ verbessern==
=Ziel: Simulation von Klassen in JavaScript=
Im fünften Teil des Tutoriums wird beschrieben, wie die funktionsfähige Version von MiniPong verbessert und erweitert werden kann.
Im vierten Teil des Tutoriums wird beschrieben, wie man [[Klasse]]n in JavaScript nachbilden kann.
 
Vier Klassen werden implementiert: <code>Main</code>, <code>Ball</code>, <code>Paddle</code> und <code>Collision</code>.
Es wird jeweils ein Objekt pro Klasse erstellt.
 
[[Medium:MiniPong04Canvas.png|miniatur|ohne|709px|Das Datenmodell von MiniPong 04]]
 
=Anwendung „<code>MiniPongCanvas04</code>“=
 
==Neues Projekt anlegen==
 
Legen Sie ein neues Statisches Web-Projekt mit dem Namen <code>MiniPongCanvas04</code> an.
 
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.
 
==Dateien erstellen==
 
Kopieren Sie die Dateien <code>index.html</code>, <code>css/main.css</code> und <code>js/CONSTANT.js</code> von [[HTML5-Tutorium: Canvas: MiniPong 03|Teil 3]] des Tutoriums,
passen Sie den Projekttitel in der Datei <code>index.html</code> an.
 
===<code>index.html</code>===
 
Jede Klasse soll in einer eigenen Datei definiert werden, wie dies auch bei anderen Programmiersprachen wie z.B. Java üblich ist.
Erstellen Sie zu diesem Zweck zunächst drei leere Dateien <code>js/ball.js</code>, <code>js/paddle.js</code> sowie <code>js/collision.js</code>
und fügen Sie anschließend folgende drei Zeilen in die Datei <code>index.html</code> ein (vor der Zeile, in der <code>js/main.js</code> geladen wird):
 
<source lang="javascript">
<script type="text/javascript" src="js/ball.js"    ></script>
<script type="text/javascript" src="js/paddle.js"  ></script>
<script type="text/javascript" src="js/collision.js"></script>
</source>
 
'''Anmerkung:''' Um den Kommunikations-Overhead zwischen Client (Browser) und Server möglichst gering zu halten,
sollte eine HTML-Seite möglichst wenige weitere Dokumente (Bilder, CSS-Dateien, JavaScript-Dateien etc.) nachladen.
Die Definition weiterer JavaSCript-Dateien stellt hier aber kein Problem dar, wenn – sobald die Anwendung fertiggestellt und ausgiebig getestet wurde –
alle JavaScript-Dateien komprimiert und in eine einzige Datei (<code>js/all.min.js</code>) eingefügt werden.  
Natürlich darf in der Datei <code>index.html</code> anschließend auch nur noch diese eine JavaScript-Datei geladen werden.
 
===<code>ball.js</code>===
 
Die Definition der Klasse <code>Ball</code> wird in JavaScript durch zwei Objekte realisiert oder – besser gesagt – simuliert:
Eine Konstruktor-Funktion (genauer: ein Konstruktor-Funktion-Objekt) sowie das zugehörige <code>prototype</code>-Objekt.
 
Die Konstruktor-Funktion <code>Ball</code> erstellt neue Ball-Objekte und initialisiert diese,
indem sie im neu erstellten Objekt (<code>this</code>) Attribute erstellt und initialisiert.
 
<source lang="javascript">
/**
*  Creates an instance of <code>Ball</code>.
*
*  @constructor
*  @this {Ball}
*  @param {CanvasRenderingContext2D} p_context
*        The 2d context of the canvas upon which the ball is to be drawed.
*  @param {number} p_r
*        The radius of the ball.
*  @param {number} [p_x_start = BALL_X]
*        The starting position of the ball in x-direction.
*  @param {number} [p_y_start = BALL_Y]   
*        The starting position of the ball in y-direction.
*  @param {number} [p_vx_start_min = BALL_VX_MIN]
*        The minimal starting velocity of the ball in x-direction.
*  @param {number} [p_vx_start_max = BALL_VX_MAX]
*        The maximal starting velocity of the ball in x-direction.
*  @param {number} [p_vy_start_min = BALL_VY_MIN]
*        The minimal starting velocity of the ball in y-direction.
*  @param {number} [p_vy_start_max = BALL_VY_MAX}
*        The maximal starting velocity of the ball in y-direction.
*/
function Ball(p_context,
              p_r, p_x_start, p_y_start,
              p_vx_start_min, p_vx_start_max,
              p_vy_start_min, p_vy_start_max
            )
{this.r = p_r || BALL_RADIUS;
 
  this.v_x_start        = p_x_start      || BALL_X;
  this.v_y_start        = p_y_start      || BALL_Y;
  this.v_vx_start_min  = p_vx_start_min || BALL_VX_MIN;
  this.v_vx_start_max  = p_vx_start_max || BALL_VX_MAX;
  this.v_vy_start_min  = p_vy_start_min || BALL_VY_MIN;
  this.v_vy_start_max  = p_vy_start_max || BALL_VY_MAX;
 
  this.v_vx_start_delta = this.v_vx_start_max - this.v_vx_start_min;
  this.v_vy_start_delta = this.v_vy_start_max - this.v_vy_start_min;
 
  this.v_context  = p_context;
 
  this.reset();
};
</source
 
Die <code>reset</code>-Methode nimmt weitere Initialisierungen vor.
Da diese Initialisierungen bei jedem Spielstart erneut ausgeführt werden müssen,
wurden sie in eine Methode ausgelagert.
 
Beachten Sie bitte, dass der dem Konstruktor vorangestellte Kommentar [[JSDoc]]-konform ist.
Dies ermöglicht es, mit einem geeigneten JSDoc-Tool eine HTML-[[API]]-Dokumentation automatisch zu erstellen.
 
Insbesondere weist der Konstruktor jedem damit erzeugten Objekt sein eigenes <code>prototype</code>-Objekt
als <code>prototype</code>-Objekt zu.
 
Im Prototype-Objekt des Konstruktor-Funktions-Obje
 
===<code>main.js</code>===
 
{{TBD}}
 
=Weitere Verbesserungsmöglichkeiten=
 
{{Codequalität
| application    = MiniPongCanvas04
| readability    = 4
| writability    = 6
| continuity      = 4
| customizability = 4
| dry            = 3
| demeter        = 5
| verifiability  = 2
| interfaces      = 6
| contract        = 6
| liskov          = 6
| modularity      = 3
}}
 
==Das Prinzip der „[[Programmierprinzipien#Verst.C3.A4ndlichkeit.2C_Comprehesibility.2C_Lesbarkeit.2C_Readability|Verständlichkeit/Lesbarkeit]]“==
 
{{TBD}}
 
==Das Prinzip der „[[Programmierprinzipien#Schreibbarkeit.2C_Writability|Schreibbarkeit]]“==
 
{{TBD}}
 
==Das Prinzip der „[[Programmierprinzipien#Stetigkeit.2C_Continuity|Stetigkeit]]“==
 
{{TBD}}
 
==Das Prinzip der „[[Programmierprinzipien#Konfigurierbarkeit.2C_Customizability|Konfigurierbarkeit]]“==
 
{{TBD}}
 
==Das Prinzip „[[Don't repeat yourself]]“==
 
{{TBD}}
 
==Das „[[Programmierprinzipien#Gesetz_von_Demeter.5B5.5D.2C_Law_of_Demeter.2C_LoD|Gesetz von Demeter]]“==
 
{{TBD}}
 
==Das Prinzip der „[[Programmierprinzipien#.C3.9Cberpr.C3.BCfbarkeit.2C_Verifiability|Überprüfbarkeit]]“==
 
{{TBD}}
 
==Das Prinzip „[[Programmierprinzipien#Benutze_Integrit.C3.A4tsbedingungen.2C_Make_Use_of_Integrity_Constraints.2C_Design_by_Contract.5B2.5D|Design by Contract]]“==
 
{{TBD}}
 
==Das  „[[Programmierprinzipien#Liskovsches_Substitutionsprinzip.5B3.5D.2C_LSP.2C_Ersetzbarkeitsprinzip.2C_Liskov_substitution_principle.5B4.5D|Liskovsche Substitutionsprinzip]]“==
 
{{TBD}}
 
==Das Prinzip der „[[Programmierprinzipien#Modularit.C3.A4t.2C_Modularity.2C_Teile_und_herrsche.2C_Divide_et_impera|Modularität]]“==


{{TBD}}
{{TBD}}


=Quellen=
===Klassenmodell===
<references/>
[[Datei:MiniPong05 ClassModel Overview.png|gerahmt|rechts|Klassendiagramm]]
<ol start = "2">
<li>{{Quelle|Braun, H. (2011): Webanimationen mit Canvas}}</li>
<li>{{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</li>
</ol>


=Fortsetzung des Tutoriums=


Sie sollten nun das [[HTML-Tutorium: SVG: Hello World|Hello-World-SVG-Tutorium]] bearbeiten, sofern Sie dies noch nicht gemacht haben.
==Quellen==
Anderenfalls können Sie gleich mit dem [[HTML-Tutorium: SVG: MiniPong|Minipong-SVG-Tutorium]] forfahren.
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}
[[Kategorie: HTML5-Tutorium: Canvas: MiniPong]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
[[Kategorie: HTML5-Tutorium: Canvas: MiniPong]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]

Aktuelle Version vom 9. Dezember 2016, 16:53 Uhr

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:

Korrektheit: 3
(zu größeren Teilen überprüft)
Umfang: 3
(einige wichtige Fakten fehlen)
Quellenangaben: 5
(vollständig vorhanden)
Quellenarten: 5
(ausgezeichnet)
Konformität: 5
(ausgezeichnet)

HTML-Tutorium: MiniPong

MiniPong: | Teil 1 | Teil 2 | Teil 3 | Teil 4 | Teil 5

Musterlösung: index.html (WK_MiniPong05 (SVN))

Ziel: Das fertige Spiel „MiniPong“ verbessern

Im fünften Teil des Tutoriums wird beschrieben, wie die funktionsfähige Version von MiniPong verbessert und erweitert werden kann.

TO BE DONE

Klassenmodell

Klassendiagramm


Quellen

  1. Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)