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

11

19.12.2008, 19:10

Ok, das heißt, bei der m_Update_Spieler1 - Funktion stimmt noch alles, aber bei m_zeichnen_M nichtmehr?

Dann sag mir mal, wo die Funktionen aufgerufen werden und wo hier

C-/C++-Quelltext

1
2
    //Position für neuen Stein Updaten 

    o.m_Update_Spieler1 (x,y); 

das o herkommt.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

12

19.12.2008, 19:14

Das o kommt von einer globalen Instanz der Klasse CFeld in der Player.cpp.
Da wo auch der Spielerzug ist.

Aufgerufen wird der ganze Ablauf in der main Klasse.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Cmain::m_Schleife_M ()
{

Field.m_loeschen ();
//Spielfeldanlegen 

Field.m_zeichnen_M (); 
//Spieler 1 ist am Zug 

Play.m_Spieler1_Zug (); 
//Feld erneut zeichnen 

Field.m_zeichnen_M (); 

system ("pause");

}

13

19.12.2008, 19:17

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
void CPlayer::m_Spieler1_Zug (CFeld* o)
{
    x=0; 
    y=0; 
    

    
    
    

    cout<<"Spieler 1 du bist nun am Zug"<<endl; 
    cout<<"In welche Reihe möchtest du setzen?"<<endl; 
    cout<<"Eingabe:"; 
    cin>>y; 
    cout<<"In welche Spalte  möchtets du setzen?"<<endl; 
    cout<<"Eingabe:"; 
    cin>>x; 

    //Werte ändern weil Array mit 0 beginnt 

    x=x-1; 
    y=y-1; 

    //Position für neuen Stein Updaten 

    o->m_Update_Spieler1 (x,y); 

}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Cmain::m_Schleife_M () 
{ 
CFeld* Field;
Field->m_loeschen (); 
//Spielfeldanlegen 

Field->m_zeichnen_M (); 
//Spieler 1 ist am Zug 

Play.m_Spieler1_Zug (Field); 
//Feld erneut zeichnen 

Field->m_zeichnen_M (); 

system ("pause"); 

}


So dürfte es ungefähr funktionieren. Die Funktionsdeklarationen müssen eben noch entsprechend angepasst werden.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

14

20.12.2008, 08:36

Das ist ja im Prenzip das was ich zuerst auch hatte wusste nur nicht was ich beim Aufrufen übergeben sollte :oops:

Nagut jetzt lässt es sich Komplemieren aber beim ausführen kommt dann ein Fehler das ....exe ein Fehler festgestellt hat.
Werd nacher nochmal den Code durchgehen vieleicht greif ich ja auf ein Arrayfeld zu was es nicht gibt. Werd mich auch mal mit dem Debugger anfreunden^^

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

15

20.12.2008, 16:00

Also ich hab mich mal mit dem Debugger angefreundet.
Ich konnte den Fehler auf eine Zeile eingrenzen.

Und zwar genau hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
void CFeld::m_Update_Spieler1 (int ypos,int xpos)
{


m_Spieler1Pos [ypos] [xpos]=true;

}


Da wo ich true zuweise. Da dachte ich mir es liegt an den Variabeln.
Also nochmal zwei Stück an der stelle erstellt und mal die Werte ypos und xpos denen zugewiesen und nochmal durch den Debugger gejagt. Dann sagt er mir dieses mal das x und y Ausdruck nicht verwendet werden kann (also die beiden neuen Varibeln.

Um ganz sicher zu gehen aber ich vor dem Aufruf der Update Funktion nochmal ein system("pause") gesetzt und so gehts ja auch bis dahin mach ich das system ("pause") weg ,gehts wieder nicht.


Woran kann das liegen?


edit: Ich hatte ja vorher in der Parameterliste von Spieler1_Zug ein CFeld *o stehen. Das hab ich weg gemacht und eine gloabele Instanz erzeugt mit dem Namen CFeld *o. Sollte ja so gehen. Ist ja egal ob ich das in der Parameterliste mache oder jetzt global in der Datei.
Wollt nur sagen falls das irgendwie wichtig ist.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

17

20.12.2008, 16:49

Ja ich Debuge die Debug Version.

18

20.12.2008, 16:49

Zitat

edit: Ich hatte ja vorher in der Parameterliste von Spieler1_Zug ein CFeld *o stehen. Das hab ich weg gemacht und eine gloabele Instanz erzeugt mit dem Namen CFeld *o. Sollte ja so gehen. Ist ja egal ob ich das in der Parameterliste mache oder jetzt global in der Datei.

Zeig mal her, wie du das meinst.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

19

20.12.2008, 18:41

Naja früher sah es so aus.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void CPlayer::m_Spieler1_Zug (CFeld *o)
{
    x=0;
    y=0;
    
    cout<<"Spieler 1 du bist nun am Zug"<<endl;
    cout<<"In welche Reihe möchtest du setzen?"<<endl;
    cout<<"Eingabe:";
    cin>>y;
    cout<<"In welche Spalte  möchtets du setzen?"<<endl;
    cout<<"Eingabe:";
    cin>>x;

    //Werte ändern weil Array mit 0 beginnt

    x=x-1;
    y=y-1;

    //Position für neuen Stein Updaten

    o->m_Update_Spieler1 (x,y);

}


Jetzt sieht das so aus.

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
CFeld* o;


void CPlayer::m_Spieler1_Zug ()
{
    x=0;
    y=0;
    
    cout<<"Spieler 1 du bist nun am Zug"<<endl;
    cout<<"In welche Reihe möchtest du setzen?"<<endl;
    cout<<"Eingabe:";
    cin>>y;
    cout<<"In welche Spalte  möchtets du setzen?"<<endl;
    cout<<"Eingabe:";
    cin>>x;

    //Werte ändern weil Array mit 0 beginnt

    x=x-1;
    y=y-1;

    //Position für neuen Stein Updaten

    o->m_Update_Spieler1 (x,y);

}


Aber es gab auch schon vorher Porbleme damit das, nach der Eingabe der Werte das Porgramm abgestützt ist.

20

20.12.2008, 18:49

Das o (egal ob global oder nicht) muss auf dein aktuelles Spielfeld zeigen! Deshalb würde ich die erste Variante nehmen und dein Feld übergeben.

Werbeanzeige