<commit_before>function IgralnaCelica(html_celica, zacetni_igralec){
    this.html_celica = html_celica;
    this.igralec = zacetni_igralec;
    this.spremeni_barvo();
}


IgralnaCelica.prototype.odigraj_potezo = function (nov_igralec, animacija){
    this.igralec = nov_igralec;
    if(!animacija){
        this.spremeni_barvo();
    }
};


IgralnaCelica.prototype.spremeni_barvo = function (igralec) {
    this.html_celica.attr("class", "");
    if(igralec){
        this.html_celica.addClass(igralec.html_razred_barve);
    }else{
        this.html_celica.addClass(this.igralec.html_razred_barve);
    }
};


function KazalcnaCelica(html_celica){
    this.html_celica = html_celica;
}

KazalcnaCelica.prototype.prikazi_potezo = function (igralec, veljavnost){
    this.html_celica.attr("class", "");
    if(!veljavnost){
        this.html_celica.addClass("neveljavna");
    }
    this.html_celica.addClass(igralec.html_razred_barve);
};

KazalcnaCelica.prototype.skrij_potezo = function (){
    this.html_celica.attr("class", "");
};


function Igra(html_mreza, kazalci, visina, sirina, v_vrsto, prikaz_igralca, nastavitve) {

    this.html_mreza = html_mreza;
    this.kazalci = kazalci;
    this.na_potezi = IGRALCI.DEFUALT;
    this.poteze = [];
    this.koncano = STANJE.DEFUALT;
    this.visina = visina;
    this.sirina = sirina;
    this.v_vrsto = v_vrsto;
    this.prikaz_igralca = prikaz_igralca;
    this.nastavitve = nastavitve;

    this.AI = new AI(nastavitve.globina || 10, undefined, new Hevristika(HEVRISTIKA.TOCKOVANJE, sirina, visina, v_vrsto), {visina:this.visina, sirina:this.sirina,
        v_vrsto:this.v_vrsto, na_potezi:this.na_potezi});  // AI je v igri
    
}

Igra.prototype.najboljsa_poteza = function(){
    return this.AI.najboljsa_poteza(this.na_potezi);
};

Igra.prototype.je_poteza_veljavna = function (stolpec) {
    if(stolpec >= this.sirina){
        return false;
    }
    return this.html_mreza[stolpec][0].igralec == IGRALCI.NE_ODIGRANO;
};


Igra.prototype.izracunaj_potezo = function(poteza){
    if(this.je_poteza_veljavna(poteza)){
        for(var i = 0; i < this.visina; i++){
            if(this.html_mreza[poteza][i].igralec != IGRALCI.NE_ODIGRANO){
                return i - 1;
            }
        }
        return this.visina - 1;
    }
    else{
        throw new NeveljavnaPoteza(poteza.toString() + " ni veljavna poteza");
    }

};

Igra.prototype.opravi_potezo = function(vrstica, stolpec, animacija){
    var poteza = new Poteza(vrstica, stolpec, this.na_potezi);
    this.poteze.push(poteza);

    this.html_mreza[stolpec][vrstica].odigraj_potezo(this.na_potezi, animacija);

    var zmaga = this.preveri_zmago(stolpec, vrstica, this.na_potezi);
    if(zmaga !== null){
        this.koncano = STANJE.KONCANO;
        this.narisi_zmago(zmaga)
    }

    this.zamenjaj_igralca();

};

Igra.prototype.igraj = function(stolpec){
    try{
        var vrstica = this.izracunaj_potezo(stolpec);
        var igralec = this.na_potezi;
        this.opravi_potezo(vrstica, stolpec, true);
        this.animiraj_potezo(stolpec, vrstica, igralec);
        this.AI.igraj(stolpec);
    }
    catch (e){
        throw e;
    }

};


Igra.prototype.zamenjaj_igralca = function(){
    //Za 2 igralca je to dovolj
    if(this.na_potezi == IGRALCI.IGRALEC_1){
        this.na_potezi = IGRALCI.IGRALEC_2;
    }
    else{
        this.na_potezi = IGRALCI.IGRALEC_1;
    }

    this.prikazi_naslednjega_igralca();
};


Igra.prototype.prikazi_naslednjega_igralca = function () {
    this.prikaz_igralca.text(this.na_potezi.ime + " (" + ((this.na_potezi.clovek) ? "človek": "računalnik") + ")")

};

