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

Schappy

Frischling

  • »Schappy« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Scheeßel

Beruf: Schüler

  • Private Nachricht senden

1

24.04.2009, 23:52

Seite 73 c++. Erstes eigenes Ergebnis

Hey liebe Community,
Hey lieber Buchautor und alle die dazu gehören :)

Nun ich kaufte das Buch c++ für Spieleprogrammiere vor knapp 2 Monaten.
Nun habe ich gleich nach dem Kauf bis auf Seite 110 innerhalb 2 Tage mich durchgearbeitet.
Nach einem privaten Ereignis konnte ich bis vor einer Woche nicht mehr an dem Buch lernen.

Nun wollte ich mein erstes Ergebnis zeigen und nach der Korrektheit fragen.
Ich brauchte für dies jetzt fast 30 Minuten und 15 Minuten fehler suchen.

Lange Rede kurzer Sinn, da ist mein C++ Code.

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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>

using namespace std;


int main ()

{


// Menüvariablen

char menueAuswahl;


// Menü

cout << "Möchten Sie einen (K)ampf führen, oder das Tunier (v)erlassen?" << endl;
cin >> menueAuswahl;

switch (menueAuswahl)

{
case ('k'):


// Variablen


float Lebensenergielv1;
float Angriffsschadenprolevel;
float Angriffsschadengegner;
float Angriffsschadendu;
float Level;
float Lebensenergievoll;
float duLebensenergie;
float gegnerangriff;
float duangriff;
float Gegnerlevel;
float Gegnerlebensenergie;
float gegnergesamtschaden;
float dugesamtschaden;
float gegnerLebensenergie;
float duRegeneration;
float gegnerRegeneration;
float Regenerationszahl;

//Variablen benennen


Angriffsschadenprolevel = 2.87831;
Regenerationszahl = 0.233;
Lebensenergielv1 = 35.57231;

// Lebensenergierechnung


Level = 1;
cout << "Welches Level bist du: ?" << endl;
cin >> Level;


Lebensenergievoll = Level * Lebensenergielv1;

cout << "Du besitzt insgesamt: " << Lebensenergievoll << " Lebenspunkte" << endl;

Gegnerlevel = 1;
cout << "welches Level ist dein Gegner: ?" << endl;
cin >> Gegnerlevel;

Gegnerlebensenergie = Gegnerlevel * Lebensenergielv1;
cout << "Der Gegner besitzt " << Gegnerlebensenergie << " Lebenspunkte" << endl;



// Angriffsrechnung


gegnerangriff = 1;
cout << "Wie oft greift der Gegner an: ?" << endl;
cin >> gegnerangriff;



duangriff = 1;
cout << "Wie oft greifst du an: ?" << endl;
cin >> duangriff;

Angriffsschadengegner = Gegnerlevel * Angriffsschadenprolevel;

Angriffsschadendu = Level * Angriffsschadenprolevel;

gegnergesamtschaden = 0;
gegnergesamtschaden = gegnerangriff * Angriffsschadengegner;

dugesamtschaden = 0;
dugesamtschaden = duangriff * Angriffsschadendu;

cout << "Du machst pro Angriff... " << Angriffsschadendu <<" Schaden. du greifst " << duangriff << " mal an" << endl;
cout << "Du machst bei " << duangriff << " angriffen, insgesamt " << dugesamtschaden << " Schaden" << endl;

cout << "Dein Gegner macht pro Angriff... " << Angriffsschadengegner << " Schaden. Er greift " << gegnerangriff << " mal an." << endl;
cout << "Dein Gegner macht bei " << gegnerangriff << " angriffen, insgesamt " << gegnergesamtschaden << " Schaden" << endl;


// Regeneration


duRegeneration = 1; 
// pro Angriff

duRegeneration = gegnerangriff * Level * Regenerationszahl;

gegnerRegeneration = 1; 
// pro Angriff

gegnerRegeneration = duangriff * Gegnerlevel * Regenerationszahl;


duLebensenergie = (Lebensenergievoll - gegnergesamtschaden) + duRegeneration;
gegnerLebensenergie = (Gegnerlebensenergie - dugesamtschaden) + gegnerRegeneration;


cout << "Dein Regenerationswert ist " << duRegeneration << endl;
cout <<"Du besitzt jetzt nach " << gegnerangriff << " Angriff(en), noch " << duLebensenergie << " Lebenspunkte" << endl;


cout << "Dein Gegnersregenerationswert ist " << gegnerRegeneration << endl;
cout << "Dein Gegner besitzt jetzt nach " << duangriff << " Angriff(en), noch " << gegnerLebensenergie << " Lebenspunkte" << endl;



// Spieler oder Gegener - Tot


if (duLebensenergie <= 0)

{
    cout << "\n \n Du bist tot. Deine Lebenspunkte sind erloschen." << endl;
}
    
else if (gegnerLebensenergie <= 0)
{
    cout << "\n \n Du hast deinen Feind getoetet" << endl;
}

else if (duLebensenergie > 0)
{
    cout << "\n \n beide Spieler leben noch" << endl;
}


int stop;
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestärigen um das Programm zu beenden" << endl;
cin >> stop;
// Menü verlassen


}


return 0;
}



