lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/04/09 15:37]
Ivo Blöchliger
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/04/09 17:57]
Ivo Blöchliger [Tic Tac Toe]
Line 20: Line 20:
     * fügen Sie eine Variable ''currentPlayer'' hinzu, die angibt, welcher Spieler (1 oder 2) gerade am Zug ist.     * fügen Sie eine Variable ''currentPlayer'' hinzu, die angibt, welcher Spieler (1 oder 2) gerade am Zug ist.
     * Beginnen Sie das Spiel im ''clickCallback'' zu programmieren (mit den Variablen ''meinRaster'' und ''currentPlayer''). Dabei soll einfach abwechselnd auf leeren Feldern gezogen werden können.     * Beginnen Sie das Spiel im ''clickCallback'' zu programmieren (mit den Variablen ''meinRaster'' und ''currentPlayer''). Dabei soll einfach abwechselnd auf leeren Feldern gezogen werden können.
 +    * Fügen Sie eine weitere Variable ''cellsPlayed'' hinzu, die zählt, wie viele Zellen schon belegt sind.
 +    * Programmieren Sie eine Unterfunktion ''reset'', die das Spiel und alle nögigen Variablen zurücksetzt.
 +    * Wenn geklickt wird und alle Zellen schon voll sind, soll das Spiel neu starten.
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
Line 58: Line 61:
 </WRAP> </WRAP>
  
 +
 +===== Gewinn überprüfen =====
 +<WRAP todo>
 +In der Datei ''mygame.js'', fügen Sie eine weitere Unterfunktion ''winner'' hinzu, die folgende Werte zurückgibt:
 +  * 0, wenn niemand 3 in einer Reihe hat
 +  * 1 oder 2, wenn Spieler 1 oder Spieler 2 gewonnen hat.
 +
 +Hinweise:
 +  * Schreiben Sie zusätzlich eine Funktion ''sindsDrei(x,y,vx,vy)'', die ''true'' ergibt, wenn drei gleiche Werte >=1 vom Startpunkt x,y, in Richtung des Vektors (vx,vy) anzutreffen sind. Sonst ''false''.
 +  * Rufen Sie die Funktion ''sindsDrei'' in der Funktion ''winner'' unter anderem in einer for-schlaufe auf.
 +
 +<hidden Teillösungsvorschlag>
 +<code javascript>
 +    function sindsDrei(x,y,vx,vy) {
 +        let w = meinRaster.getValue(x,y);
 +        if (w==0) return false;
 +        for (let i=0; i<3; i++) {
 +            if (meinRaster.getValue(x,y)!=w) return false;
 +            x+=vx;
 +            y+=vy;
 +        }
 +        return true;
 +    }
 +
 +    function winner() {
 +        for (let i=0; i<3; i++) {
 +            if (sindsDrei(i,0,0,1)) return meinRaster.getValue(i,0);  // Vertikal
 +            if (sindsDrei(0,i,1,0)) return meinRaster.getValue(0,i);  // Horizontal
 +        }
 +        if (sindsDrei(0,0,1,1)) return meinRaster.getValue(0,0);  // Diagonale in Richtung (1,1)
 +        if (sindsDrei(2,0,-1,1)) return meinRaster.getValue(2,0);  // Diagonale in Richtung (-1,1)
 +        return 0;
 +    }
 +
 +</code>
 +</hidden>
 +</WRAP>
 +
 +===== Zellen markieren =====
 +<WRAP todo>
 +Ziel ist es, die gewinnende Dreierreihe zu markieren.
 +  * Fügen Sie dazu in der Datei ''raster.css'' zwei weitere Klassen ''wert3'' und ''wert4'' hinzu, um das Aussehen der gewinnenden Zellen für Spieler 1 und 2 festzulegen.
 +  * In der Funktion ''sindsDrei'', fügen Sie unmittelbar vor dem ''return true'' noch eine Schlaufe hinzu, die den Wert der gewinndenden Zellen um 2 erhöht.
 +
 +<hidden Lösungsvorschlag>
 +<code css>
 +.wert3 {
 +    background-image: url("cross.svg");
 +    background-color: lightcoral;
 +    background-size: cover;
 +}
 +.wert4 {
 +    background-image: url("dot.svg");
 +    background-color: skyblue;
 +    background-size: cover;
 +}
 +</code>
 +<code javascript>
 +        for (let i=0; i<3; i++) {
 +            x-=vx;
 +            y-=vy;
 +            meinRaster.setValue(x,y,w+2);
 +        }
 +</code>
 +</hidden>
 +</WRAP>
  
  • lehrkraefte/blc/informatik/ffprg1-2024/raster-tictactoe.txt
  • Last modified: 2024/05/17 13:10
  • by Ivo Blöchliger