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
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/04/09 17:36]
Ivo Blöchliger [Gewinn überprüfen]
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/05/03 11:57] (current)
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ötigen Variablen zurücksetzt.
 +    * Wenn geklickt wird und alle Zellen schon voll sind, soll das Spiel neu starten.
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
Line 66: Line 69:
  
 Hinweise: Hinweise:
-  * Schreiben Sie zusätzlich eine Funktion ''zaehle(x,y,vx,vy)'', die zähltwie viele gleiche Werte >=1 vom Startpunkt x,y, in Richtung des Vektors (vx,vy) anzutreffen sind. +  * Schreiben Sie zusätzlich eine Funktion ''sindsDrei(x,y,vx,vy)'', die ''true'' ergibtwenn drei gleiche Werte >=1 vom Startpunkt x,y, in Richtung des Vektors (vx,vy) anzutreffen sind. Sonst ''false''
-  * Rufen Sie die Funktion ''zaehle'' in der Funktion ''winner'' in einer for-schlaufe auf.+  * 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> </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.1712676982.txt.gz
  • Last modified: 2024/04/09 17:36
  • by Ivo Blöchliger