Dazu... Ja die Übersicht.. Aber ich steige noch durch. Mal gucken wie es in einigen Tagen aussieht. Ich werde aber an diesem Beispiel immer weiter arbeiten. So hoffe ich, das hier alles hinein passt.


Wie findet ihr dies?


Mfg. Michael Herker

EDIT von Fred: C++-Tags hinzugefügt. Der Übersicht halber
Mfg. Michael Herker :D

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

2

25.04.2009, 01:13

Aiaiai, ich hoffe da waren noch Tabs drin. :D

Ich kenne das Buch nicht und weiss also auch nicht, was Du schon gelernt hast. Aber hier schon einmal einige Punkte:

switch
Du hast da ein switch mit 'nem case für 'k'... Was passiert, wenn der Benutzer ein grosses 'K' eingibt? (Weiss ich selbst nicht, würde aber erwarten, dass da nix passiert.) Und: Du hast ein case für 'k', aber keins für 'v'.

Funktionen
Wie gesagt, ich weiss nicht, was Du schon alles gelernt hast, aber das ist wohl das grösste switch case, das ich je gesehen habe. xD Pack's in eine Funktion (wenn Du die schon kennst).

C-/C++-Quelltext

1
2
3
4
5
6
7
switch(menueAuswahl)
{
    case 'k':
        Kaempfe();
        break;
    ...
}


Kommentare
Ja, gibt's denn sowas? Ein Neuling, der kommentiert? :D Nice! Etwas mehr Kommentare würden nicht schaden. Das kommt aber mit der Zeit automatisch. ;)

Rechtschreibung
Gewöhn sie Dir an! xD Je früher, desto besser. ^^

Variablen
- Manchmal beginnen die Namen da mit kleinen Buchstaben, manchmal mit grossen. Vereinheitlichen. :) Beliebt: camelCase.
Beispiel: float Gegnerlevel; --> float gegnerLevel;
- Alles floats? Sicher? ^^
- Variablen wenn möglich gleich bei der Deklaration initialisieren. (Wert gleich zu Beginn setzen.)

Mehr kann ich noch nicht sagen, hab's noch nicht so genau angeschaut. (Schlafen... jetzt....) Ansonsten: Hast Du vorher schon programmiert? Oder sind das die aller ersten Erfahrungen überhaupt? Für letzteres wär's schonmal gar nicht schlecht. :) Mein Tipp: Weiter lesen, weiter lernen. Das Potential ist da, also sammle Erfahrung. Ach ja, in diesem Post ist übrigens nichts als Beleidigung gemeint. Alles nur wertvolle Tipps für die Zukunft.

Zum Schluss gebe ich Dir - frech wie ich bin - eine Aufgabe:
Wenn Du das Buch fertig gelesen und alles (mehr oder weniger) verstanden hast, solltest Du dieses Spiel noch einmal schreiben und hier rein posten. Um mal die Steigerung zu sehen. ;)

MfG
Asmo
Eat a beaver - Save a tree.

Schappy

Frischling

  • »Schappy« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Scheeßel

Beruf: Schüler

  • Private Nachricht senden

3

25.04.2009, 03:59

Nein ich sehe Verbesserungsvorschläge und Tipps nicht als Beleidigung an!
Sondern eher als Hilfestellung ;-)

