| Autor |
Nachricht |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
10:37:48 19.04.2012 Titel: |
C++ Einkaufsliste aber wie? |
Zitieren |
Hallo Liebe Programmier Geminde
Ich würde gerne in C++ eine Art Shop schreiben in dem man verschiedene Waffen hat welche, einen Preis haben und einen Schaden.
Wie kann ich dies machen?
Den Shop möchte ich als eine Funktion haben und es soll wenn eine auswahl getroffen worden ist, diese "Speichern"
Beispiel:
Herzlich willkommen im Shop was möchtest du kaufen?
1. Schwert (18 DMG, 200 Euro)
2. Dolch (10 DMG, 100 Euro)
3. Armbrust (14 DMG, 300 Euro)
Wenn ich jetzt 1 eingebe soll er mir auf einen String "Schwert" schreiben, mir auf einen Integer die DMG (18) schreiben und von meinem Geldbeutel(global oder lokale variable??) 200 abziehen.
Ich habe zwar eine Lösung gefunden, jedoch ist diese sehr, sehr ungeschickt und brauchtzu viel Platz (Sehr langer Code):
| Code: | 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 | #include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <csetjmp>
#include <stddef.h>
#include <iostream>
#include <conio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h>
using namespace std;
int a;
int c;
int geldbeutel;
int shop(int c)
{
cout<<"Bitte Waffe auswählen\n";
cin>>a;
switch(a)
{
case 1: c=1; break;
case 2 : c=2; break;
case 3 : c=3; break;
}
std::system("cls");
return(c);
break;
}
int _tmain(int argc, _TCHAR* argv[])
{
switch(shop(0))
{
case 1:
if(geldbeutel>=200)
{
waffe="Schwert";
schaden=18;
geldbeutel=geldbeutel-200;
break;
}
else
{
cout <<"zuweniggeld\n";
}
case 2:
if(geldbeutel>=100)
{
waffe="Dolch";
schaden=10;
geldbeutel=geldbeutel-100;
break;
}
else
{
cout <<"zuweniggeld\n";
}
case 3:
if(geldbeutel>=300)
{
waffe="Armbrust";
schaden=14;
geldbeutel=geldbeutel-300;
break;
}
else
{
cout <<"zuweniggeld\n";
} | |
Bei so wenigen Waffen währe diese Lösung für mich in ordungn nun habe ich jedoch 100+ Waffen -.-
Klassen habe ich mir auch angeschaut und die Variabeln auf KLassen zu schreiben wäre kein Problem jedoch habe ich immer das gleiche Problem:
Die Auswahl welche Waffe gekauft wurde.
Kann mir wer weiterhelfen?
Ich verwende den Microsoft Visual Studio 2008 Compailer.
Mit Freundlichen Grüssen
nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
11:00:15 19.04.2012 Titel: |
|
Zitieren |
Hallo, folgendes wäre z.B. denkbar:
Du schreibst in eine Textdatei alle Kombinationen von Waffe und Schaden und ähnlichen Informationen die du haben möchtest und trennst die Informationen mit irgendeinem Trennzeichen(etwa einem Leerzeichen oder einem Komma).
Dann liest du in deinem Programm die Datei aus und lädst die Informationen in eine Klasse, welche du dann ganz standardmäßig ausgeben kannst.
Also kleines Beispiel:
Textdatei:
Schwert 19 200
Armbrust 10 100
usw
Zuerst steht der Name dort, danach der Schaden und dann die Kosten.
Die Klassen die du dafür benötigst könnten z.B. so aussehen:
class Waffe
{
public:
Waffe(std::string C_name, int C_dmg,int C_kosten)
std::string name;
int dmg,kosten;
}
class Waffenangebot
{
public:
void getListe(void)
{
for(int i = 0; i < Waffenliste.size();i++)
{
std::cout << "Name: " << Waffenliste[i].name << "(Dmg " << Waffenliste[i].dmg << ", Kosten " << Waffenliste[i].kosten << std::endl");
}
void addWaffe(Waffe blabla);
privat:
std::vector<Waffe> Waffenliste;
}
Dann im Programm immer eine Zeile aus der Textdatei auslesen und in ein Objekt des Typs Waffe einspeichern und das in die Klasse Waffenangebot einfügen.
Fertig.
Schau dir dazu die Klasse ifstream an, sowie die Klasse vector. |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
11:01:26 19.04.2012 Titel: |
|
Zitieren |
Oder habe ich jetzt dein Problem missverstanden? Die Auswahl ist dann eigentlich kein Problem mehr, kannst bei der Ausgabe ja noch eine Nummer davorschreiben, so dass der Nutzer weiß welche Nummer welcher Waffen entspricht. |
|
|
|
 |
Syntax_error
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.03.2012
Beiträge: 153
|
Syntax_error Mitglied
11:11:14 19.04.2012 Titel: |
|
Zitieren |
Wenn ich deine Frage richtig verstanden habe, dann willst du über 100 Waffen, aber die Waffen nicht aufschreiben.
Das funktioniert so nicht.
Aber wie mein Vorposter schon schrieb könntest du die Waffenliste in eine Datei auslagern und sie über einen fstream aus dieser datei holen.
gruß
syntax |
_________________ Die Fehler bei anderen zu suchen ist leicht,
doch sich selbst zu hinterfragen,
gleicht einigen einer Prüfung.
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
11:25:46 19.04.2012 Titel: |
Auswahl |
Zitieren |
Zuerst mal Danke ich werde mir das alles heute und Morgen genau durch lesen und es ausprobieren
@Syntax_error
Doch die Waffen möchte ich aufschreiben, aber ich möchte nicht so viel Code haben, sprich irgend wo wird alles angezeigt und mit Switch die Auswahl getroffen, (das ist so gut jedoch..) dann habe ich ja einen Rückgabewert (int c)
welcher dann jede einzelne Waffe mit:
| Code: | IF(c=zahl der 1.waffe, zahl der 2.waffe..., zahl der 100.waffe)
{
waffen werte auf variabeln schreiben;
} | |
überprüft. Dieser Code der praktisch nur aus IF besteht möchte ich irgendwie kleiner machen ist dies überhaupt möglich?
@Namenloser324
Wenn ich deine Variante nehme habe ich ja dann nur den Code der Waffen aus dem Programm rausgenommen und in einem Textfile jedoch muss dann dies auswahl wieder (nach meiner bis jetzt verwendeten Variante) mit IF erfolgen.
Sehe ich das so richtig?
Gruss
nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
11:31:37 19.04.2012 Titel: |
|
Zitieren |
Nee, das geht mit ein paar Zeilen und deckt alle Fälle ab.
Klasse entsprechend anpassen:
if(Waffenliste.Waffen[EINGABE].kosten <= Geld)
{
Geld = Geld-[...].kosten;
cout << "Waffe " << "Waffenliste.Waffen[EINGABE].name << " gekauft" << endl;
}
else
cout << "Zu wenig Geld" << endl; |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
12:49:53 19.04.2012 Titel: |
Frage^^ |
Zitieren |
Danke Namenloser324
Jetzt habe ich nru das Problem das mich das ganze ziemlich verwirrt ^^-.-
Was eine Klasse ist udn ein Objekt und wie ich sie erstelle weiss ich, jedoch verstehe ich das mit der Liste und dem einlesen nicht so ganz.
Ich habe jetzt eine Liste(waffenliste.txt) die wie du gesagt ahst wie folgt aus sieht:
Schwert 19 200
Armbrust 10 100
Dolch 14 150
Ich werde mir jetzt ifstream, vector und fstream ansehen und mich noch mal melden sollte das Problem immer noch bestehen.
Vielen Dank für eure Hilfe, Ihr habt mir schon so gut geholfen in nur so kurzer Zeit
Gruss & Merci
nimda4 |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
13:17:42 19.04.2012 Titel: |
fstream |
Zitieren |
So gerade eben habe ich mri fstream angeschaut und weiss nun wie ich ein text file einlesen kann, jedoch wie kann ich die Texte beim Lerzeichen trennen udn eineln auf die Klasse speichern :O?
Hab leider nix gescheites mit der sufu gefunden (villeicht bin ich einfach zu blöd -.-)
Hab erst gerade mit dem Programmieren angefangen und verzweifle langsamm^^
Gruss
nimda4 |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
13:23:00 19.04.2012 Titel: |
fstream |
Zitieren |
Okei hab jetzt gefunden wie ich es trennen kann
getline(myfile,line,' ');
doch wie kann ich die einzelnen einträge nun speichern? |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
14:22:51 19.04.2012 Titel: |
|
Zitieren |
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
14:24:22 19.04.2012 Titel: |
|
Zitieren |
Achso, am besten du liest eine ganze Zeile ein und weist getline an bitte bis zum Zeichen "\n" einzulesen(das zeichen wird immer dann generiert wenn man enter drückt in einer Textdatei, ist sinngemäß identisch mit std::endl). |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
14:44:29 19.04.2012 Titel: |
|
Zitieren |
Eine Sache habe ich noch vergessen:
Wenn du mit den Zahlen(Schaden, Dmg) weiterrechnen möchtest musst du die strings erstmal in Zahlen umwandeln, das geht am leichtesten mit string streams, schau einfach bei google mal nach, ist aber ganz einfach, siehe z.B. hier
http://www.velocityreview ....... 55-string-to-integer.html |
|
|
|
 |
arghonaut
Unregistrierter
|
arghonaut Unregistrierter
14:50:14 19.04.2012 Titel: |
|
Zitieren |
Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte? |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
14:50:49 19.04.2012 Titel: |
string |
Zitieren |
@Namenloser324
Zuerst mal Danke für die Info, aber hab ich bereits gemacht
2. Ich finde gut das du mir nicht gleich die Lösung sagst, sonst würde ich erlich gesagt das ganze gar nicht merh anschauen ^^
Hab mir jetzt vector, fstream/ifstream angesehen jedoch komme ich nicht ganz weiter.
Ich hab jetzt einen string eingelesen aus der Textdatei und der sieht ja dann ungefähr so aus:
| Code: | schwert
18
300
dolch
14
200 | |
Jetzt muss ich die Daten doch (so wie ich das verstanden habe) zu einem Objekt der Klasse "Waffe" hinzufügen.
Normalerweise mache ich das ja mit z.b:
| Code: | waffe schwert;
schwert.dmg=18;
schwert.name="Schwert";
schwert.Preis=300; | |
Wenn das soweit richtig ist(ist es das?^^), wie kann ich dann machen das mir diese Werte automatisch rein geschrieben werden?
Wenn du nicht gleich die Lösung geben willst dann bitte wenigstens einen Tipp, bin einwenig am verzweifeln ^^ |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
14:55:48 19.04.2012 Titel: |
waffenliste? |
Zitieren |
Und was ist eigentlich die Waffenliste (die klasse) genau?
Also was für Objekte gehören da rein?
Oder brauche ich die MEthoden für die Objekte der Klasse Waffe?
Das verwirrt mich ein wenig.
Gruss
nimda4 |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
14:58:15 19.04.2012 Titel: |
warum nicht cin? |
Zitieren |
| arghonaut schrieb: | | Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte? |
bei cin musst du ja selbst die Enter tase besätigen (so weit mir bekannt)
aber ich lese die Werte ja aus einer liste ein, geht das etwa auch mit cin aus eienr Liste?
Gruss Nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
15:05:38 19.04.2012 Titel: |
|
Zitieren |
| arghonaut schrieb: | | Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte? |
Keine Ahnung, benutze ich nie. Dann halt damit, mir egal. Soll er halt rumprobieren. |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
15:13:10 19.04.2012 Titel: |
Re: string |
Zitieren |
| nimda4 schrieb: |
Jetzt muss ich die Daten doch (so wie ich das verstanden habe) zu einem Objekt der Klasse "Waffe" hinzufügen.
Normalerweise mache ich das ja mit z.b:
| Code: | waffe schwert;
schwert.dmg=18;
schwert.name="Schwert";
schwert.Preis=300; | |
Wenn das soweit richtig ist(ist es das?^^), wie kann ich dann machen das mir diese Werte automatisch rein geschrieben werden?
Wenn du nicht gleich die Lösung geben willst dann bitte wenigstens einen Tipp, bin einwenig am verzweifeln ^^ |
Das ist zwar richtig, aber umständlich.
Du schreibst dir z.B. einen Konstruktor in welchem du die strings bzw. die Werte als Parameter übergibst und der Konstruktor bastelt dir daraus automatisch das entsprechende Objekt bzw. lädt das Objekt mit den Daten.
Hab das ganze bereits programmiert, ist zwar hässlich da keine Lust groß nachzudenken, aber funktioniert.
WARNUNG: nicht als beispiel für ordentliches programmieren nehmen, ist sehr geschludert und unschön programmiert. Habe z.B. praktisch keine Kontrollen die den Input auf Fehler prüfen oder ähnliches.
| C++: | 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 | #include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
class Waffe
{
public:
Waffe(string CName,string CDmg,string CKosten){Name = CName;Dmg = CDmg;Kosten=CKosten;}
string Name,Dmg,Kosten;
};
class Waffenliste
{
public:
void add(Waffe item)
{
Liste.push_back(item);
}
vector<Waffe> Liste;
};
int main()
{
Waffenliste liste;
ifstream file("waffen.txt");
if(file.good())
{
while(!file.eof())
{
vector<string> zeile;
string line;
getline(file,line);
do
{
//generiert Substring und fügt den gleich dem vektor hinzu
zeile.push_back(line.substr(0,line.find(" ")));
//wenn danach noch ein leerzeichen kommt löscht er bis zu diesem sonst alles
if(line.find(" ")!= string::npos)
line.erase(0,line.find(" ")+1);
else
line.erase();
}
while(!line.empty());
liste.add(Waffe(zeile[0],zeile[1],zeile[2]));
}
}
file.close();
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << "Name: " << liste.Liste[i].Name << "(Dmg " << liste.Liste[i].Dmg << ",Kosten " << liste.Liste[i].Kosten << ")" << endl;
return 0;
} | |
Mit der cin variante die vorgeschlagen worden ist geht das aber schöner, aber ich mag cin nicht, kA wieso. |
|
|
|
 |
arghonaut
Unregistrierter
|
arghonaut Unregistrierter
15:33:43 19.04.2012 Titel: |
Re: warum nicht cin? |
Zitieren |
| nimda4 schrieb: | | arghonaut schrieb: | | Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte? |
bei cin musst du ja selbst die Enter tase besätigen (so weit mir bekannt)
aber ich lese die Werte ja aus einer liste ein, geht das etwa auch mit cin aus eienr Liste? |
Sorry, klar, war zu schnell abgeschickt. Die Intention sollte aber klar sein, denn den operator>> gibt es für alle streams, somit auch für den ifstream.
Grob skizziert:
| C++: | ifstream waffen_file("blubb.txt");
while(Zeilen vorhanden) {
int schaden, preis;
string name;
waffen_file >> name >> schaden >> preis;
} | | |
|
|
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
15:35:37 19.04.2012 Titel: |
|
Zitieren |
Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <csetjmp>
#include <stddef.h>
#include <iostream>
#include <conio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h> | | |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
15:40:53 19.04.2012 Titel: |
Re: string |
Zitieren |
| Namenloser324 schrieb: | | nimda4 schrieb: |
Jetzt muss ich die Daten doch (so wie ich das verstanden habe) zu einem Objekt der Klasse "Waffe" hinzufügen.
Normalerweise mache ich das ja mit z.b:
| Code: | waffe schwert;
schwert.dmg=18;
schwert.name="Schwert";
schwert.Preis=300; | |
Wenn das soweit richtig ist(ist es das?^^), wie kann ich dann machen das mir diese Werte automatisch rein geschrieben werden?
Wenn du nicht gleich die Lösung geben willst dann bitte wenigstens einen Tipp, bin einwenig am verzweifeln ^^ |
Das ist zwar richtig, aber umständlich.
Du schreibst dir z.B. einen Konstruktor in welchem du die strings bzw. die Werte als Parameter übergibst und der Konstruktor bastelt dir daraus automatisch das entsprechende Objekt bzw. lädt das Objekt mit den Daten.
Hab das ganze bereits programmiert, ist zwar hässlich da keine Lust groß nachzudenken, aber funktioniert.
WARNUNG: nicht als beispiel für ordentliches programmieren nehmen, ist sehr geschludert und unschön programmiert. Habe z.B. praktisch keine Kontrollen die den Input auf Fehler prüfen oder ähnliches.
| C++: | 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 | #include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
class Waffe
{
public:
Waffe(string CName,string CDmg,string CKosten){Name = CName;Dmg = CDmg;Kosten=CKosten;}
string Name,Dmg,Kosten;
};
class Waffenliste
{
public:
void add(Waffe item)
{
Liste.push_back(item);
}
vector<Waffe> Liste;
};
int main()
{
Waffenliste liste;
ifstream file("waffen.txt");
if(file.good())
{
while(!file.eof())
{
vector<string> zeile;
string line;
getline(file,line);
do
{
//generiert Substring und fügt den gleich dem vektor hinzu
zeile.push_back(line.substr(0,line.find(" ")));
//wenn danach noch ein leerzeichen kommt löscht er bis zu diesem sonst alles
if(line.find(" ")!= string::npos)
line.erase(0,line.find(" ")+1);
else
line.erase();
}
while(!line.empty());
liste.add(Waffe(zeile[0],zeile[1],zeile[2]));
}
}
file.close();
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << "Name: " << liste.Liste[i].Name << "(Dmg " << liste.Liste[i].Dmg << ",Kosten " << liste.Liste[i].Kosten << ")" << endl;
return 0;
} | |
Mit der cin variante die vorgeschlagen worden ist geht das aber schöner, aber ich mag cin nicht, kA wieso. |
o.O schludrig? sowas nennst du schludrig?
OMG jetzt fühl ich mich dumm -.-^^
Das ist hamemr von dir ich hab mir jetzt das ganze angesehen und versucht nach zuvollziehen und habe daher noch ein paar kleine Fragen:
1. vector<waffe> Liste; und vector<string> zeile; was machen die genau?
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause") und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!
Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932
Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
15:41:39 19.04.2012 Titel: |
|
Zitieren |
| cvcv schrieb: | Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <csetjmp>
#include <stddef.h>
#include <iostream>
#include <conio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h> | |
|
Da hast du sicherlich recht. |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
15:42:45 19.04.2012 Titel: |
C++ lernen |
Zitieren |
| cvcv schrieb: | Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <csetjmp>
#include <stddef.h>
#include <iostream>
#include <conio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h> | |
|
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holen
Gruss
nimda4 |
|
|
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
15:45:46 19.04.2012 Titel: |
Re: C++ lernen |
Zitieren |
[quote="nimda4]
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holen
Gruss
nimda4[/quote]
Den Code will ich sehen ....
Wie heißt denn Dein Buch? (Aus Interesse) |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
15:46:03 19.04.2012 Titel: |
|
Zitieren |
wie heißt denn dein buch? Und das du die header alle benötigst für den restlichen code ist zu bezweifeln |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
16:00:28 19.04.2012 Titel: |
Re: C++ lernen |
Zitieren |
| cvcv schrieb: | [quote="nimda4]
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holen
Gruss
nimda4 |
Den Code will ich sehen ....
Wie heißt denn Dein Buch? (Aus Interesse)[/quote]
Ich habe das: http://www.amazon.de/von- ....... qid=1334843823&sr=1-4
kann ich dir den Code per PN oder so was schicken?
es ist ein bisschien viel und sehr amateur haft geschrieben *schäm*
(hab alles selbst geschrieben)
Gruss
nimda4 |
|
|
|
 |
kingcools
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.03.2008
Beiträge: 89
|
kingcools Mitglied
16:03:37 19.04.2012 Titel: |
|
Zitieren |
Hi, ich bin Namenloser.
Jürgen Wolf ist in diesem Forum verschriehen, daher er wohl sehr schlechte Bücher herausbringt.
Kannst du mir deinen Code auch per PN schicken? |
|
|
|
 |
nimda4
Unregistrierter
|
nimda4 Unregistrierter
16:05:09 19.04.2012 Titel: |
huch? |
Zitieren |
| kingcools schrieb: | Hi, ich bin Namenloser.
Jürgen Wolf ist in diesem Forum verschriehen, daher er wohl sehr schlechte Bücher herausbringt.
Kannst du mir deinen Code auch per PN schicken? |
Huch das wusste ich ncith :S
Ich melde mich schnell mit einem account an. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:10:22 19.04.2012 Titel: |
Account |
Zitieren |
So ich hab jetzt einen Account sende dir gleich den Code.
Gruss
nimda4
edit du hast eien Email von mir |
Zuletzt bearbeitet von nimda4 am 16:13:00 19.04.2012, insgesamt 1-mal bearbeitet |
|
 |
DocShoe
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 1814
|
DocShoe Mitglied
16:16:13 19.04.2012 Titel: |
|
Zitieren |
Viel Schlimmer hätte es nicht kommen können... der Autor ist berüchtigt für seine Inkompetenz, was C++ angeht. Du solltest das Buch bei deiner Freundin lassen, vielleicht findet sie noch eine sinnvolle Verwendung dafür. Lernen solltest du daraus besser nicht. Kannst ja spaßeshalber mal hier im Forum suchen, es gibt immer mal wieder Leute, die aus diesem Buch "gelernt" haben und katastrophalen Code präsentieren, der nur vor Fehlern strotzt.
Wenn du wirklich C++ lernen willst solltest du dir ein gutes C++ Buch zulegen, hier im Forum sind einige gelistet. |
_________________ Die fünf häufigsten Anzeichen für Faulheit:
1.
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:21:31 19.04.2012 Titel: |
|
Zitieren |
| DocShoe schrieb: | Viel Schlimmer hätte es nicht kommen können... der Autor ist berüchtigt für seine Inkompetenz, was C++ angeht. Du solltest das Buch bei deiner Freundin lassen, vielleicht findet sie noch eine sinnvolle Verwendung dafür. Lernen solltest du daraus besser nicht. Kannst ja spaßeshalber mal hier im Forum suchen, es gibt immer mal wieder Leute, die aus diesem Buch "gelernt" haben und katastrophalen Code präsentieren, der nur vor Fehlern strotzt.
Wenn du wirklich C++ lernen willst solltest du dir ein gutes C++ Buch zulegen, hier im Forum sind einige gelistet. |
Wow das ist ja brutal wie hier alle sagen das der so schlecht ist :S
Da kauf ich mir mal ein sinnvolles Buch und es ist nru Schrott -.-
Hab es mir gerade erst am Montag gekauft und jetzt darf ich es schon weg werfen ^^
Ich werde mir nun ein neues Bestelle wie wäre es mit:
"Visual C++ 2010 Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how"?
Gruss und Danke für die Information xD
nimda4 |
|
|
|
 |
kingcools
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.03.2008
Beiträge: 89
|
kingcools Mitglied
16:25:17 19.04.2012 Titel: |
Re: string |
Zitieren |
[quote="nimda4"][quote="Namenloser324"]| nimda4 schrieb: |
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause") und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!
Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932
Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4 |
1) Also erstmal: lass dich nicht von meiner Namensgebung irritieren, bin sehr schlecht im Finden von passenden Namen für Variablen.
Was die machen steht eigentlich direkt dabei:
Liste ist eine Instanz bzw. ein Objekt vom Typ vector<Waffe>, also im Endeffekt nichts weiter als ein Speicher für Objekte des Typs Waffe.
Speichert also quasi "Waffen"
In vector<string> Zeile hab ich einfach die einzelnen Teile einer Zeile aus der Textdatei gespeichert, also wenn da steht schwert 10 300, dann ist Zeile[0] == "schwert", Zeile[1] == "10"....
2) japp, ruft den Konstruktor von Waffe auf.
3) Nee, das gibt sie in der Konsol aus
hast du denn eine Textdatei am richtigen ort mit dem Namen? Irgendwas scheint da zu groß zu werden bei dir |
|
|
|
 |
asc
Mitglied
Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5713
|
asc Mitglied
16:28:39 19.04.2012 Titel: |
|
Zitieren |
| nimda4 schrieb: | Ich werde mir nun ein neues Bestelle wie wäre es mit:
"Visual C++ 2010 Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how"? |
Lass die Finger davon und schau in die FAQ. Obiges Buch lehrt nicht C++ sondern C++/CLI was wiederum eine eigenständige Sprache ist, deren Bedeutung eher gering ist.
Ich habe noch neue Bücher bei mir rumfliegen, nur habe ich diese schon einem anderen angeboten dem ich zumindest bis zum Wochenende Zeit lassen will. Ggf. kannst du mich ja mal kontaktieren. |
_________________ in theory there's no difference between theory and practice. in practice there is. (yogi berra)
In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:30:53 19.04.2012 Titel: |
Re: string |
Zitieren |
[quote="kingcools"][quote="nimda4"]| Namenloser324 schrieb: | | nimda4 schrieb: |
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause") und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!
Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932
Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4 |
1) Also erstmal: lass dich nicht von meiner Namensgebung irritieren, bin sehr schlecht im Finden von passenden Namen für Variablen.
Was die machen steht eigentlich direkt dabei:
Liste ist eine Instanz bzw. ein Objekt vom Typ vector<Waffe>, also im Endeffekt nichts weiter als ein Speicher für Objekte des Typs Waffe.
Speichert also quasi "Waffen"
In vector<string> Zeile hab ich einfach die einzelnen Teile einer Zeile aus der Textdatei gespeichert, also wenn da steht schwert 10 300, dann ist Zeile[0] == "schwert", Zeile[1] == "10"....
2) japp, ruft den Konstruktor von Waffe auf.
3) Nee, das gibt sie in der Konsol aus
hast du denn eine Textdatei am richtigen ort mit dem Namen? Irgendwas scheint da zu groß zu werden bei dir |
Danke für die Antowrten das ist ja hammer
Ja das file ist am richtigen Ort im Debuger zeigt es mir an das es die Datei eingelesen hat und ich sehe auch Schwert 18 300 und dann macht es den durch udn geht zum nexten.
Geht das Programm so bei dir und welchen Compailer verwendest du?
Gruss
nimda4 |
|
|
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
16:31:41 19.04.2012 Titel: |
|
Zitieren |
Google bitte nach Bücherempfehlungen, hier gabs im Forum schon einige Threads über das Thema ( google es trotzdem, die Forensuche ... naja sagen wir mal google kanns besser ).
Mit dem Buch von J.W hast du halt ein ungünstiges erwischt, allerdings ist das auch den Rezensionen zu entehmen. Es gibt viele 5-Sterne, aber einige 1-Sterne deren Kritik sich alle auf fachliches Wissen stützen, ganz im Gegensatz zu den 5-Sterne Kommentatoren, die sich von flüßiger Sprache beeinflussen liesen. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:31:51 19.04.2012 Titel: |
|
Zitieren |
| asc schrieb: | | nimda4 schrieb: | Ich werde mir nun ein neues Bestelle wie wäre es mit:
"Visual C++ 2010 Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how"? |
Lass die Finger davon und schau in die FAQ. Obiges Buch lehrt nicht C++ sondern C++/CLI was wiederum eine eigenständige Sprache ist, deren Bedeutung eher gering ist.
Ich habe noch neue Bücher bei mir rumfliegen, nur habe ich diese schon einem anderen angeboten dem ich zumindest bis zum Wochenende Zeit lassen will. Ggf. kannst du mich ja mal kontaktieren. |
Danke für das Angebot schaue mich mal um und komme dann auf dich zurück.
Gruss
nimda4 |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:33:15 19.04.2012 Titel: |
|
Zitieren |
| cvcv schrieb: | Google bitte nach Bücherempfehlungen, hier gabs im Forum schon einige Threads über das Thema ( google es trotzdem, die Forensuche ... naja sagen wir mal google kanns besser ).
Mit dem Buch von J.W hast du halt ein ungünstiges erwischt, allerdings ist das auch den Rezensionen zu entehmen. Es gibt viele 5-Sterne, aber einige 1-Sterne deren Kritik sich alle auf fachliches Wissen stützen, ganz im Gegensatz zu den 5-Sterne Kommentatoren, die sich von flüßiger Sprache beeinflussen liesen. |
Sah das buch eben direkt im Laden und der Verkäufer meinte es sei sehr gut (dem sag ich meine Meinung xD) daher habe ich im Internet natürlich nicht nachgelesen (grosser Fehler wie es jetzt scheint ^^).
Danke und Gruss
nimda4 |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
16:35:57 19.04.2012 Titel: |
|
Zitieren |
| kingcools schrieb: | Hi, ich bin Namenloser.
Jürgen Wolf ist in diesem Forum verschriehen, daher er wohl sehr schlechte Bücher herausbringt.
Kannst du mir deinen Code auch per PN schicken? |
Wenn du irgendwas zu meinem Code hast den ich dir per Email geschickt habe, kannst du es entweder hier tun oder auch per Email.
Wenn du es per Email machst könntest du mir dann hier im Forum in diesem Topic schnell Bescheid geben, (Meien Email erhält seit einigen Tag sehr viel Spam muss mal nachschauen wiso -.-) damit ich sie suchen kann?
Gruss und nochmals Danke
nimda4 |
|
|
|
 |
