Hirdetés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz emitter #1156 üzenetére

    Az aknaz lényegi része valahogy így kellene kinézzen:


    for(i=0;i<max_aknak; ) //aknák véletlen elhelyezése
    {
    int dx, dy;
    int cx, cy;

    j=rand()%my; //az aknák koordinátája 0,my és 0,mx között lehet
    k=rand()%mx;
    if(mezo[j][k].akna==0) //ha az adott mezõn már van akna, nem rakunk oda
    {
    mezo[j][k].akna = 1;
    i++;

    for(dy = -1; dy <= 1; dy++)
    {
    cy = j + dy;
    if (cy >= 0 && cy < my)
    {
    for(dx = -1; dx <= 1; dx++)
    {
    cx = k + dx;
    if ((dy != 0 || dx != 0) &&
    cx >= 0 && cx < mx)
    {
    mezo[cy][cx].szomsz++;
    }
    }
    }
    }
    }
    }



    A feltárós résznél nem igazán értem, hogy akkor most miben mit számolsz, de úgy sejtem, hogy egy ilyen módosítással jó lehet:


    if (mezo[x][y].mark == -1)
    {
    (*mezoszam)++;
    } else {
    mezo[x][y].mark = -1;
    (*maradt)++;
    }



    És ez nem kell a hívás elõtt:

    mezo[j-1][i-1].reveal=1;
    mezo[j-1][i-1].mark=-1;
    mezoszam++;



    A mezoszam felteszem a feltárt vagy megjelölt mezõket számolja. Vagyis az automatikus feltárásnál csak akkor kell növelni, ha nem megjelölt mezõt tárunk fel, hiszen az már egyszer meg lett számolva. Viszont ha már meg volt jelölve, akkor most töröljük a jelölést, hiszen tudjuk, hogy nincs ott akna. Emiatt azonban a maradt változót növelni kell. Amúgy ez a +1/-1 a mark esetén elég sok fejfájást okozott nekem. Mostmár nehogy átírd, de a többi helyen használt 0/1 jobb lett volna.

    MOD: szöveg jó, kód rossz :U

    [Szerkesztve]

Új hozzászólás Aktív témák