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

41

11.04.2009, 17:36

schonmal gedebuggt?

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

42

11.04.2009, 17:41

Da ich erst seit gestern mit VC++ arbeite kenn ich mich noch nicht so aus, weis nicht was du meinst?? hört sich jetzt sicher blöd an :?
Ist sonst noch wem was aufgefallen?? mfg

43

11.04.2009, 19:56

erstmal klickst du an den grauen rand rechts neben deinem quellcode, dann sollte da ein roter punkt auftauchen, das ist ein haltepunkt, bei dem der debugger die ausführung des programms automatisch anhält. so einen setzt du am besten an den anfang der hauptschleife, und wenn du dann das programm mit F5 debuggst, hält er da automatisch an, und ab da kannst du das programm dann über die knöpfe im menü debuggen bzw. in der zugehörigen symbolleiste (taucht erst beim debuggen auf, muss eventl. erst noch aktiviert werden) schrittweise ausführen und zwischendurch die werte der diversen variablen in den fenstern, die unten auftauchen, überprüfen. du solltest allerdings mit einzelschritten aufpassen, weil wenn du einen einzelschritt in ne funktion einer biliothek, die keine debuginformationen zur verfügung stellt (dazu zählt u.a. die WinAPI und eventl. die standardbiliothek) hineinspringst, landest du in der dissassembly, und ich bezweifle mal, das du die verstehst (ich btw. auch nicht).

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

44

11.04.2009, 20:24

Wie soll ich das mit dem haltepunkt jetzt effizient einsetzt?? Auf was muss ich achten? hier mal der aktuelle Code:

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
54
55
56
57
58
59
60
61
#include<stdlib.h>
#include<stdio.h>
#include<conio2.h>
#include<conio.h>
#include<iostream>
#include<windows.h>
#include<dos.h>
#include<time.h>
#include<list>

using namespace std;

void gotoxy(int x,int y){......} 

void clrscr(){.......}


class Geschoss{
        private:
          int m_x;
          int m_y;

        public:
          bool m_statusG;
          int Bewegung();
          Geschoss(int x,int y){
              m_x=x;
              m_y=y;
              }
          };
         
int Geschoss::Bewegung(){
       do{
         clrscr();
         gotoxy(m_x,m_y);
         cout<<"*";
         m_y--;
         clrscr();
         }while(m_y>=1);
       return 0;
       };

int main(){
    int x=20, y=22; 
    list<Geschoss> kugeln;
    list<Geschoss>::iterator iter;
    
    while(1){
      if(GetAsyncKeyState(0x57)){kugeln.push_back(Geschoss(x,y));}
      if(GetAsyncKeyState(0x1B)){exit(0);}
      if(GetAsyncKeyState(0x41)){x--;} 
      if(GetAsyncKeyState(0x44)){x++;} 
      for (iter = kugeln.begin(); iter != kugeln.end(); ++iter){ 
          iter->Bewegung();} 

      Sleep(50);

      }

    _getch();
}
Es funktioniert noch nicht so richtig. Wenn ich das mit dem Haltepunkt mache und bei while(1) bin schreibt er folgendes:
{m_x=??? m_y=??? m_statusG???}
CXX0030:Fehler:Ausdruck kann nicht ausgewertet werden.
weis nicht was das heißen soll. vl weis es wer von euch

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

45

12.04.2009, 17:04

Ok, das war eine harte Nuss aber habe den fehler doch noch finden können. Hab mich dafür bei list's voll reinlesn müssen.
Hier der neu Code:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<stdlib.h> 
#include<stdio.h> 
#include<conio2.h> 
#include<conio.h> 
#include<iostream> 
#include<windows.h> 
#include<dos.h> 
#include<time.h> 
#include<list> 

using namespace std; 

void gotoxy(int x,int y){...} 

void clrscr(){..}

class Geschoss 
{ 
private: 
    int m_x; 
    int m_y; 

public: 
    bool m_statusG; 
    bool Bewegung(); 
    Geschoss(int x,int y) 
    { 
        m_x=x; 
        m_y=y-1; 
    } 
}; 