kingcools
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.03.2008
Beiträge: 89
|
kingcools Mitglied
16:39:03 19.04.2012 Titel: |
|
Zitieren |
Ich benutze code blocks da funktioniert es ohne probleme. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
11:32:16 23.04.2012 Titel: |
Jetziger Stand: |
Zitieren |
So nach dem ich mich nun mit kingcools unterhalten habe, habe ich nun neu angefangen.
kingcools hat mir einige wichtige Verbesserungen vorgeschlagen welche ich nun am umsetzen bin.
Ich habe bis jetzt 2 Klassen erstell und so sieht das aus:
classes.h
| Code: | 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 | #pragma once
#include "stdafx.h"
using namespace std;
class Monster
{
private:
std::string name;
int leben;
int Angriff;
int Vert;
int Schaden;
public:
Monster() // Standardkonstruktor
: name(""), // Initialiserungsliste
leben(0),
Angriff(0),
Vert(0),
Schaden(0)
{
//Konstruktorrumpf
}
Monster( // Konstruktor mit Parametern
std::string const & name,
int leben,
int Angriff,
int Vert,
int Schaden)
: name(name), // Zuweisung Parameter zur Membervariablen
leben(leben),
Angriff(Angriff),
Vert(Vert),
Schaden(Schaden)
{
}
void test() //Testfunktion
{
std::cout <<name <<"\n" <<leben <<"\n" <<Angriff <<"\n" <<Vert <<"\n" <<Schaden <<"\n";
}
~Monster() // Destruktor
{
}
};
class dice
{
private:
int zahl;
int Ergebniss;
public:
dice()
:
zahl(0)
{
}
dice(
int zahl)
:zahl(zahl)
{
}
void roll()
{
int zahln=zahl-1;
Sleep(730); //Sleep für Verzögerung
srand((unsigned)time(NULL)); //Zufallsfunktion anhand aktueler Zeit
Ergebniss=(rand()%zahln)+1; //Zufallsfunktion Einschränkung auf 1-20
cout <<"\nSie haben " <<Ergebniss <<" gewuerfelt\n"; //Ausgabe Zufalszahl
Sleep(100); //Sleep für Verzögerung
}
}; | |
g.cpp
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // objektorientiertes_rpg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
#include <iostream>
#include "classes.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Monster Oger("Oger", 100,10,12,30); //Leben, Angriff, Vert, Schaden
Monster Pferd("Pferd", 200,20,22,20);
Oger.test(); //Testfunktion
Pferd.test();//Testfunktion
dice W20(20);//Testfunktion
W20.roll();//Testfunktion
system("pause");
} | |
Ist das bis jetzt richtig?
Ich möchte nun eine Kampf-funktion schreiben, muss ich dafür eine neue Klasse machen oder eine Methode der Klasse Monster hinzufügen?
Und wie kann ich dann z.b den Würfel bzw eine Objekt der Klasse Monster und ein Objekt der Klasse dice verwenden.
sprich.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 | [b]Oger[/b](obj der kalsse monster) [i]würfelt W20[/i](obj der Klasse dice);
if([i]würfel W20[/i]<=Anriff [b]Oger[/b])
{
[b]Mensch[/b](2tes Obj der klasse Monster) [i]würfelt W20[/i];
if([i]würfel W20[/i]>=[b]Verteidigung [/b]des obj Mensch)
{
[b]leben Mensch [/b]- [b]schaden Oger[/b]
}
}
.
.
. | |
Ist das irgendwie überhaupt möglich?
Hab schon gestern den ganzen Tag herum getestet.
Gruss&Danke
Nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
11:50:57 23.04.2012 Titel: |
|
Zitieren |
Hi, also ich glaube die Diceklasse kannst du auch einfach als Memberfunktion implementieren, vielleicht auch als static member funktion, dann kannst du sie auch unabhängig von einem Objekt benutzen.
Ist ne Designfrage ob du jetzt unbedingt in einer Monsterklasse eine Dicefunktion brauchst/haben möchtest, aber irgendwie empfinde ich es als Overkill für ein einfaches Würfeln eine Klasse zu erstellen.
Nimm vielleicht sowas:
class Monster
{
[...]
static int roll(int WuerfelAugen = 20)
{
blablabla
}
};
Ok, eigentlich unsinnig, daher besser:
Erstell ne Klasse Spiel oder ähnliches die eben diese rollmethode dann besitzt.
Bei deiner Kampffrage bin ich mir unsicher wie du das meinst:
Könntest z.B. eine Kampfmethode erstellen in der Klasse Monster:
class Monster
{
[..]
bool Kampf(Monster Gegner)
{
Dice W20(20);
while(min(this->Leben,Gegner.Leben)>0)
{
[...]//dein Kampfskript
}
}
} |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
12:23:58 23.04.2012 Titel: |
Antwort |
Zitieren |
So nun meine Antwort auf beide Themen:
Ich werde die Kampffunktion in der Klasse Monster machen.
Die funktioniert ja (wie du auch im Code den ich dir per Mail gegeben habe) folgender massen:
kampfmethode.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Objekt Oger Klasse Monster.
Objekt Mensch Klasse Monster.
Objekt W20 Klasse dices.
Oger wirft W20
if(W20 <=Angriff Oger)
{
Mensch muss sich verteidigen, wirft W20;
if(W20>=Verteidigung Mensch) //kann schalg nicht parieren
{
der schlag trifft den menschen, Leben Mensch - Schaden Oger;
}
pariert schlag des ogers;
Mensch greifft an , W20;
if(W20<=Angriff Mensch)
{
Oger muss sich verteidigen, wirft W20;
if(W20>=Verteidigung Oger) //kann schalg nicht parieren
{
der schlag trifft den Oger, Leben Oger - Schaden Mensch;
}
pariert schlag des Menschen;
} | |
Im Main möchte ich wenn eien Kampf stat findet das so machen:
Ich (Mensch muss kämpfen) mein gegner ist X (Oger,troll oder was auch immer, wird mit Monster X; erstellt)
Es soll nun die Methode Kampf ausführen und automatisch die Werte des vorher erstellten Gegners übernehmen.
Ich weiss wie ich den Kampf machen will jedoch weiss ich nciht wie es dei Werte übernehmen kann :S
Ich hoffe man versteht was ich meine?
Oder rede ich nach zu vielem Herumprobieren nur noch wirres Zeug? xD
Gruss und Danke an alle
Nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
12:27:29 23.04.2012 Titel: |
|
Zitieren |
Die Werte werden doch automatisch kopiert, wenn du den Gegner via call by value an die Kampfmethode übergibst. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
13:04:04 23.04.2012 Titel: |
|
Zitieren |
| Namenloser324 schrieb: | | Die Werte werden doch automatisch kopiert, wenn du den Gegner via call by value an die Kampfmethode übergibst. |
Hmmm ich verstehe nicht wie genau das gehen soll :S
Ist das so gemeint?:
| Code: | | void kampffunktion(Mensch,Monster1) | | |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
14:49:16 23.04.2012 Titel: |
|
Zitieren |
Äh, jetzt vermischt du aufruf und definition der Funktion.
Also:
Wenn du deine Funktion wie folgt definierst:
| C++: | | void kampf(Mensch Spieler,Monster Gegner) | |
Dann sagst du damit dem Compiler das beim Aufruf der Funktion die Parameter als Kopie übergeben werden,d.h. es werden in der Funktion nur Kopien mit exakt dem gleichen Inhalt verwendet(streng genommen heißt das, dass der Kopierkonstruktor der Klasse aufgerufen wird). |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
14:50:39 23.04.2012 Titel: |
|
Zitieren |
Achso und wenn du mehrere Gegner verwenden möchtest änderst du einfach die Funktion zu:
| C++: | | void Kampf(Mensch Spieler,std::vector<Monster> Gegner) | |
und in der Funktion verwendest du dann eine Schleife die durch alle Gegner durchläuft. Im Grenzfall mit nur einem Gegner funktioniert es dann identisch zum sonstigen Fall. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
08:16:45 24.04.2012 Titel: |
|
Zitieren |
| Namenloser324 schrieb: | Achso und wenn du mehrere Gegner verwenden möchtest änderst du einfach die Funktion zu:
| C++: | | void Kampf(Mensch Spieler,std::vector<Monster> Gegner) | |
und in der Funktion verwendest du dann eine Schleife die durch alle Gegner durchläuft. Im Grenzfall mit nur einem Gegner funktioniert es dann identisch zum sonstigen Fall. |
Danke werde ich sofort versuchen zu testen
Gruss
Nimda4 |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
10:06:08 25.04.2012 Titel: |
Frage |
Zitieren |
Hab das mit deinem Code getestet funktioniert zwar noch ncith werde aber noch einwenig mich im Internet schlau machen und weiter versuchen bevor ich weider nachfrage
Habe aber noch eine Frage bezüglich Seite 1 dieses Thema mti dem Code für den Waffen Einkauf ich hab das jetzt mal nach gebildet und es sieht wie folgt aus:
| C++: | 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 | [code]
#include <stdio.h>
#include <tchar.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
class Waffe
{
public:
Waffe(string CName,string CDmg,string CKosten){Name = CName;Dmg = CDmg;Kosten=CKosten;}
string Name,Dmg,Kosten;
};
class Waffenliste
{
public:
void add(Waffe item)
{
Liste.push_back(item);
}
vector<Waffe> Liste;
};
int main()
{
string Geld;
int Geld_2=100;
Waffenliste liste;
ifstream file("waffe.txt");
if(file.good())
{
while(!file.eof())
{
vector<string> zeile;
string line;
getline(file,line);
do
{
//generiert Substring und fügt den gleich dem vektor hinzu
zeile.push_back(line.substr(0,line.find(" ")));
//wenn danach noch ein leerzeichen kommt löscht er bis zu diesem sonst alles
if(line.find(" ")!= string::npos)
line.erase(0,line.find(" ")+1);
else
line.erase();
}
while(!line.empty());
liste.add(Waffe(zeile[0],zeile[1],zeile[2]));
}
}
file.close();
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << "Name: " << liste.Liste[i].Name << "(Dmg " << liste.Liste[i].Dmg << ",Kosten " << liste.Liste[i].Kosten << ")" << endl;
cout <<"eingeben\n";
int x;
cin >>x;
Geld=liste.Liste[x].Kosten;
int value = atoi(Geld.c_str());
Geld_2=Geld_2-value;
cout <<Geld_2;
cout << "Waffe " << liste.Liste[x].Name << "gekauft" << endl;
system("pause");
} | | [/code]
Jedoch wenn ich 2 Eingebe stürzt das Programm ab, weil (wie ich herausgefunden habe) es gar kein 2 gibt.
Ich habe zwar 2 Waffen in der Liste jedoch lisst es nur die 2te ein.
waffe.txt
| Code: | Dolch 20 50
Schwert 60 200 | |
Ausgabe wenn ich 1 Drücke:
"-200Waffe Schwertgekauft"
Ausgabe bei 2 oder höhere Zahl(bei höherer Zahl ist es ja klar):
"Debug Assertion failed
.
.
.
"
Abort Retry Ignor
Weiss jemand wiso es das Erste nicht einliesst?
Gruss
Nimda4 |
|
|
|
 |
Belli
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1773
|
Belli Mitglied
10:24:12 25.04.2012 Titel: |
Re: Frage |
Zitieren |
| nimda4 schrieb: |
Ich habe zwar 2 Waffen in der Liste jedoch lisst es nur die 2te ein. |
Deine 'Liste' ist keine Liste, sondern ein Vektor. Und wenn der zwei Einträge hat, dann haben diese die Indizes 0 und 1. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
10:29:23 25.04.2012 Titel: |
Re: Frage |
Zitieren |
[/code]| Belli schrieb: | | nimda4 schrieb: |
Ich habe zwar 2 Waffen in der Liste jedoch lisst es nur die 2te ein. |
Deine 'Liste' ist keine Liste, sondern ein Vektor. Und wenn der zwei Einträge hat, dann haben diese die Indizes 0 und 1. |
Hab ich gerade auch festgestellt und wollte es posten da sah ich deinen Post xD
Ich danke dir trotzdem
Ich habe noch eine Frage.
Wie kann ich bei folgender Funktion dafür Sorgen das die Abstände die ich mit <<" " gemacht habe automatisch erstellen alssen je nach dem wie lang der string ist?
| C++: | 1 2 3 4 5 6 7 8 9 10 11 | [code]
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << i <<" " << liste.Liste[i].Name <<" " << liste.Liste[i].Dmg <<" " << liste.Liste[i].Kosten << endl;
cout <<"eingeben\n";
int x;
cin >>x;
Geld=liste.Liste[x].Kosten;
int value = atoi(Geld.c_str());
Geld_2=Geld_2-value;
cout <<Geld_2;
cout << "Waffe " << liste.Liste[x].Name << "gekauft" << endl; | | [/code]
Ich habe mri überlegt ob es so geht:
String maximal länge.
Teilen in 4 Teile je nach dem wie Lang z.b der Name ist (die 4 Kategorienen).
Gruss
Nimda4 |
Zuletzt bearbeitet von nimda4 am 10:45:46 25.04.2012, insgesamt 1-mal bearbeitet |
|
 |
Belli
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1773
|
Belli Mitglied
11:07:59 25.04.2012 Titel: |
|
Zitieren |
Ich bin mir nicht sicher, ob ich verstanden habe, was Du willst, aber
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iomanip>
#include <iostream>
...
int main()
{
...
std::cout << std::setw(20) << "Name" << setw(20) << "Vorname\n";
... | |
ist vielleicht das, was Du suchst?
Übrigens Hut ab! Ich bin immer wieder erstaunt, wieviel man trotz weitgehender Ahnungslosikeit erreichen kann. |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
12:14:30 25.04.2012 Titel: |
|
Zitieren |
Naja, man wächst mit der Aufgabe. Ist meines ERachtens motivierender mit einer Sache loszulegen und sich nebenbei mit der Thematik auseinanderzusetzen.
Für dein letzes Problem mit den <<" " verwende für die Ausgabe doch ne eigene Funktion, welche nachschaut wie lang die strings sind und dann für jeden Fall entsprechende Leerzeichen einfügt, auch wenn ich nicht weiß wieso du das machen möchtest. |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
13:28:55 25.04.2012 Titel: |
|
Zitieren |
| Belli schrieb: | Ich bin mir nicht sicher, ob ich verstanden habe, was Du willst, aber
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iomanip>
#include <iostream>
...
int main()
{
...
std::cout << std::setw(20) << "Name" << setw(20) << "Vorname\n";
... | |
ist vielleicht das, was Du suchst?
Übrigens Hut ab! Ich bin immer wieder erstaunt, wieviel man trotz weitgehender Ahnungslosikeit erreichen kann. |
Vielen Dank für dein Kompliment
Zur Zeit habe ich ja kein Buch und muss alles im Internet zusammen lesen-.-^^
Leider ist es nicht ganz das was ich möchte.
Ich möchte folgendes:
| Code: | Nr. Name DMG Kosten
0 Schwert 20 200
1 Dolch 10 100 | |
Es soll automatisch die Abstände anpassen also die Abtände zwischen den einzelnen Sachen.
@Namenloser324
Sehe ich genau so
Macht so viel mehr Spass und langsamm verstehe ich einig ezusammenhänge. Aber natürlich werde ich noch das Buch durcharbeiten.
Gruss Nidma4 |
|
|
|
 |
asc
Mitglied
Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5713
|
asc Mitglied
13:50:29 25.04.2012 Titel: |
|
Zitieren |
| Namenloser324 schrieb: | | Naja, man wächst mit der Aufgabe. Ist meines ERachtens motivierender mit einer Sache loszulegen und sich nebenbei mit der Thematik auseinanderzusetzen. |
Das wäre dann akzeptabel wenn man...
a) ...auch schlecht gelerntes wieder leicht vergessen würde...*
b) ...dann keine Anderen ständig bemüht...**
* Viele Bücher wählen nicht ohne Grund einen aufbauenden Weg, da so einige Fehler vermieden werden können. Der Mensch ist aber ein Gewohnheitstier, so wie z.B. jemand der Jahrelang Java programmiert hat, häufig bei C++ in Probleme rennt weil er sich auf sein altes Javawissen verlässt, oder jemand der sich einen dreckigen Programmierstil angewöhnt hat, diesen auch nur langsam ablegt.
** Ein Forum dient zwar der Hilfestellung, aber der Sinn verfliegt wenn jemand alles in kleinen Häppchen nachfragt. Die Steigerung ist dann alle Codeschnippel die man im Internet findet zu verwenden, ohne den Sinn wirklich zu verstehen, und sich dann Wundern wenn merkwürdige Fehler auftreten. |
_________________ in theory there's no difference between theory and practice. in practice there is. (yogi berra)
In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
|
|
 |
asc
Mitglied
Benutzerprofil
Anmeldungsdatum: 13.01.2007
Beiträge: 5713
|
asc Mitglied
13:52:02 25.04.2012 Titel: |
|
Zitieren |
| asc schrieb: | | Ich habe noch neue Bücher bei mir rumfliegen, nur habe ich diese schon einem anderen angeboten dem ich zumindest bis zum Wochenende Zeit lassen will. Ggf. kannst du mich ja mal kontaktieren. |
@nimda4: Bislang hat sich der Erste nicht gemeldet, kannst mich wie gesagt bei Bedarf mal kontaktieren (Mail über Profil) |
_________________ in theory there's no difference between theory and practice. in practice there is. (yogi berra)
In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
|
|
 |
Belli
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1773
|
Belli Mitglied
13:55:06 25.04.2012 Titel: |
|
Zitieren |
Dazu musst Du vor der Ausgabe einmal die Länge des breitesten Strings pro Spalte feststellen und dann:
| C++: | 1 2 3 4 5 6 7 8 9 10 | int breiteSpalteEins = /*zum Beispiel:*/ 8;
int breiteSpalteZwei = /*zum Beispiel:*/ 12;
int breiteSpalteDrei = /*zum Beispiel:*/ 10;
int breiteSpalteVier = /*zum Beispiel:*/ 14;
cout << left; //linksbündige Ausgabe
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << setw(breiteSpalteEins) << i << setw(breiteSpalteZwei) <<
liste.Liste[i].Name << setw(breiteSpalteDrei) << liste.Liste[i].Dmg <<
setw(breiteSpalteVier) << liste.Liste[i].Kosten << endl; | | |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
14:15:12 25.04.2012 Titel: |
|
Zitieren |
| Belli schrieb: | Dazu musst Du vor der Ausgabe einmal die Länge des breitesten Strings pro Spalte feststellen und dann:
| C++: | 1 2 3 4 5 6 7 8 9 10 | int breiteSpalteEins = /*zum Beispiel:*/ 8;
int breiteSpalteZwei = /*zum Beispiel:*/ 12;
int breiteSpalteDrei = /*zum Beispiel:*/ 10;
int breiteSpalteVier = /*zum Beispiel:*/ 14;
cout << left; //linksbündige Ausgabe
for(unsigned int i = 0 ; i<liste.Liste.size();i++)
cout << setw(breiteSpalteEins) << i << setw(breiteSpalteZwei) <<
liste.Liste[i].Name << setw(breiteSpalteDrei) << liste.Liste[i].Dmg <<
setw(breiteSpalteVier) << liste.Liste[i].Kosten << endl; | |
|
Vielen Danke werde ich im Verlauf des Tages probieren.
Gruss
Nimda4 |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
14:16:32 25.04.2012 Titel: |
|
Zitieren |
| asc schrieb: | | asc schrieb: | | Ich habe noch neue Bücher bei mir rumfliegen, nur habe ich diese schon einem anderen angeboten dem ich zumindest bis zum Wochenende Zeit lassen will. Ggf. kannst du mich ja mal kontaktieren. |
@nimda4: Bislang hat sich der Erste nicht gemeldet, kannst mich wie gesagt bei Bedarf mal kontaktieren (Mail über Profil) |
Hast eine Mail von mir
Gruss
Nimda4 |
Zuletzt bearbeitet von nimda4 am 14:17:03 25.04.2012, insgesamt 1-mal bearbeitet |
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
12:44:01 26.04.2012 Titel: |
|
Zitieren |
Hab jetzt trotzdem das ich auf das Buch warte noch eine Frage.
Ich habe ja folgende Klasse:
| C++: | 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 | [code]
public:
Monster() // Standardkonstruktor
: name(""), // Initialiserungsliste
leben(0),
Angriff(0),
Vert(0),
Schaden(0)
{
//Konstruktorrumpf
}
Monster( // Konstruktor mit Parametern
std::string const & name,
int leben,
int Angriff,
int Vert,
int Schaden)
: name(name), // Zuweisung Parameter zur Membervariablen
leben(leben),
Angriff(Angriff),
Vert(Vert),
Schaden(Schaden)
{
}
void test() //Testfunktion
{
std::cout <<name <<"\n" <<leben <<"\n" <<Angriff <<"\n" <<Vert <<"\n" <<Schaden <<"\n";
}
void kampf()
{
}
~Monster() // Destruktor
{
}
}; | | [/code]
Ich möchte die void Kampf() so machen das ich dort meine Werte dort Benutzen kann.
Muss ich dafür eine neue Klasse für mich machen da es nicht mit 2 Objekten in einer Methode der gleichen Klasse funktioniert?
Oder geht es doch?
Beispiel
Monster Ich("Hans",100,12,14,50);
Monster Oger("Oger",130,11,12,45);
Und dann möchte ich hier die Funtkion aufrufen und es soll zuerst das Objekt "ICH" nehmen und dann den Oger.
Wenn es möglich ist möchte ich es imemr so machen das der Erste der oben steht als erstes Objekt nimmt und dann das untere.
Und wenn ich eine Funktion einer anderen Klasse aufrufen möchte kann ich das mit "friend" machen?
Gruss
Nimda4 |
|
|
|
 |
