Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  C++ Einkaufsliste aber wie?  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5, 6, 7  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Namenloser324
Unregistrierter




Beitrag 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
Beitrag 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




Beitrag 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
Beitrag 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




Beitrag 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




Beitrag 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
Beitrag 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 :D

Gruss

Nimda4
nimda4
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.04.2012
Beiträge: 25
Beitrag 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 :D

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
Beitrag 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
Beitrag 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
c++.de :: C++ (auch C++0x und C++11) ::  C++ Einkaufsliste aber wie?  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5, 6, 7  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.