bool Geschoss::Bewegung() 
{ 
    gotoxy(m_x,m_y); 
    cout<<"*"; 
    m_y--; 
    if(m_y>=0) 
        return true; 
    else 
        return false; 
}; 

int main() 
{ 
    int x=20, y=22; 
    list<Geschoss> kugeln1; 
    list<Geschoss> kugeln2; 
    list<Geschoss>::iterator iter; 

    for(;;) 
    { 
        if (GetAsyncKeyState(0x57)) 
        { 
            kugeln1.push_back(Geschoss(x,y)); 
        } 
        if (GetAsyncKeyState(0x1B)) 
        { 
            exit(0); 
        } 
        if (GetAsyncKeyState(0x41)) 
        { 
            x--; 
        } 
        if (GetAsyncKeyState(0x44)) 
        { 
            x++; 
        } 

        clrscr(); 
        gotoxy(x,y);
        cout<<"ö";
        for (iter = kugeln1.begin(); iter != kugeln1.end(); ++iter) 
        { 
            if(iter->Bewegung()) 
                kugeln2.push_back(*iter); 
        } 
        swap(kugeln2,kugeln1); 
        kugeln2.clear(); 

        Sleep(50); 

    } 

    _getch(); 
} 
Jetzt hab ich noch ne frage. Wie kann man zb. wenn mann die Schuss-Taste drückt, diese für einen kleinen Zeitraum "ausschaltet" und somit Dauerfeuer unterbindet? mfg

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

46

12.04.2009, 17:10

Sobald ein geschossen wurde, schaltest du einen Timer ein, der dann hochzählt (oder runterzählt) und sobald z.B 2 Sekunden vergangen sind lässt du es überhaupt wieder zu schiessen zu können.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
      if (GetAsyncKeyState(0x57))
        {
            if ( timer <= 0.0f )
            {
                kugeln1.push_back(Geschoss(x,y));
                timer = 2.0f;
            }
        } 


Und den timer lässt du dann irgendwo ständig mit der Zeit mitlaufen. (also runterzählen).

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

47

12.04.2009, 17:15

ok, danke, aber mit was soll ich timer initialisieren?
gruß

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

48

12.04.2009, 17:30

Nachdem was drakon gesagt hat bei 0.

Du instanzierst deine Timervar mit 0 d.h m_fTimer = 0;
Dann schießt du das Geschoss ab und um nun zu verhindern das man ganz schnell hintereinander schießen kann. Rechnest du dir immer wieder die aktuelle vergangene Zeit aus und wenn diese 2 sek überschreitet darfst du wieder schießen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool framefunc()
{
g_fCurrenTime = timeGetTime();

(...)
return false;
}

bool Renderfunc()
{
g_fElapsedTime = timeGetTime();

//Zeit Differenz ausrechnen!

g_fTime = static_cast<float>((g_fElapsedTime-g_fCurrenTime)/1000.0f);

(..) 
return true;
}

g_fTime ist also die Zeit die er von der Frame zur Renderfunc braucht, ich hab das jetzt einfach mal als Gameloop genommen. Wenn du die Zeiten addierst weißt du wann 2 sek um sind

Ich denke mal so ist es gemeint^^

€DIT: Winmm.lib , musst du Linken um die FUnktion TimeGetTime() zu benutzen!

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

49

12.04.2009, 18:01

Mhm, geht das auch mit time(0)? Habs mal probiert. So mein ich:

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
int main(){
   time_t timer;
   time_t timer2;
   timer=time(0);
   timer2=time(0);
    
         
    while(1){
    Sleep(70);
    if(GetAsyncKeyState(0x41)){x--;}
    if(GetAsyncKeyState(0x57)){
        if(timer2>=timer+2){ 
                kugeln1.push_back(Geschoss(x,y)); 
                timer = time(0); 
                timer2 = time(0);
                } 
        } 
.
.
.
.
.
.
.
 }das hier geht aber nicht :(  mfg

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

50

12.04.2009, 18:05

Habs schon!!!!! hab vergessen timer2 auch in der schleife immer auf time(0) zu setzten mfg

Werbeanzeige