Namenloser324
Unregistrierter
|
Namenloser324 Unregistrierter
12:50:05 26.04.2012 Titel: |
|
Zitieren |
wie bereits gesagt:
void kampf(std::vector<Monster> Gegnergruppe)
{
//hier kannst du deine eigenen Werte benutzen und wenn Monster friend deiner //Klasse ist auch die der Monster
} |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
13:57:56 26.04.2012 Titel: |
|
Zitieren |
| Namenloser324 schrieb: | wie bereits gesagt:
void kampf(std::vector<Monster> Gegnergruppe)
{
//hier kannst du deine eigenen Werte benutzen und wenn Monster friend deiner //Klasse ist auch die der Monster
} |
also ungefähr so?
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [code]
class Ich
{
public:
status werte;
friend class Monster;
{
}
void kampf(std::vector<Monster> Gegnergruppe)
{
// Kampvorgang
}
}; | | [/code]
| C++: | [code]
class Monster
{
status werte;
}; | | [/code]
Ist das so richtig?
Oder hast du gerade so ein Beispiel welches du posten könntest?
Gruss
Nimda4 |
|
|
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
16:44:05 26.04.2012 Titel: |
|
Zitieren |
Wieso muss es denn per value sein ? |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
09:45:50 27.04.2012 Titel: |
|
Zitieren |
| cvcv schrieb: | | Wieso muss es denn per value sein ? |
Muss es nicht, mir ist jede möglichkeit recht so fern sie Ihren Zweck erfüllt
Gruss
Nimda4 |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
12:53:55 27.04.2012 Titel: |
|
Zitieren |
Für mich ist einfach das Problem wie ich eine Kampffunktion machen kann, die folgende Sachen kann:
Meine Statuswerte verwendem, die des Gegners.
die methode roll von der kalsse dice verwenden und die ausgegebenen Werte mit den Statuswerten vergleichen.
beispiel:
Ausgabe: meinName, ihr dürft angreiffen.
dice roll() WürfelWürfeln.
wenn WürfelWürfel <=meinAngriff, dann Treffer
sonst ausgabe Troll darf angreiffen...
Gruss
nimda4 |
|
|
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
15:02:24 27.04.2012 Titel: |
|
Zitieren |
Naja, dazu war doch der Vorschlag mit dem vektor ... ?
| C++: | 1 2 3 4 5 6 7 8 9 10 11 | ...
std::vector<Monster> mobs;
mobs.push_back(someMobInstance1); // Einfach den Vektor mit den existierenden Instanzen deiner Monster-Klasse befüllen
mobs.push_back(someMObInstance2);
fight(mobs); // Den befüllten Vektor an deine Kampf-Funktion übergeben
...
void fight ( std::vector<Monster>& mobs ) {
// Jetzt kannst du hier wunderbar auf die Werte der einzelnen Monster-Instanzen zugreifen und dein komisches Roll-Gedöns da machen ;)
} | | |
|
|
|
 |
