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
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/05/03 11:57]
Ivo Blöchliger [Tic Tac Toe]
lehrkraefte:blc:informatik:ffprg1-2024:raster-tictactoe [2024/05/17 13:10] (current)
Ivo Blöchliger [Gewinn überprüfen]
Line 99: Line 99:
 </WRAP> </WRAP>
  
 +
 +<hidden Lösungsvorschlag aus der Stunde>
 +<code mygame.js>
 +// Erst mal alles Laden, erst dann an der Webseite
 +// Dinge ändern (die sonst noch gar nicht existieren würden)
 +window.addEventListener('load', function() {
 +
 +
 +    // Raster anlegen
 +    // Diese Variable ist ab hier auch in Unterfunktionen
 +    // definiert und verwendbar
 +    let meinRaster = new Raster(13,13);
 +    let currentPlayer = 1;
 +
 +    function reset() {
 +        meinRaster.fill(0);
 +        currentPlayer = 1;
 +    }
 +    function zaehlen(x,y,vx,vy, markieren=false) {
 +        let count = function(x,y,vx,vy) {
 +            let anzahl = 1;
 +            let wert = meinRaster.getValue(x,y);
 +            let [a,b] = [x+vx,y+vy];
 +            while (meinRaster.isOn(a,b) && meinRaster.getValue(a,b)==wert) {
 +                if (markieren) {
 +                    meinRaster.setValue(a,b,wert+2);
 +                }
 +                anzahl++;
 +                [a,b] = [a+vx, b+vy];
 +            }
 +            return anzahl;
 +        }
 +        let anzahl = count(x,y,vx,vy, markieren)+count(x,y,-vx,-vy, markieren)-1;
 +        if (markieren) {
 +            meinRaster.setValue(x,y,meinRaster.getValue(x,y)+2);
 +        }
 +
 +        return anzahl;
 +    }
 +    
 +    function hasWon(x,y) {
 +        for (let v of [[1,0],[1,1],[0,1],[-1,1]]) {
 +            if (zaehlen(x,y,v[0],v[1])>=5) {
 +                zaehlen(x,y,v[0],v[1],true);
 +                return true;
 +            }
 +        }
 +    }
 +    // Callback für einen Klick definieren
 +    meinRaster.clickCallback = function(x, y) {
 +        let v = meinRaster.getValue(x,y);
 +        if (v==0) {
 +            meinRaster.setValue(x,y,currentPlayer);
 +            if (hasWon(x,y)) {
 +                console.log(`Player ${currentPlayer} hat gewonnen!`);
 +            }
 +            currentPlayer = 3-currentPlayer;
 +        }
 +    };
 +
 +    this.document.getElementById('resetknopf').addEventListener('click', reset);
 +
 +});
 +</code>
 +</hidden>
 ===== Zellen markieren ===== ===== Zellen markieren =====
 <WRAP todo> <WRAP todo>
  • lehrkraefte/blc/informatik/ffprg1-2024/raster-tictactoe.txt
  • Last modified: 2024/05/17 13:10
  • by Ivo Blöchliger