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

11

16.06.2012, 11:48

aber er muss sie ja irgendwie abgrenzen, für mich lässt sich das jetzt so erklären, das jeder string in diesem array nun als 1 platz/zahl nun fungiert also z.b so array[5] = {petet,olaf,horst,lili,laura}

12

16.06.2012, 11:52

hatte jetzt noch ein problem
ich habe meine kampf funktion aufgerufen die void ist und somit ja keinen rückgabetypen hat, so nun habe ich per if (leben... == 0)
angegeben, das er dann zu main zurück gehen soll und in dieser main war eine switch case verzweigung, die je nach belieben verzweigt also kampf = kampffunktion optionen = optionen.

Auch flüchten hab ich da in eine switch case anweisung gemacht und diese mit return 0 gefüllt, nun sollte sich ja eigentlich das programm beenden, was es nicht getan hat, es war plötzlich wieder in der mitte der kampf funktion.

Jetzt habe ich bei flüchten exit(0); hingemacht und das klappt auch super, bloss wäre da bei mir die frage, warum gerade bei return 0 er wieder in die kampf funktion reinspringt, obwohl ich aus dieser mit main(); rausgegangen bin (die funktionen sind alle aus der main funktion also aussen)

13

16.06.2012, 11:57

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
#include <iostream>
#include <windows.h>
#include <stdlib.h>
using namespace std;
#pragma comment (lib, "winmm.lib")
//
//Funktionen
void Rundenfunk();
int winb = 0;
int winp = 0;
void Kampfp();
void Kampfb();

//Variablen
//
int Runden = 1;
int Lebenbot = 500;
int Lebenplayer= 500;

//
//Main
int main()
{

    char chAuswahl;
    int aufruf;
cout<< "Meue:" << endl;
cout << "_____________________________" << endl;
cout << "\n (P) Pokemon"<< endl;
cout << "(K) Kampf"<< endl;
cout << "(F) Flucht"<< endl;

cout << "Wie möchten sie fortfahren?" << endl;
cout << "Waehlen Sie eine Option mit den entsprechenden Buchstaben" << endl;
cout <<": "; cin >> chAuswahl;

switch (chAuswahl)
{
    case('p'):
    case('P'):
    {
        cout<<"\n\n"<< endl;
        cout<<"Dein Pokemon ist Schlurand" << endl;
        cout<<"\n\n\n\n"<< endl;

        return main();
    }break;


    case('K'):
    case('k'):
    {
        cout <<"Der Kampf wird in kuerze beginnen"<<endl;
        Rundenfunk();

    }break;


    case('F'):
    case('f'):
    {
        cout << "Ihr  Seid geflüchtet" << endl;
        exit(0);
    }break;

    default:
    {


    cout << "Falsche Eingabe DUMMBATS ;D" << endl;
    return main();
    }
}
return 0;
}



void Rundenfunk()
{
    cout << "RUNDENFUNK AUFGERUFEN" << endl;

    Runden ++;

    if(Runden%2)
    {
    cout << "Der Spieler ist dran" << endl;
    Kampfp();
    }
    else
    {

    cout << "Der Bot ist am Zug" << endl;
    Kampfb();
    }
}





void Kampfb()
{

                            //
                            //Skills Variablen
                            //
                            int Biss = 60;
                            int kratzer = 25;
                            int Heuler = 10;
                            int klatscher = 100;
                            int battack;


                            srand(timeGetTime ());
                            battack = (rand()%9);

                        if((battack==1)||(battack==5))
                        {
                            cout <<"Der Gegner setzt BISS ein" << endl;
                            cout <<"Schaden von BISS :"<< Biss << endl;
                            Lebenplayer -=Biss;
                            cout << "Das Leben nach dem Angriff" << Lebenplayer <<endl;
                        }
                        else if((battack == 2)||(battack==6))
                        {
                            cout << "Der Gegner setzt Kratzer ein" << endl;
                            cout << "Schaden von Kratzer:" << kratzer << endl;
                            Lebenplayer -=kratzer;
                            cout << "Das Leben nach dem Angriff" << Lebenplayer <<endl;

                        }
                        else if((battack == 3)||(battack==7))
                        {
                            cout << "Der Gegner setzt Heuler ein" << endl;
                            cout << "Schaden von Heuler "<< Heuler << endl;
                            Lebenplayer -=Heuler;
                            cout << "Das Leben nach dem Angriff" << Lebenplayer <<endl;
                        }
                        else if((battack==4)||(battack==8))
                        {
                            cout << "Gegner greift mit klatscher" << endl;
                            cout << "Kritischer Schaden von klatscher: " << klatscher << endl;
                            Lebenplayer -=klatscher;
                            cout << "Das Leben nach dem Angriff" << Lebenplayer <<endl;

                        }
                        else
                        {
                            cout << "Die Attacke des Gegners schlug fehl" << endl;
                        }
                        if(Lebenplayer<=0)
                        {
                            cout << "Der Gegner hat dich besiegt" << endl;
                            winp ++;
                            cout << "Das Leben des Spielers wurde regeneriert" << endl;
                            Lebenplayer = 100;
                            Lebenbot = 100;
                            main();

                        }
                        else
                        {


                            Rundenfunk();
                        }


}