Bei der Case - Verlassen habe ich herausgefunden, das der Compiler die Anwendung sofort schließt, wenn ich diesen Case nicht eintrage. Er tut somit auch dies, was ich im Moment erwarte. Das Programm Verlassen.
Allerdings habe ich sonst Probleme mit einem 2ten Case einbauen.

Ich versuche dies so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
case ('v'):
cout << "Tunier wird verlassen, Bitte einen Wert eingeben und Enter betätigen." << endl;
int exit;
cin >> exit;
}

{ 
case ('k'): 


// Variablen

...
}


Nun füge ich dies so ein, kommt folgender Fehler
C:\Programme\Microsoft Visual Studio\MyProjects\wiederholung\Lebensenergie bei Angriff.cpp(27) : error C2046: Schluesselwort case ungueltig

Nun leider verstehe ich dies nicht so. Meines wissens ist diese Option beendet und richtig. Nun leider ist dieser falsch. Verstehen tu ich dies in diesem Moment leider nicht.


Nein nicht alles float! Ich habe sie im Moment alle so genannt, einfach aus dem Grund, dass einfach die Möglichkeit bestehen soll sich erstmal z.B. als Level 50 3/4 einzutragen. Werde ich aber sofort wieder ändern.
(Sprich, die float waren überlegt und kurze Zeit bedacht eingesetzt)


Nun wie richte ich dies ein, das ich bei case mehrere Buchstaben oder Wörter für eine Anwendung einrichte?
ich meinte soetwas in der art:

C-/C++-Quelltext

1
2
3
4
{
case ('v') ; ('V'):
  }
// leider klappt dies nun nicht, verdeutlicht aber mein vorhaben.



Die Variablen habe ich allerdings mit absicht so gewählt.
Ich sehe es als meine ordentliche unordnung an. Ich verstehe sie und bekomme so meiner Meinung die Ordnung hinein, auch wenn es verwirrend aussieht.


Kommentare sind dazu da, das ich genau so wie ein 2ter oder 3ter durchsteigt, ohne das ich viel dazu schreiben muss.
Sie sollen knapp sein und - aber auch übersichtlich.


Es sind meine ersten c++ erfahrungen - Ja.
Habe aber von der Schule her, einige kleine flüchtige Blicke in PHP und HTML geworfen.
Nun C++ reizt mich allerdings mehr.


Danke für deine Anregungen ;-)



Die kurze überarbeitung. Erstmal Schlaf dann weiter :-)

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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream> 

using namespace std; 


int main () 

