BlackJack Vector out of range
-
Hallo!
Als Projekt für die Schule soll ich das Kartenspiel Black Jack programmieren.
Kurz vorm Ende bin ich auf ein Problem gestossen.
Hier ist erstmal der code (hoffe das reicht, will meinen ganzen code nicht public machen)//main.cpp #include <iostream> #include <conio.h> #include <time.h> #include <string> #include <windows.h> #include <vector> #include "class.h" using namespace std; void main(){ bool wahl_eingabe; Tisch Spieltisch; bjheader2(); //init_k_s(); while (Spieltisch.Spieler1.Guthaben>0){ int letzte_karte_sp1=0; int letzte_karte_bk=0; bjheader2(); Spieltisch.Bank.Handsumme=0; Spieltisch.Spieler1.Handsumme=0; Spieltisch.ers_misch(); Spieltisch.bieten(); Spieltisch.erster_zug(); bjheader2(); Spieltisch.ausg(); cout<<"Moechten Sie eine weitere Karte ziehen? Nein(0) Ja(1)"<<endl; cin>>wahl_eingabe; Spieltisch.wahl=wahl_eingabe; Spieltisch.zug=2; while(Spieltisch.wahl!=0){ Spieltisch.zug++; Spieltisch.sp1_karte(); Spieltisch.Spieler1.Handsumme=Spieltisch.Spieler1.Handsumme + Spieltisch.Spieler1.Stapel[Spieltisch.Spieler1.Stapel.size() -1].Wert; bjheader2(); Spieltisch.ausg_sp1(Spieltisch.zug); cout<<"Moechten Sie eine weitere Karte ziehen? (Ja/Nein)"<<endl; cin>>wahl_eingabe; Spieltisch.wahl=wahl_eingabe; } Spieltisch.Bank.Handsumme=Spieltisch.Bank.Handsumme + Spieltisch.Bank.Stapel[1].Wert; bjheader2(); Spieltisch.ausg_bk(Spieltisch.zug, Spieltisch.zug_bk); cout<<"Die Bank ist nun an der Reihe!Bitte Warten!(wenn Bank Handsumme groesser als 16 ist Return druecken)"<<endl; Sleep(2000); Spieltisch.zug_bk=2; while (Spieltisch.Bank.Handsumme<17){ Spieltisch.zug_bk++; Spieltisch.bk_karte(); Spieltisch.Bank.Handsumme=Spieltisch.Bank.Handsumme + Spieltisch.Bank.Stapel[Spieltisch.Bank.Stapel.size() -1].Wert; bjheader2(); Spieltisch.ausg_bk(Spieltisch.zug, Spieltisch.zug_bk); Sleep(1500); } _getch(); if (Spieltisch.Spieler1.Guthaben==0){ cout<<"Sie sind Pleite. Kommen Sie wieder wenn Sie mehr Geld haben."; break; } Spieltisch.loeschen(); bjheader2(); init_k(); } _getch(); }
//class.h enum Symbole {Herz, Kreuz, Pik, Karo}; enum BJ {Ja, Nein}; char intToChar(int integer){return (char)integer+48;}; struct K_Hilfe{ int Wert; char Zeichen; Symbole Symbol_h; }; class Karten{ public: int Wert; char Zeichen; Symbole Symbol; Karten(); Karten(int a, char b, Symbole c){ Wert = a; Zeichen = b; Symbol = c; } }; class Spieler{ public: string Name; vector<Karten>Stapel; int Guthaben,Handsumme; BJ BlackJack; Spieler(){}; }; class Tisch{ public: vector<Karten>Kartenstapel; Spieler Bank; Spieler Spieler1; bool wahl; char vg, ausg_symbol; //vorzeitiger gewinn (BJ, überkauft,...) int Gebot, zug, zug_bk; //zug = Anzahl der gezogenen Karten von Spieler1 (wichtig für Ausgabe) //zug_bk = Anzahl der gezogenen Karten von Bank (wichtig für Ausgabe) string spname; Tisch(){ bjheader1(); Bank.Name="Bank"; cout<<endl<<"Bitte geben Sie ihren Namen ein: "; cin>>spname; Spieler1.Name=spname; Spieler1.Guthaben=500; Bank.Guthaben=500; zug=2; zug_bk=2; } //karten erstellen + mischen void ers_misch(); //bieten void bieten(); //Spieler1 zieht eine Karte void sp1_karte(); //Bank zieht eine Karte void bk_karte(); //Bank zieht 2 Karten || Spieler1 zieht 2 Karten void erster_zug(); //Bank 1 Karte ausgabe || Spieler1 2 Karten ausgabe void ausg(); //2. Zug von Spieler1 void zweiter_zug_sp1(); //Ausgabe nur für Spieler1 void ausg_sp1(int l); //Ausgabe für Spieler1 komplett und Bank void ausg_bk (int m, int n); //alle Karten löschen void loeschen(); }; void Tisch::ausg_sp1(int l){ //Spieler1 cout<<Spieler1.Name<<":"<<endl; cout<<endl; cout<<endl<<"Handsumme: "<<Spieler1.Handsumme<<endl<<endl; for (int i=0; i<l; i++){ cout<<" ------ "; } cout<<endl; for (int i=0; i<l; i++){ cout<<"| "<<Spieler1.Stapel[i].Zeichen<<" "<<Spieler1.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<l; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<l; i++){ if(Spieler1.Stapel[i].Symbol==0){ausg_symbol=char(3);} else if(Spieler1.Stapel[i].Symbol==1){ausg_symbol=char(5);} else if(Spieler1.Stapel[i].Symbol==2){ausg_symbol=char(6);} else if(Spieler1.Stapel[i].Symbol==3){ausg_symbol=char(4);} cout<<"| "<<ausg_symbol<<" | "; } cout<<endl; for (int i=0; i<l; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<l; i++){ cout<<"| "<<Spieler1.Stapel[i].Zeichen<<" "<<Spieler1.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<l; i++){ cout<<" ------ "; } cout<<endl<<endl<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"; //Bank cout<<"Bank:"<<endl; cout<<endl; cout<<endl<<"Handsumme: "<<Bank.Handsumme<<endl<<endl; for (int i=0; i<1; i++){ cout<<" ------ -------"; } cout<<endl; for (int i=0; i<1; i++){ cout<<"|"<<Bank.Stapel[i].Zeichen<<" "<<Bank.Stapel[i].Zeichen<<"| |*******|"; } cout<<endl; for (int i=0; i<1; i++){ cout<<"| | |** B **|"; } cout<<endl; for (int i=0; i<1; i++){ if(Bank.Stapel[i].Symbol==0){ausg_symbol=char(3);} else if(Bank.Stapel[i].Symbol==1){ausg_symbol=char(5);} else if(Bank.Stapel[i].Symbol==2){ausg_symbol=char(6);} else if(Bank.Stapel[i].Symbol==3){ausg_symbol=char(4);} cout<<"| "<<ausg_symbol<<" | |*******|"; } cout<<endl; for (int i=0; i<1; i++){ cout<<"| | |** J **|"; } cout<<endl; for (int i=0; i<1; i++){ cout<<"|"<<Bank.Stapel[i].Zeichen<<" "<<Bank.Stapel[i].Zeichen<<"| |*******|"; } cout<<endl; for (int i=0; i<1; i++){ cout<<" ------ -------"; } cout<<endl; } /************************************************************************************************************* *************************************************************************************************************/ void Tisch::ausg_bk(int m, int n){ //Spieler1 cout<<Spieler1.Name<<":"<<endl; cout<<endl; cout<<endl<<"Handsumme: "<<Spieler1.Handsumme<<endl<<endl; for (int i=0; i<m; i++){ cout<<" ------ "; } cout<<endl; for (int i=0; i<m; i++){ cout<<"| "<<Spieler1.Stapel[i].Zeichen<<" "<<Spieler1.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<m; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<m; i++){ if(Spieler1.Stapel[i].Symbol==0){ausg_symbol=char(3);} else if(Spieler1.Stapel[i].Symbol==1){ausg_symbol=char(5);} else if(Spieler1.Stapel[i].Symbol==2){ausg_symbol=char(6);} else if(Spieler1.Stapel[i].Symbol==3){ausg_symbol=char(4);} cout<<"| "<<ausg_symbol<<" | "; } cout<<endl; for (int i=0; i<m; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<m; i++){ cout<<"| "<<Spieler1.Stapel[i].Zeichen<<" "<<Spieler1.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<m; i++){ cout<<" ------ "; } cout<<endl<<endl<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n"; //Bank cout<<"Bank:"<<endl; cout<<endl; cout<<endl<<"Handsumme: "<<Bank.Handsumme<<endl<<endl; for (int i=0; i<n; i++){ cout<<" ------ "; } cout<<endl; for (int i=0; i<n; i++){ cout<<"|"<<Bank.Stapel[i].Zeichen<<" "<<Bank.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<n; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<n; i++){ if(Bank.Stapel[i].Symbol==0){ausg_symbol=char(3);} else if(Bank.Stapel[i].Symbol==1){ausg_symbol=char(5);} else if(Bank.Stapel[i].Symbol==2){ausg_symbol=char(6);} else if(Bank.Stapel[i].Symbol==3){ausg_symbol=char(4);} cout<<"| "<<ausg_symbol<<" | "; } cout<<endl; for (int i=0; i<n; i++){ cout<<"| | "; } cout<<endl; for (int i=0; i<n; i++){ cout<<"|"<<Bank.Stapel[i].Zeichen<<" "<<Bank.Stapel[i].Zeichen<<"| "; } cout<<endl; for (int i=0; i<n; i++){ cout<<" ------ "; } cout<<endl; } void Tisch::loeschen(){ do{Bank.Stapel.pop_back();}while(Bank.Stapel.size()!=0); do{Spieler1.Stapel.pop_back();}while(Spieler1.Stapel.size()!=0); do{Kartenstapel.pop_back();}while(Kartenstapel.size()!=0); }
In der ersten Runde läuft alles wunderbar.
Und dann, in einer der folgenden Runden (wechselt immer oO) kommt die Meldung
vector substitiute out of range. Beim Debuggen hab ich festgestellt, das der Fehler in der class.h in Zeile 197 kommt.Schonmal Danke und sagt bescheid wenn ich noch mehr vom Quellcode braucht.
yedion
-
Edit: Falls es noch wichtig ist, ich benutze visual studio 2005 und habe windows vista.
-
falsche forum, zu viel code :p
-
oh 'tschuldigung