nimda4
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
|
nimda4 Mitglied
15:51:28 27.04.2012 Titel: |
|
Zitieren |
| cvcv schrieb: | Naja, dazu war doch der Vorschlag mit dem vektor ... ?
| C++: | 1 2 3 4 5 6 7 8 9 10 11 | ...
std::vector<Monster> mobs;
mobs.push_back(someMobInstance1); // Einfach den Vektor mit den existierenden Instanzen deiner Monster-Klasse befüllen
mobs.push_back(someMObInstance2);
fight(mobs); // Den befüllten Vektor an deine Kampf-Funktion übergeben
...
void fight ( std::vector<Monster>& mobs ) {
// Jetzt kannst du hier wunderbar auf die Werte der einzelnen Monster-Instanzen zugreifen und dein komisches Roll-Gedöns da machen ;)
} | |
|
o.O wow.
Danke viel mals bin am rumtesten, hab nur noch 2 kleine Probleme:
es sagt mir bei fight(mobs); "error C3861: 'fight': identifier not found."
und was wenn ich ein Objekt einer anderen Klasse mit mehr parametern verwenden möchte? (habs ausprobiert so gehts nicht )
Gruss
Nimda4 |
Zuletzt bearbeitet von nimda4 am 15:57:37 27.04.2012, insgesamt 2-mal bearbeitet |
|
 |
cvcv
Unregistrierter
|
cvcv Unregistrierter
16:38:13 27.04.2012 Titel: |
|
Zitieren |
Werd mal konkret, bitte. Wenn du die fight-funktion auch für eine andere Klasse haben willst, dann gibt ihr entweder einen 2. Parameter mit einem std::vector<AndereKlasse>& oder du überlädst die Funktion. -> Google.
Zu Deinem Fehler : Forward-Declaration, schreib den die Funktionssignatur vor deine main() :
| C++: | | void fight( std::vector<Monster>& ); | | |
|
|
|
 |