{ 


// Menüvariablen 

char menueAuswahl; 


// Menü 

cout << "Möchten Sie einen (K)ampf führen, oder das Tunier (v)erlassen?" << endl; 
cin >> menueAuswahl; 

switch (menueAuswahl) 

{ 
case ('k'): 


// Variablen 



float Angriffsschadengegner; 
float Angriffsschadendu; 
int Level; 
float Lebensenergievoll; 
float duLebensenergie; 
int gegnerangriff; 
int duangriff; 
int Gegnerlevel; 
float Gegnerlebensenergie; 
float gegnergesamtschaden; 
float dugesamtschaden; 
float gegnerLebensenergie; 
float duRegeneration; 
float gegnerRegeneration; 


//Const - Variablen benennen 


const float Lebensenergielv1 = 35.57231; 
const float Angriffsschadenprolevel = 2.87831; 
const float Regenerationszahl = 0.233; 


// Lebensenergierechnung 


Level = 1; 
cout << "Welches Level bist du: ?" << endl; 
cin >> Level; 


Lebensenergievoll = Level * Lebensenergielv1; 

cout << "Du besitzt insgesamt: " << Lebensenergievoll << " Lebenspunkte" << endl; 

Gegnerlevel = 1; 
cout << "welches Level ist dein Gegner: ?" << endl; 
cin >> Gegnerlevel; 

Gegnerlebensenergie = Gegnerlevel * Lebensenergielv1; 
cout << "Der Gegner besitzt " << Gegnerlebensenergie << " Lebenspunkte" << endl; 



// Angriffsrechnung 


gegnerangriff = 1; 
cout << "Wie oft greift der Gegner an: ?" << endl; 
cin >> gegnerangriff; 



duangriff = 1; 
cout << "Wie oft greifst du an: ?" << endl; 
cin >> duangriff; 

Angriffsschadengegner = Gegnerlevel * Angriffsschadenprolevel; 

Angriffsschadendu = Level * Angriffsschadenprolevel; 

gegnergesamtschaden = 0; 
gegnergesamtschaden = gegnerangriff * Angriffsschadengegner; 

dugesamtschaden = 0; 
dugesamtschaden = duangriff * Angriffsschadendu; 

cout << "Du machst pro Angriff... " << Angriffsschadendu <<" Schaden. du greifst " << duangriff << " mal an" << endl; 
cout << "Du machst bei " << duangriff << " Angriff(en), insgesamt " << dugesamtschaden << " Schaden" << endl; 

cout << "Dein Gegner macht pro Angriff... " << Angriffsschadengegner << " Schaden. Er greift " << gegnerangriff << " mal an." << endl; 
cout << "Dein Gegner macht bei " << gegnerangriff << " Angriff(en), insgesamt " << gegnergesamtschaden << " Schaden" << endl; 


// Regeneration 


duRegeneration = 1; 
// pro Angriff 

duRegeneration = gegnerangriff * Level * Regenerationszahl; 

gegnerRegeneration = 1; 
// pro Angriff 

gegnerRegeneration = duangriff * Gegnerlevel * Regenerationszahl; 


duLebensenergie = (Lebensenergievoll - gegnergesamtschaden) + duRegeneration; 
gegnerLebensenergie = (Gegnerlebensenergie - dugesamtschaden) + gegnerRegeneration; 


cout << "Dein Regenerationswert ist " << duRegeneration << endl; 
cout <<"Du besitzt jetzt nach " << gegnerangriff << " Angriff(en), noch " << duLebensenergie << " Lebenspunkte" << endl; 


cout << "Dein Gegnersregenerationswert ist " << gegnerRegeneration << endl; 
cout << "Dein Gegner besitzt jetzt nach " << duangriff << " Angriff(en), noch " << gegnerLebensenergie << " Lebenspunkte" << endl; 



// Spieler oder Gegener - Tot 


if (duLebensenergie <= 0) 

{ 
    cout << "\n \n Du bist tot. Deine Lebenspunkte sind erloschen." << endl; 
} 
    
else if (gegnerLebensenergie <= 0) 
{ 
    cout << "\n \n Du hast deinen Feind getoetet" << endl; 
} 

else if (duLebensenergie > 0) 
{ 
    cout << "\n \n beide Spieler leben noch" << endl; 
} 


int stop; 
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestärigen um das Programm zu beenden" << endl; 
cin >> stop; 
// Menü verlassen 


} 


return 0; 
}
Mfg. Michael Herker :D

4

25.04.2009, 09:02

Du solltest außerdem ein break am ende des cases nicht vergessen (ok, manchmal ist es auch so geplant dass es nicht abgebrochen wird, aber meistens [vorallem am Anfang] vergisst man es einfach):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
switch(x)
{
    case('v'):
    case('V'):
    { // muss nicht hin

        // irgendwas

        break; // meistens erwünscht, ansonsten passiert dies, wie oben bei v und V (dort natürlich gewollt)

    } // nur wenn oben


    case('k'):
    case('K'):
....


Kannst dir ja mal selbst überlegen, warum zwischen v und V (bzw. k und K) kein break steht.
Probier einfach ein wenig.

Duji-Buji

Frischling

Beiträge: 20

Wohnort: Osnabrück

  • Private Nachricht senden

5

25.04.2009, 12:37

Ich würde auch statt dem "int start; cin >> start; ..." womit du es beenden möchtest, einfach ein cin.get(); schreiben. Da wartet der PC so lange, bis man Enter drückt. Außerdem beendet der Befehl "exit(1);" das Programm sofort. Und wie schon gesagt, pack das ganze einfach in eine Funktion. Wenn du das alles machst, ist es doch schon sehr viel übersichtlicher ;)
MfG

kiba

Alter Hase

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

6

25.04.2009, 13:01

Mir is noch was aufgefallen werden bei float warien nicht hinter der zahl ein "f" geschrieben z.b. floar a = 10.523f

Duji-Buji

Frischling

Beiträge: 20

Wohnort: Osnabrück

  • Private Nachricht senden

7

25.04.2009, 13:19

Das kann man machen, aber es geht auch ohne.

Schappy

Frischling

  • »Schappy« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Scheeßel

