public GameTreeNode(GameTreeNode parent, int[][] curentmodel, int baumhoehe, int movenr, int owner) {
        this.enemy = owner == 1 ? 2 : 1;
        this.owner = owner;
        this.movenr = movenr;
        this.curentmodel = curentmodel;
        this.parentnode = parent;
        this.baumhoehe = baumhoehe;
        knotentiefe++;
        this.validemoves = checkValideMoves(curentmodel);

        if (checkOwnWin(curentmodel, owner)) {
            //System.out.println("KI kann gewinnen!");
            return;
        } else if (checkEnemyWin(curentmodel, enemy)) {
            //System.out.println("Spieler kann gewinnen!");
            return;
        } else {
            if (knotentiefe <= baumhoehe) {
                //System.out.println("Erstelle neue Nodes für jeden gültigen Spielzug Ebene: "+knotentiefe );
                childnodes = new ArrayList<>(7);

                for (int i : validemoves) {
                    //System.out.println("Node für Spalte: "+i);
                    int[][] newmodel = new int[6][7];

                    for (int row = 0; row < 6; row++) {
                        for (int column = 0; column < 7; column++) {
                            newmodel[row][column] = curentmodel[row][column];
                        }
                    }

                    newmodel = insertMove(newmodel, i);
                    if (knotentiefe % 2 == 0) {
                        childnodes.add(new GameTreeNode(this, newmodel, baumhoehe - 1, i, this.owner));
                    } else {
                        childnodes.add(new GameTreeNode(this, newmodel, baumhoehe - 1, i, enemy));
                    }

                }
            }
            this.value = calcValue(curentmodel, movenr, owner);
        }
    }