void Kampfp()
{

                        int patck;
                        int skills[] = {60,25,10,20,30};
                        int auswahl = 0;
                        const char* skillname[] = {"Biss", "Kratzer", "Heuler", "knuff", "klatscher"};


                        cout << "Weahle deine Attacke aus" << endl;
                        cin >> auswahl;
                        cout << skillname[auswahl-1] << endl;

                        cout << skills[auswahl-1] << endl;
                        system("cls");

                        srand(timeGetTime ());
                        patck = (rand()%9)+1;

                        if(auswahl<=0 || auswahl>=5)
                        {

                        cout << "Falsche Eingabe" << endl;
                        Kampfp();
                        }

                        if(patck >= 9)
                        {
                            cout << "Attacke fehlgeschlagen" << endl;
                            cout << "Der Gegner ist nun dran" << endl;
                            Rundenfunk();
                        }

                        else
                        {
                            cout << "Du greifst deinen Gegner mit" << skillname[auswahl-1] << "an" << endl;
                            cout << "Schaden" << skills[auswahl-1] << endl;
                        }


                        if(Lebenbot<=0)
                        {

                            cout << "Glueckwunsch du hast deinen Gegner besiegt" << endl;

                            cout << "Leben des Gegners wurde regeneriert" << endl;

                            Lebenbot = 100;
                            Lebenplayer = 100;

                            main();
                        }


                        else
                        {


                            Rundenfunk();
                        }
}

RmbRT

Treue Seele

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

14

16.06.2012, 14:17

Nun, denk doch mal nach:
wenn du main() returnst, startet das programm neu.
Du wartest, dass main zu ende geht und dein return main() Statement damit auch zu ende ist. nur ist es so, dass du, egal was du eingiebst (außer 'f'), wieder die main() funktion aufrufst. du erreichst nie das ende der main() funktion.
statt exit(0) könntest du break; machen. Damit wird der Switch-Block unterbrochen, und du kommst in Zeile 74 an. Das musst du irgendwo einbauen, wenn du nicht per exit() beenden willst.
Hoffe, du verstehst, was ich meine ;)!
Edit: Hab ich dich überhaupt verstanden? ;)
Edit2: Du solltest in der Kampf funktion nicht main aufrufen! Generell ist main nur dafür gedacht einmal ausgefürt zu werden. Du könntest es stattdessen so lösen (mit einem Game-Loop):

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
//globale variable

bool running = true;

//in der main()
while(running)
{
    //die eingabe machen und so
    switch(eingabe)
    {
        //Die anderen abfragen und so machen
        //statt return main() einfach continue; eingeben um die schleife zu wiederholen.
        case 'f':
        {
            //ausgabe machen "du bist geflüchtet."
            running = false;
        }   break;
        default:
        {
            continue;   //Falls du "continue" nicht kennst, nachgucken, seeeeehr nützlich ;)
        }   break;
    }
}

//kampf funktion
//...
if(leben <= 0)
{
    cout << "du bist tot";
    running = false;
    //funktion abbrechen, die main() funktion wird die schleife nicht mehr wiederholen.
    return;
}
//...

MfG, RmbRT
"Dumm ist, wer dummes tut."

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »RmbRT« (16.06.2012, 14:33)


15

17.06.2012, 11:26

also ehrlich gesagt kann ich mir grad nicht genau vorstellen was du meinst ^^ ich denke du meinst er geht garnicht ans ende von main und tut diese funktion dann beenden.

ich denke damit sollt ich noch ein bisschen warten, sofern exit(0); keine fehler bei mir hervor ruft

ich versteh zwar deinen aufbau der schleife etc, aber ich hab ja garkeine schleife bei mir eingebaut.

er springt nach return 0 jetzt einfach weiter zur funktion rundenfunk

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »leri« (17.06.2012, 11:38)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

17.06.2012, 21:24

Wenn du Return Funktion() machst, wird erst die Funktion aufgerufen und deren Rückgabewert wird dann weiter zurück gegeben. Was du da machst nennt sich Rekursion. Dabei ruft eine Funktion sich selbst auf. Aber wie schon gesagt, macht man sowas mit Main eigentlich nicht. Main sollte eigentlich möglichst nur zum starten deines Programms benutzt werden. Du bist ja noch weit am Anfang. Guck dir den Code mit der Schleife noch mal in Ruhe an. Auch bei der eigentlichen Frage des Threads wirst du vielleicht bemerkt haben, dass du vermutlich noch viel Erfahrung sammeln musst. Was ja auch nichts verwerfliches ist.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

17

17.06.2012, 22:04

^^ ja wie gesagt ich bin noch gut am anfang des buches, und habe noch nicht soviel erfahrung :) ich werds mal weiter lesen rumprobieren, und mir später nochmal hier den thread duchlesen :)

danke nochmal an alle für die hilfe

Werbeanzeige