Beruf: Schüler

  • Private Nachricht senden

8

25.04.2009, 14:12

Danke einmal mit der Erklärung von dem case!
Direkt nachdem ich es hier von dir gelesen habe, habe ich dies auf Seite 73 nochmals nachlesen können und auch ein Beispiel sehen können.
=)


kiba, man kann hinter jeden float ein f setzen, dies dient aber nicht im System für veränderungen sondern nur der übersicht, das man nach langen codes noch weiß, das dies ein float wert ist und Nachkommerstellen erlaubt.

Duji-Buji:
wenn ich mein Befehl unten von

C-/C++-Quelltext

1
2
3
int stop; 
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestärigen um das Programm zu beenden" << endl; 
cin >> stop; 

auf

C-/C++-Quelltext

1
2
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestärigen um das Programm zu beenden" << endl; 
cin.get();

ändere, schließt er mir das Programm sofort. Bzw. gleich nachdem die Anwendung den punkt cin.get(); liest.
ich belasse es auf der manuelen Eingabe.

Nun nach weiteren überarbeitungen kommt dies heraus:

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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <iostream> 

using namespace std; 


int main () 

{ 


// Menüvariablen 

char menueAuswahl; 


// Menü 

cout << "Möchten Sie einen (K)ampf führen, oder das Tunier (v)erlassen?" << endl; 
cin >> menueAuswahl; 

switch (menueAuswahl) 
{
case('v'): 
    case('V'): 
    {  
        cout << "Tunier verlassen" << endl; 
        
    } break;

    {
case ('k'):
case ('K'):
{ 
// Variablen 



float Angriffsschadengegner; 
float Angriffsschadendu; 
int Level; 
float Lebensenergievoll; 
float duLebensenergie; 
int gegnerangriff; 
int duangriff; 
int Gegnerlevel; 
float Gegnerlebensenergie; 
float gegnergesamtschaden; 
float dugesamtschaden; 
float gegnerLebensenergie; 
float duRegeneration; 
float gegnerRegeneration; 


//Const - Variablen benennen 


const float Lebensenergielv1 = 35.57231f; 
const float Angriffsschadenprolevel = 2.87831f; 
const float Regenerationszahl = 0.233f; 


// Lebensenergierechnung 


Level = 1; 
cout << "Welches Level bist du: ?" << endl; 
cin >> Level; 


Lebensenergievoll = Level * Lebensenergielv1; 

cout << "Du besitzt insgesamt: " << Lebensenergievoll << " Lebenspunkte" << endl; 

Gegnerlevel = 1; 
cout << "welches Level ist dein Gegner: ?" << endl; 
cin >> Gegnerlevel; 

Gegnerlebensenergie = Gegnerlevel * Lebensenergielv1; 
cout << "Der Gegner besitzt " << Gegnerlebensenergie << " Lebenspunkte" << endl; 



// Angriffsrechnung 


gegnerangriff = 1; 
cout << "Wie oft greift der Gegner an: ?" << endl; 
cin >> gegnerangriff; 


duangriff = 1; 
cout << "Wie oft greifst du an: ?" << endl; 
cin >> duangriff; 

Angriffsschadengegner = Gegnerlevel * Angriffsschadenprolevel; 

Angriffsschadendu = Level * Angriffsschadenprolevel; 

gegnergesamtschaden = 0; 
gegnergesamtschaden = gegnerangriff * Angriffsschadengegner; 

dugesamtschaden = 0; 
dugesamtschaden = duangriff * Angriffsschadendu; 

cout << "Du machst pro Angriff... " << Angriffsschadendu <<" Schaden. du greifst " << duangriff << " mal an" << endl; 
cout << "Du machst bei " << duangriff << " Angriff(en), insgesamt " << dugesamtschaden << " Schaden" << endl; 

cout << "Dein Gegner macht pro Angriff... " << Angriffsschadengegner << " Schaden. Er greift " << gegnerangriff << " mal an." << endl; 
cout << "Dein Gegner macht bei " << gegnerangriff << " Angriff(en), insgesamt " << gegnergesamtschaden << " Schaden" << endl; 


// Regeneration 


duRegeneration = 1; 
// pro Angriff 

duRegeneration = gegnerangriff * Level * Regenerationszahl; 

gegnerRegeneration = 1; 
// pro Angriff 

gegnerRegeneration = duangriff * Gegnerlevel * Regenerationszahl; 


duLebensenergie = (Lebensenergievoll - gegnergesamtschaden) + duRegeneration; 
gegnerLebensenergie = (Gegnerlebensenergie - dugesamtschaden) + gegnerRegeneration; 


cout << "Dein Regenerationswert ist " << duRegeneration << endl; 
cout <<"Du besitzt jetzt nach " << gegnerangriff << " Angriff(en), noch " << duLebensenergie << " Lebenspunkte" << endl; 


cout << "Dein Gegnersregenerationswert ist " << gegnerRegeneration << endl; 
cout << "Dein Gegner besitzt jetzt nach " << duangriff << " Angriff(en), noch " << gegnerLebensenergie << " Lebenspunkte" << endl; 



// Spieler oder Gegener - Tot 


if (duLebensenergie <= 0) 

{ 
    cout << "\n \n Du bist tot. Deine Lebenspunkte sind erloschen." << endl; 
} 
    
else if (gegnerLebensenergie <= 0) 
{ 
    cout << "\n \n Du hast deinen Feind getoetet" << endl; 
} 

else if (duLebensenergie > 0) 
{ 
    cout << "\n \n beide Spieler leben noch" << endl; 
} 


int stop; 
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestärigen um das Programm zu beenden" << endl; 
cin >> stop; 


// Menü verlassen 

} 
} 
}



return 0; 
}