Igra.prototype.prikazi_potezo = function(stolpec){
    this.kazalci[stolpec].prikazi_potezo(this.na_potezi, this.je_poteza_veljavna(stolpec));<commit_msg>Igra pokaze zmagovalca<commit_after>function IgralnaCelica(html_celica, zacetni_igralec){
    this.html_celica = html_celica;
    this.igralec = zacetni_igralec;
    this.spremeni_barvo();
}


IgralnaCelica.prototype.odigraj_potezo = function (nov_igralec, animacija){
    this.igralec = nov_igralec;
    if(!animacija){
        this.spremeni_barvo();
    }
};


IgralnaCelica.prototype.spremeni_barvo = function (igralec) {
    this.html_celica.attr("class", "");
    if(igralec){
        this.html_celica.addClass(igralec.html_razred_barve);
    }else{
        this.html_celica.addClass(this.igralec.html_razred_barve);
    }
};


function KazalcnaCelica(html_celica){
    this.html_celica = html_celica;
}

KazalcnaCelica.prototype.prikazi_potezo = function (igralec, veljavnost){
    this.html_celica.attr("class", "");
    if(!veljavnost){
        this.html_celica.addClass("neveljavna");
    }
    this.html_celica.addClass(igralec.html_razred_barve);
};

KazalcnaCelica.prototype.skrij_potezo = function (){
    this.html_celica.attr("class", "");
};


function Igra(html_mreza, kazalci, visina, sirina, v_vrsto, prikaz_igralca, nastavitve) {

    this.html_mreza = html_mreza;
    this.kazalci = kazalci;
    this.na_potezi = IGRALCI.DEFUALT;
    this.poteze = [];
    this.koncano = STANJE.DEFUALT;
    this.visina = visina;
    this.sirina = sirina;
    this.v_vrsto = v_vrsto;
    this.prikaz_igralca = prikaz_igralca;
    this.nastavitve = nastavitve;

    this.AI = new AI(nastavitve.globina || 10, undefined, new Hevristika(HEVRISTIKA.TOCKOVANJE, sirina, visina, v_vrsto), {visina:this.visina, sirina:this.sirina,
        v_vrsto:this.v_vrsto, na_potezi:this.na_potezi});  // AI je v igri
    
}

Igra.prototype.najboljsa_poteza = function(){
    return this.AI.najboljsa_poteza(this.na_potezi);
};

Igra.prototype.je_poteza_veljavna = function (stolpec) {
    if(stolpec >= this.sirina){
        return false;
    }
    return this.html_mreza[stolpec][0].igralec == IGRALCI.NE_ODIGRANO;
};


Igra.prototype.izracunaj_potezo = function(poteza){
    if(this.je_poteza_veljavna(poteza)){
        for(var i = 0; i < this.visina; i++){
            if(this.html_mreza[poteza][i].igralec != IGRALCI.NE_ODIGRANO){
                return i - 1;
            }
        }
        return this.visina - 1;
    }
    else{
        throw new NeveljavnaPoteza(poteza.toString() + " ni veljavna poteza");
    }

};

Igra.prototype.opravi_potezo = function(vrstica, stolpec, animacija){
    var poteza = new Poteza(vrstica, stolpec, this.na_potezi);
    this.poteze.push(poteza);

    this.html_mreza[stolpec][vrstica].odigraj_potezo(this.na_potezi, animacija);

    var zmaga = this.preveri_zmago(stolpec, vrstica, this.na_potezi);
    if(zmaga !== null){
        this.koncano = STANJE.KONCANO;
        this.narisi_zmago(zmaga);
        this.prikazi_zmagovalca();
    }else{
        this.zamenjaj_igralca();
    }

};

Igra.prototype.igraj = function(stolpec){
    if(this.koncano == STANJE.KONCANO){ // Samo za vsak slucaj, uporabnik nacelome ne more klikniti na mrezo,
        // ker se prikaze zmaga
        return;
    }
    try{
        var vrstica = this.izracunaj_potezo(stolpec);
        var igralec = this.na_potezi;
        this.opravi_potezo(vrstica, stolpec, true);
        this.animiraj_potezo(stolpec, vrstica, igralec);
        this.AI.igraj(stolpec);
    }
    catch (e){
        throw e;
    }

};


Igra.prototype.zamenjaj_igralca = function(){
    //Za 2 igralca je to dovolj
    if(this.na_potezi == IGRALCI.IGRALEC_1){
        this.na_potezi = IGRALCI.IGRALEC_2;
    }
    else{
        this.na_potezi = IGRALCI.IGRALEC_1;
    }

    this.prikazi_naslednjega_igralca();
};


Igra.prototype.prikazi_naslednjega_igralca = function () {
    this.prikaz_igralca.text(this.na_potezi.ime + " (" + ((this.na_potezi.clovek) ? "človek": "računalnik") + ")")

};

Igra.prototype.prikazi_zmagovalca = function () {
    this.prikaz_igralca.text("Zmagovalec: " + this.na_potezi.ime + " (" + ((this.na_potezi.clovek) ? "človek": "računalnik") + ")")
};


Igra.prototype.prikazi_potezo = function(stolpec){
    this.kazalci[stolpec].prikazi_potezo(this.na_potezi, this.je_poteza_veljavna(stolpec));
{'fraction_non_alphanumeric': 0.131006006006006, 'fraction_numerical': 0.0025025025025025025, 'mean_word_length': 3.3893465129049973, 'pattern_counts': {'":': 3, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2177556', 'n_tokens_mistral': 3444, 'n_tokens_neox': 3391, 'n_words': 412}