C++ Einkaufsliste aber wie?



  • 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-bis-umfassende-Handbuch-Computing/dp/3836214296/ref=sr_1_4?s=books&ie=UTF8&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



  • 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?



  • 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.



  • So ich hab jetzt einen Account sende dir gleich den Code.

    Gruss

    nimda4

    edit du hast eien Email von mir 🙂



  • 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.



  • 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



  • [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



  • 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.



  • [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



  • 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.



  • 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



  • 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



  • 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



  • Ich benutze code blocks da funktioniert es ohne probleme.



  • 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

    #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

    // 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.

    [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



  • 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
    }
    }
    }



  • 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.

    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



  • Die Werte werden doch automatisch kopiert, wenn du den Gegner via call by value an die Kampfmethode übergibst.



  • 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?:

    void kampffunktion(Mensch,Monster1)
    


  • Äh, jetzt vermischt du aufruf und definition der Funktion.

    Also:
    Wenn du deine Funktion wie folgt definierst:

    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).


Anmelden zum Antworten