kiba:
ich habe nun bei den float -->

C-/C++-Quelltext

1
2
3
4
5
//Const - Variablen benennen 


const float Lebensenergielv1 = 35.57231f; 
const float Angriffsschadenprolevel = 2.87831f; 
const float Regenerationszahl = 0.233f; 

<--- jewals ein f hinter der benennung geschrieben. Dies muss aber natürlich nicht sein.


Die Funktion funktioniert immernoch :)
--------------------Konfiguration: Lebensenergie bei Angriff - Win32 Debug--------------------
Linker-Vorgang läuft...

Lebensenergie bei Angriff.exe - 0 Fehler, 0 Warnung(en)


Bei weiterem, was euch auffällt, oder ihr verbessern würdet, bitte mir bescheit sagen.


Mfg. Michael Herker
Mfg. Michael Herker :D

Schappy

Frischling

  • »Schappy« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Scheeßel

Beruf: Schüler

  • Private Nachricht senden

9

25.04.2009, 15:01

Ich habe meine Anwendung nun um einiges erweitert. Sieht auf dem ersten Blick zwar viel aus, ist aber nur simple Berechnung... ganz easy.

Erstmal der erneute Einblick

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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
#include <iostream> 

using namespace std; 


int main () 

{ 


// Menüvariablen 

char menueAuswahl; 


// Menü 

cout << "Möchten Sie einen (K)ampf führen, oder das Tunier (v)erlassen?" << endl; 
cin >> menueAuswahl; 

switch (menueAuswahl) 
{
case('v'): 
    case('V'): 
    {  
        cout << "Tunier verlassen" << endl; 
        
    } break;

    {
case ('k'):
case ('K'):
{ 
// Variablen 



float Angriffsschadengegner; 
float Angriffsschadendu; 
int Level; 
float Lebensenergievoll; 
float duLebensenergie; 
int gegnerangriff; 
int duangriff; 
int Gegnerlevel; 
float Gegnerlebensenergie; 
float gegnergesamtschaden; 
float dugesamtschaden; 
float gegnerLebensenergie; 
float duRegeneration; 
float gegnerRegeneration; 


//Const - Variablen benennen 


const float Lebensenergielv1 = 35.57231f; 
const float Angriffsschadenprolevel = 2.87831f; 
const float Regenerationszahl = 0.233f; 


// Lebensenergierechnung 


Level = 1; 
cout << "Welches Level bist du: ?" << endl; 
cin >> Level; 


Lebensenergievoll = Level * Lebensenergielv1; 

cout << "Du besitzt insgesamt: " << Lebensenergievoll << " Lebenspunkte" << endl; 

Gegnerlevel = 1; 
cout << "welches Level ist dein Gegner: ?" << endl; 
cin >> Gegnerlevel; 

Gegnerlebensenergie = Gegnerlevel * Lebensenergielv1; 
cout << "Der Gegner besitzt " << Gegnerlebensenergie << " Lebenspunkte" << endl; 



// Angriffsrechnung 


gegnerangriff = 1; 
cout << "Wie oft greift der Gegner an: ?" << endl; 
cin >> gegnerangriff; 


duangriff = 1; 
cout << "Wie oft greifst du an: ?" << endl; 
cin >> duangriff; 

Angriffsschadengegner = Gegnerlevel * Angriffsschadenprolevel; 

Angriffsschadendu = Level * Angriffsschadenprolevel; 

gegnergesamtschaden = 0; 
gegnergesamtschaden = gegnerangriff * Angriffsschadengegner; 

dugesamtschaden = 0; 
dugesamtschaden = duangriff * Angriffsschadendu; 

cout << "Du machst pro Angriff... " << Angriffsschadendu <<" Schaden. du greifst " << duangriff << " mal an" << endl; 
cout << "Du machst bei " << duangriff << " Angriff(en), insgesamt " << dugesamtschaden << " Schaden" << endl; 

cout << "Dein Gegner macht pro Angriff... " << Angriffsschadengegner << " Schaden. Er greift " << gegnerangriff << " mal an." << endl; 
cout << "Dein Gegner macht bei " << gegnerangriff << " Angriff(en), insgesamt " << gegnergesamtschaden << " Schaden" << endl; 


// Regeneration 


duRegeneration = 1; 
// pro Angriff 

duRegeneration = gegnerangriff * Level * Regenerationszahl; 

gegnerRegeneration = 1; 
// pro Angriff 

gegnerRegeneration = duangriff * Gegnerlevel * Regenerationszahl; 


duLebensenergie = (Lebensenergievoll - gegnergesamtschaden) + duRegeneration; 
gegnerLebensenergie = (Gegnerlebensenergie - dugesamtschaden) + gegnerRegeneration; 


cout << "Dein Regenerationswert ist " << duRegeneration << endl; 
cout <<"Du besitzt jetzt nach " << gegnerangriff << " Angriff(en), noch " << duLebensenergie << " Lebenspunkte" << endl; 


cout << "Dein Gegnersregenerationswert ist " << gegnerRegeneration << endl; 
cout << "Dein Gegner besitzt jetzt nach " << duangriff << " Angriff(en), noch " << gegnerLebensenergie << " Lebenspunkte" << endl; 



// Spieler oder Gegener - Tot 


if (duLebensenergie <= 0) 

{ 
    cout << "\n \n Du bist tot. Deine Lebenspunkte sind erloschen." << endl; 
} 
    
else if (gegnerLebensenergie <= 0) 
{ 
    cout << "\n \n Du hast deinen Feind getoetet" << endl; 
} 

else if ((duLebensenergie > 0) || (gegnerLebensenergie > 0))
{ 
    cout << "\n \n beide Spieler leben noch \n \n" << endl; 


// Variablen zum weiterfolgenden berechnen

int gegnerangriff2;
int duangriff2;
float gegnergesamtschaden2;
float dugesamtschaden;
float duRegeneration2;
float gegnerRegeneration2;
float duLebensenergie2;
float gegnerLebensenergie2;
float dugesamtschaden2;


// Frage zum Weglaufen oder Angreifen

cout << "Deine Lebensenergiepunkte liegen bei " << duLebensenergie << ". Die deines Gegners liegen bei " << gegnerLebensenergie << " punkten." << endl;
cout << "Möchten Sie den Gegner erneut (A)ngreifen oder (w)eglaufen?" << endl;


// Menüvariablen bei erneuten Kampf oder verlassen 

char menueAuswahl2; 
// Menü 

cin >> menueAuswahl2; 

switch (menueAuswahl2) 
{
case('w'): 
    case('W'): 
    {  
        cout << "Sie laufen weg wie ein Huhn" << endl; 
        
    } break;


    {
case ('a'):
case ('A'):
{ 

gegnerangriff2 = 1; 
cout << "Wie oft greift der Gegner an: ?" << endl; 
cin >> gegnerangriff2; 


duangriff2 = 1; 
cout << "Wie oft greifst du an: ?" << endl; 
cin >> duangriff2; 

// Weiterrechnung des Kampfes


gegnergesamtschaden2 = 0; 
gegnergesamtschaden2 = gegnerangriff2 * Angriffsschadengegner; 

dugesamtschaden2 = 0; 
dugesamtschaden2 = duangriff2 * Angriffsschadendu; 

cout << "Du machst pro Angriff... " << Angriffsschadendu <<" Schaden. du greifst " << duangriff2 << " mal an" << endl; 
cout << "Du machst bei " << duangriff2 << " Angriff(en), insgesamt " << dugesamtschaden2 << " Schaden" << endl; 

cout << "Dein Gegner macht pro Angriff... " << Angriffsschadengegner << " Schaden. Er greift " << gegnerangriff2 << " mal an." << endl; 
cout << "Dein Gegner macht bei " << gegnerangriff2 << " Angriff(en), insgesamt " << gegnergesamtschaden2 << " Schaden" << endl; 


// Regeneration 


duRegeneration2 = 1; 
// pro Angriff 

duRegeneration2 = gegnerangriff2 * Level * Regenerationszahl; 

gegnerRegeneration2 = 1; 
// pro Angriff 

gegnerRegeneration2 = duangriff2 * Gegnerlevel * Regenerationszahl; 


duLebensenergie2 = (duLebensenergie - gegnergesamtschaden2) + duRegeneration2; 
gegnerLebensenergie2 = (gegnerLebensenergie - dugesamtschaden2) + gegnerRegeneration2; 


cout << "Dein Regenerationswert ist " << duRegeneration2 << endl; 
cout <<"Du besitzt jetzt nach " << gegnerangriff2 << " Angriff(en), noch " << duLebensenergie2 << " Lebenspunkte" << endl; 


cout << "Dein Gegnersregenerationswert ist " << gegnerRegeneration2 << endl; 
cout << "Dein Gegner besitzt jetzt nach " << duangriff2 << " Angriff(en), noch " << gegnerLebensenergie2 << " Lebenspunkte" << endl; 


if (duLebensenergie2 <= 0) 

{ 
    cout << "\n \n Du bist tot. Deine Lebenspunkte sind erloschen." << endl; 
} 
    
else if (gegnerLebensenergie2 <= 0) 
{ 
    cout << "\n \n Du hast deinen Feind getoetet" << endl; 
} 

else if ((duLebensenergie2 > 0) || (gegnerLebensenergie2 > 0))
{ 
    cout << "\n \n beide Spieler leben noch \n \n" << endl; 
}
}
}
}
}



int stop; 
cout << "\n \nBerechnung fertig, Beliebes Eingeben und mit Enter bestätigen um das Programm zu beenden" << endl; 
cin >> stop; 


// Menü verlassen 

} 
} 
}



return 0; 
}




