Hirdetés

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

  • Tomi_78

    aktív tag

    És még egy kérdésem/gondom van a fejlesztendő programommal kapcsolatban: a címképernyőjén egy olyan animációt szeretnék, hogy a képernyő közepéből jönnek ki a csillagok véletlen irányba, és ez a "csillagkirobbanás" ismétlődne.
    Egy ciklussal 22 csillagot hozok létre, de a hatás finoman szólva nem az, amit szeretnék, mert mindig csak 4 irányba mennek a csillagok, nem pedig véletlenszerűen.
    Ez a csillagok osztálya:

    class Csillag {
    public:
    Csillag(int xh, int yh) {
    xhely = xh;
    yhely = yh;
    fajta = rand()%2;
    szin = rand()%2;
    do {
    celx = rand()%ablakszel;
    } while (celx==xhely);
    if (celx < xhely)
    xseb = -8;
    else xseb = 8;
    do {
    cely = rand()%ablakmag;
    } while (cely==yhely);
    if (cely < yhely)
    yseb = -8;
    else yseb = 8;
    };
    void kirajzol(HDC grafkez) {
    if (fajta == 0) { //Csak egy pont:
    if (szin == 0)
    SetPixel(grafkez,xhely,yhely,RGB(255,255,255));
    else
    SetPixel(grafkez,xhely,yhely,RGB(255,255,0));
    } else { //+ alakú:
    if (szin == 0) {
    SetPixel(grafkez,xhely,yhely,RGB(255,255,255)); //Közepe
    SetPixel(grafkez,xhely-1,yhely,RGB(255,255,255)); //Közepétől balra
    SetPixel(grafkez,xhely+1,yhely,RGB(255,255,255)); //Közepétől jobbra
    SetPixel(grafkez,xhely,yhely-1,RGB(255,255,255)); //Közepe fölött
    SetPixel(grafkez,xhely,yhely+1,RGB(255,255,255)); //Közepe alatt
    }
    else {
    SetPixel(grafkez,xhely,yhely,RGB(255,255,0)); //Közepe
    SetPixel(grafkez,xhely-1,yhely,RGB(255,255,0)); //Közepétől balra
    SetPixel(grafkez,xhely+1,yhely,RGB(255,255,0)); //Közepétől jobbra
    SetPixel(grafkez,xhely,yhely-1,RGB(255,255,0)); //Közepe fölött
    SetPixel(grafkez,xhely,yhely+1,RGB(255,255,0)); //Közepe alatt
    };
    };
    };
    int xhely,yhely,celx,cely;
    unsigned char fajta,szin;
    char xseb,yseb;
    bool tulcelxen=false,tulcelyon=false;
    };

    std::vector<Csillag> csillagok;

    Ez pedig a kirajzolásuk a WM_PAINT-ben:

    for (int cs=0; cs<csillagok.size(); cs++) {
    if (csillagok[cs].tulcelxen == false) {
    csillagok[cs].xhely += csillagok[cs].xseb;
    if ((csillagok[cs].xhely >= csillagok[cs].celx && csillagok[cs].xseb == 8) || (csillagok[cs].xhely <= csillagok[cs].celx && csillagok[cs].xseb == -8))
    csillagok[cs].tulcelxen = true;
    } else csillagok[cs].xhely += csillagok[cs].xseb;
    if (csillagok[cs].tulcelyon == false) {
    csillagok[cs].yhely += csillagok[cs].yseb;
    if ((csillagok[cs].yhely >= csillagok[cs].cely && csillagok[cs].yseb == 8) || (csillagok[cs].yhely <= csillagok[cs].cely && csillagok[cs].yseb == -8))
    csillagok[cs].tulcelyon = true;
    } else csillagok[cs].yhely += csillagok[cs].yseb;

    if (csillagok[cs].xhely<0 || csillagok[cs].xhely>ablakszel || csillagok[cs].yhely<0 || csillagok[cs].yhely>ablakmag) {
    csillagok[cs].xhely = ablakszel/2;
    csillagok[cs].yhely = ablakmag/2;
    do {
    csillagok[cs].celx = rand()%ablakszel;
    } while (csillagok[cs].celx == csillagok[cs].xhely);
    if (csillagok[cs].celx < csillagok[cs].xhely)
    csillagok[cs].xseb = -8;
    else csillagok[cs].xseb = 8;
    do {
    csillagok[cs].cely = rand()%ablakmag;
    } while (csillagok[cs].cely == csillagok[cs].yhely);
    if (csillagok[cs].cely < csillagok[cs].yhely)
    csillagok[cs].yseb = -8;
    else csillagok[cs].yseb = 8;
    csillagok[cs].tulcelxen = false;
    csillagok[cs].tulcelyon = false;
    };
    csillagok[cs].kirajzol(Memhdc);
    };

    Gyanítom, valami akkor nem lesz jó, mikor a képernyőn kívülre kerülve visszahelyezem őket a közepére, és új célxy koordinátát kapnak véletlenszerűen, de akárhogy nézem, nem látok benne semmi logikai hibát.

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