Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.01.2009, 20:52

Schummeln-Funktion für Memory funzt nicht

Hi Leute,

hab da folgendes Problem: Ich programmiere derzeit ein Memoryspiel mithilfe von QT.........

Nun bin ich fast schon fertig, habe aber ein Prob mit dem eventTimer...

Mit der Schummelfunktion drehe ich alle noch nicht aufgedeckten karten für ca 2 sekunden um........solange kein kartenpaar aufgedeckt wurde, funzt das auch wunderbar.........der dreht alle karten für 2 sekunden um und danach verdeckt er sie wieder.........aber wenn bereits ein paar aufgedeckt wurde, dreht er die restlichen karten zwar um, aber nicht wieder zurück........ich habe absolut keinen plan, warum das so is.........

genug gequatscht, hier der quellcode (auzug):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void memoryspiel::Schummeln()
{
    // zähle gesamtes Spielfeld durch (42 Karten)

    for(int i = 0; i < 7; i++)
    {
        for(int j = 0; j < 6; j++)
        {
            // überprüfe, ob Karte "back.bmp"

            if(SpielFeld[i][j] == 22)
                SpielFeld[i][j] = InitFeld[i][j]; // drehe um

        }
    }
    NeuZeichnen();

    if(!derTimer)
        derTimer2 = startTimer(2000);
}

void memoryspiel::timerEvent(QTimerEvent  *e)
{
    QString s;

    if(e->timerId() == derTimer)
    {
        killTimer(derTimer);
        SchliesseKarten();

        s = s.number(Paare[0],10);
        punkteMensch = atoi(s);

        label3->setText(s);

        s = s.number(Paare[1],10);
        punkteComputer = atoi(s);

        label4->setText(s);

        NeuZeichnen();
    }
    else if(e->timerId() == derTimer2)
    {
        for(int i = 0; i < 7; i++)
        {
            for(int j = 0; j < 6; j++)
            {
                if(!(SpielFeld[i][j] == 21))
                    SpielFeld[i][j] = 22;
            }
        }
        NeuZeichnen();
        killTimer(derTimer2);
    }
}


InitFeld[7][6] beinhaltet hierbei die bildinizies (insgesamt 21)........da diese jeweils 2mal vorhanden sind, macht das 42.........hinzu kommt noch ein bild für den aufstand "aufgeckt" sowie für "umgedreht".....macht dann insgesamt 23 bilder......

SpielFeld[7][6] bekommt die Karten von InitFeld[7][6] zugewiesen.......

Wenn nochwas unklar sein sollte, könnt ihr gerne Fragen....Ich schick euch auch gern den kompletten Quelltext zu, aber ich denke, dass verkompliziert die sache nur noch mehr

Ich hoffe, Ihr könnt mir helfen mit meinem Problem......
...like a baby who's sweet and innocent :-)

Anonymous

unregistriert

2

20.01.2009, 21:14

Komisch, hab garkeine Frage gesehen...

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

3

20.01.2009, 21:32

Zitat


Ich hoffe, Ihr könnt mir helfen mit meinem Problem......

das sollte so ziemlich reichen ;)

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

4

20.01.2009, 21:34

Zitat von »"Coders-Square"«

Komisch, hab garkeine Frage gesehen...

dann lern lesen!

@spieleprogrammierer: seh ich dass richtig dass nach 2sek der timer "derTimer2" abgelaufen ist? und du danach alle felder durchgehst und das flag auf 22 setzt falls das flag nicht 21 ist?
hast du mal mit dem debugger geprüft ob das flag nicht doch überall 21 ist?

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

5

21.01.2009, 08:33

Ahoi,

Jopp, die Frage von DasBlub hat was.

Anzumerken:
Solch eine Verwendung von QTimer hab' ich aber noch nie gesehen...
Ansonsten wäre mehr Code nützlich.

PS:

C-/C++-Quelltext

1
2
s = s.number(Paare[0],10);
punkteMensch = atoi(s); 


Mach da lieber:

C-/C++-Quelltext

1
2
s = QString::number(Paare[0]);
punkteMensch = s.toInt();


Nicht wichtig, aber
--verwirrend;
++qt; :D (wah)

Werbeanzeige