wie ist es nun?
ich versuche nun eine Schleife hinein zu bauen, so dass immer wieder wenn keiner der beiden Spieler tot ist, die Frage kommt, möchtest du erneut angreifen...

für einen Profi mag es simple klingen und er würde sagen mach einfach dort dies hin

C-/C++-Quelltext

1
for (int i=0; i<rundenAnzahl;i++)


nun leider muss ich lange hin arbeiten, damit ich weiß, wo genau ich dies hin setzen muss um die Berechnung ins Endlose zu führen, bis einer der beiden oder gleich beide tot sind.

Nun leider weiß ich noch nicht, wie ich meine Variablen dann benutzen soll, da ich immer wieder eine neue eröffnen muss. Die Berechnung muss ja weiter geführt werden.


Wenn ihr mir Tipps geben mögt, bitte ich lese sie gern ;-)

mfg. Michael Herker
Mfg. Michael Herker :D

Duji-Buji

Frischling

Beiträge: 20

Wohnort: Osnabrück

  • Private Nachricht senden

10

25.04.2009, 15:17

Mach es so:

C-/C++-Quelltext

1
2
3
while(1=2) {
// ...

}

Dann musst du nur noch wenn man tot ist den Befehl "break" hinzufügen und fertig ;)
MfG
PS So gehts glaub ich auch:

C-/C++-Quelltext

1
2
3
for (;;) {
// ...

}

Und wieso hast du zweimal eigentlich fast genau den selben Code geschrieben?
Und beim 2. mal kannst du die erste Variable "menuAuswahl" ruhig überschreiben. Du bruachst die dann ja nicht mehr.

Werbeanzeige