JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9903b7c8d677e01bcfab81292a5fc8e2Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem mit Variablen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 17:36    Titel: Problem mit Variablen Antworten mit Zitat

Hey.
Ich versuche ein kleines Textadventure zu programmieren und bin bisher schon auf 2 große Probleme gestoßen, für die ich keine Lösung finde:

1. Ich habe die Variable "ENERGY" für die Lebensenergie. Doch wenn ich sie im Spiel verändern will, nimmt der Compiler das natürlich immer von Startwert. Was kann ich da machen?

2. Ich versuche Passwörter einzubauen, die verschieden sind, jenachdem wieviel Lebensenergie noch vorhanden ist. doch wird dieser Teil übersprungen.

Das ist der Quellcode:
CPP:
/* Dieses Spiel funktioniert, indem man die richtige
Taste für die jeweilige Antwort drückt.*/


#include <iostream>

const char NZ   = '\n';
const char BEEP = '\a';
bool beenden(void);
char NAME[128];
char NACHNAME[128];

using namespace std;

int main(void)
{

    short menue = 0;

    cout << "Du liegst auf einem Holzbrett 20 Meter ueber der Strasse. " << NZ;
    cout << "Die Enden des Brettes sind durch zwei offene Fenster der" << NZ;
    cout << "Hochhauuser gelegt. Da tritt ein seltsam aussehender Mann " << NZ;
    cout << "vor das eine Fenster. Er fragt dich wie du heisst. " << NZ;
    cout << NZ;
    cout << "Gib deinen Vornamen ein: " << NZ;
    cout << NZ;
    cin >> NAME;
    cout << NZ;
    cout << "Gib deinen Nachnamen ein: " << NZ;
    cout << NZ;
    cin >> NACHNAME;
    cout << NZ;
    cout << "Aus irgendeinem Grund weisst du, dass du trauumst " << NZ;
    cout << "Alles wird dunkel, als du aufwaechst " << NZ;
    cout << NZ;
    cout << NZ;

    do
    {

        cout << "Hallo " << NAME << "!!!" << NZ;
        cout << "Was moechtest du tun?" << NZ;
        cout << "Druecke die jeweilige Zahl" << NZ;
        cout << NZ;
        cout << "1 Neues Spiel" << NZ;
        cout << "2 Passwort" << NZ;
        cout << "3 Anleitung" << NZ;
        cout << "4 Intro(neuer Name)" << NZ;
        cout << NZ;
        cin >> menue;

        if(menue == 1)
        {

            short aufstehen = 0;
            short ENERGY = 100;
            short Post = 0;

            cout << NZ;
            cout << NZ;
            cout << NZ;
            cout << "-------------------------------------------------------" << NZ;
            cout << NZ;
            cout << NZ;
            cout << NZ;
            cout << "Energie:" << ENERGY << NZ;
            cout << NZ;
            cout << NZ;
            cout << "Du drehst dich noch einmal nach links. Der Wecker zeigt " << NZ;
            cout << "dir die Zahlen 10:28. \"Gleich halb elf\" denkst du dir " << NZ;
            cout << "Du solltest wohl aufstehen. Aber du bist noch muede. " << NZ;
            cout << "Was willst du tun?" << NZ;
            cout << NZ;

            do
            {
                cout << "1 liegen bleiben"<< NZ;
                cout << "2 aufstehen" << NZ;
                cout << NZ;
                cin >> aufstehen;


                if(aufstehen == 1)
                {
                    cout << "Deine Mutter ruft dir, dass sie jetzt wegfaehrt" << NZ;
                    cout << "Das heisst du musst trotzdem aufstehen" << NZ;
                    cout << "Das nervt dich und deine Energie sinkt um 10! " << NZ;
                    cout << "Energie: " << ENERGY - 10 << NZ;
                    cout << "Du wirfst die Decke weg, schluepfst in einen Bademantel" << NZ;
                    cout << "und gehst nach unten. Da steht deine Mutter und" << NZ;
                    cout << "sagt: \"Tschuess!\". Du setzt dich" << NZ;
                    cout << "an den Tisch um zu fruehstuecken! " << NZ;
                    cout << NZ;

                }

                else if(aufstehen == 2)
                {
                    cout << "Du wirfst die Decke weg, schluepfst in einen Bademantel" << NZ;
                    cout << "und gehst nach unten. Da steht deine Mutter und" << NZ;
                    cout << "sagt: \"Ich wollte dir gerade sagen dass ich weg fahre.\" " << NZ;
                    cout << "\"Gut\" ist deine einsilbige Antwort und du setzt dich" << NZ;
                    cout << "an den Tisch um zu fruehstuecken! Deine Mutter ist" << NZ;
                    cout << "auch schon wieder weg." << NZ;
                    cout << NZ;
                }

                else
                {
                    cout << "Dies ist keine gueltige Zahl" << NZ;
                    cout << NZ;
                }

                if(aufstehen == 1 || 2)
                {
                    break;
                }

            }while(aufstehen == 1 || 2);


            cout << "Seltsamerweisse ist der Tisch gedeckt und voll mit Muesli, " << NZ;
            cout << "Obst, Eierspeisse, Cornflakes und vielen anderen Leckereinen " << NZ;
            cout << "Du freust dich und greifst kraeftig zu. " << NZ;
            cout << "Du freust dich ueber das leckere Fruehstueck. " << NZ;
            cout << "Deine Energie steigt um 5 " << NZ;
            cout << NZ;
            cout << NZ;
            cout << "Energie: " << ENERGY + 5 << NZ;
            cout << NZ;
            cout << NZ;
            cout << "Da entdeckst du eine Schuessel mit chinesischen Glueckskeksen. " << NZ;
            cout << "Du nimmst dir einen und oeffnest ihn. Auf dem Zettel steht:  " << NZ;
            cout << NZ;




// 2. Problem beginnt hier!



            if(ENERGY == 95)
            {
                cout << "\"Holzwand\" !!!Das ist das erste Passwort!!! " << NZ;
            }

            else if(ENERGY == 105)
            {
                cout << "\"Lampe\" !!!Das ist das erste Passwort!!! " << NZ;
            }

            cout << "Erfrischt denkst du nach, was du tun willst. Geh doch" << NZ;
            cout << "zur Post. Du solltest dich zuerst umziehen. " << NZ;
            cout << "Aber fuer die 3 Meter zum Briefkasten? " << NZ;
            cout << "Was willst du tun? " << NZ;
            cout << NZ;
            cout << "1 Post holen " << NZ;
            cout << "2 Umziehen " << NZ;
            cout << NZ;
            cin >> Post;
            cout << NZ;

            do
            {
                if(Post == 1)
                {
                    cout << "Du rennst hinaus. Du kommst zum Briefkasten und" << NZ;
                    cout << "nimmst alles heraus. Deine Nachbarin sieht dich" << NZ;
                    cout << "und schreckt sich. Dann steigst du (wo du noch " << NZ;
                    cout << "dazu barfuß bist) in einen Hundehaufen. Blöder " << NZ;
                    cout << "Nachbarshund! Bei deinem Sprint ins Haus machst " << NZ;
                    cout << "du mit deinen verdreckten Füßen auch noch den " << NZ;
                    cout << "Boden schmutzig und kannst das aufwischen. " << NZ;
                    cout << "Das Hauufchen musst du auch von deinem Fuss waschen " << NZ;
                    cout << "Du koenntest dich selbst zerreissen vor Wut." << NZ;
                    cout << "Deine Energie sinkt um 20 " << NZ;
                    cout << NZ;
                    cout << "Energie:" << ENERGY - 20 << NZ;
                    cout << NZ;

                }

                if(Post == 2)
                {
                    short Schuhe = 0;

                    cout << "Du gehst hinauf in dein Zimmer und ziehst dir eine " << NZ;
                    cout << "Jean und ein Hemd an. " << NZ;
                    cout << "Dann stehst du unten vor deinen Schuhen. Es " << NZ;
                    cout << "dauert dir zu lange sie zu binden, aber du willst " << NZ;
                    cout << "dich ja auch nicht verkuehlen. " << NZ;
                    cout << "Was willst du tun " << NZ;
                    cout << NZ;
                    cout << "1 anziehen " << NZ;
                    cout << "2 nicht anziehen " << NZ;
                    cout << NZ;
                    cin >> Schuhe;
                    cout << NZ;

                    do
                    {
                        if(Schuhe == 1)
                        {
                            cout << "Du gehst hinaus, gruesst deine Nachbarin und ihr " << NZ;
                            cout << "plaudert kurz. Du freust dich, und holst daraufhin die " << NZ;
                            cout << "Post. Deine Energie steigt um 10! " << NZ;
                            cout << NZ;
                            cout << "Energie: " << ENERGY + 10 << NZ;
                            cout << NZ;
                        }

                        else if(Schuhe == 2)
                        {
                            cout << "Du holst die Post. Du siehst einen Hundehaufen, weichst " << NZ;
                            cout << "aber aus. Der kalte Beton tut deinen Zehen nicht gut. " << NZ;
                            cout << "Du hast dich vermutlich gerade verkuehlt. " << NZ;
                            cout << "Du wirst in ein paar Tagen anfangen zu niesen. " << NZ;
                            cout << "Du gehst hinein. " << NZ;
                            cout << "Deine Energie sinkt um 5 " << NZ;
                            cout << NZ;
                            cout << "Energie: " << ENERGY - 5 << NZ;
                            cout << NZ;
                        }

                        else
                        {
                            cout << "Dies ist keine gueltige Zahl" << NZ;
                            cout << NZ;
                        }

                        if(Schuhe == 1 || 2)
                        {
                            break;
                        }

                    }while(Schuhe == 1 || 2);
                }

                else
                {
                    cout << "Dies ist keine gueltige Zahl" << NZ;
                    cout << NZ;
                }

                if(Post == 1 || 2)
                {
                    break;
                }


            }while(Post == 1 || 2);


    }

    else if(menue == 2)
    {


    }

    else if(menue == 3)
    {
        cout << NZ;
        cout << "Das Spiel ist sehr einfach! Dir wird immer eine " << NZ;
        cout << "Frage gestellt und du musst daraufhin nur " << NZ;
        cout << "die Zahl fuer die entsprechende Antwort eingeben " << NZ;
        cout << "Im Spiel gibt es immer wieder Passwoerter. Wenn du " << NZ;
        cout << "weiterspielen willst, schreib es dir auf und gib es " << NZ;
        cout << "im Menue unter dem Punkt \"Passwort\" wieder ein. " << NZ;
        cout << "Dann machst du an dem Punkt wieder weiter, an dem " << NZ;
        cout << "du das Passwort erfahren hast." << NZ;
        cout << NZ;
        cout << "Viel Spass!" << NZ;
        cout << NZ;
        cout << NZ;
    }

    else if(menue == 4)
    {
        cout << NZ;
        cout << "Du liegst auf einem Holzbrett 20 Meter ueber der Strasse. " << NZ;
        cout << "Die Enden des Brettes sind durch zwei offene Fenster der" << NZ;
        cout << "Hochhauuser gelegt. Da tritt ein seltsam aussehender Mann " << NZ;
        cout << "vor das eine Fenster. Er fragt dich wie du heisst. " << NZ;
        cout << NZ;
        cout << "Gib deinen Vornamen ein: " << NZ;
        cout << NZ;
        cin >> NAME;
        cout << NZ;
        cout << "Gib deinen Nachnamen ein: " << NZ;
        cout << NZ;
        cin >> NACHNAME;
        cout << NZ;
        cout << "Aus irgendeinem Grund weisst du, dass du trauumst " << NZ;
        cout << "Alles wird dunkel, als du aufwaechst " << NZ;
        cout << NZ;
        cout << NZ;
    }


    else
    {
        cout << "Diese Zahl ist ungueltig" << NZ;
        cout << NZ;
    }
    }while(beenden());

    system("PAUSE");
    return 0;
}

bool beenden(void)
{
    char JaNein = 'n';

    cout << "Willst du das Programm beenden? Gib \"n\" ein umd zum Hauptmenue " << NZ;
    cout << " zuruekzukehern, oder etwas anderes um zu beenden" << NZ;
    cout << NZ;
    cin >> JaNein;
    cout << NZ;
    cout << NZ;

    if('n' == JaNein)
    {
        return true;
    }
    else
    {
        return false;
    }
}


Wisst ihr vielleicht so nebenbei wo ich std::string lernen kann? In meinem Buch hab ich dazu nählich nichts gefunden.

thx im Vorraus

nixkoenner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 17:54    Titel: Antworten mit Zitat

CPP:
ENERGIE+=5;

//oder auch
ENERGIE=ENERGIE+5;//was genau das selbe macht

            cout << "Energie: " << ENERGIE << NZ;

So einfach ist das. Achja, dass die Passwörter übersprungen werden liegt natürlich daran, dass Energie==100 ist. Daher ist keine der Bedingungen war.
btw.: Dein Code ist gruselig. Du solltest unbedingt lernen, Textdateien zu verarbeiten.
Ich habe als ich am C++ lernen war auch so ein Textadventure gemacht, und bin dann schnell auf Textdateien umgestiegen. Immer ein Text der eine Nummer hat und verschiedene Eingaben die zu verschiedenen anderen Texten führten. Damit hat man viel weniger Code, viel weniger Fehler, ist schneller beim schreiben und so weiter.

std::string Da gibt es nicht soo wahnsinnig viel zu lernen, jedenfalls am Anfang. Man kann die fast genauso benutzen, wie char* Strings. Ansonten:
http://www.google.com/search?q=std%3A%3Astring+Tutorial&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a
(der zweite Link sieht schon ok aus)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 18:18    Titel: Antworten mit Zitat

Laughing

Zuletzt bearbeitet von nixkoenner am 12.10.2007, 18:21, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 18:19    Titel: Antworten mit Zitat

Hey danke

ja dass mein code schlimm ist da hast du recht. Was meinst du genau mit Textdateien. Eigene externe datein die ich aufrufe oder was?
Das versteh ich nicht ganz, aber meinst du, ich soll für jeden etwas längeren Text eine eigene Funktion deklarieren oder wie jetz Shocked

thx für die schnelle antwort
nixkoenner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 18:25    Titel: Antworten mit Zitat

Er meinte sicher, diese Textpassagen in Textdateien auslagern und im Programm dann auslesen und anzeigen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 18:27    Titel: Antworten mit Zitat

ich bin noch ziemlicher anfänger Embarassed . wie macht man das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Robrunner
Mini JLI'ler


Alter: 32
Anmeldedatum: 08.07.2007
Beiträge: 44
Wohnort: Passau
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 18:38    Titel: Antworten mit Zitat

Fürs erste: Dateien
_________________
Wer einen Rechtschreibfehler findet darf ihn behalten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 19:14    Titel: Antworten mit Zitat

thx. komplizierte geschichte werds mir merken!! Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 19:14    Titel: Antworten mit Zitat

Ein Beispiel für eine Datei:

Code:

Text:1
Hier steht der Text vom Anfang des Adventures.
Hier noch ein bisschen was.
Und ne dritte Zeile.
Drücke 1 um nach links zu gehen
Drücke 2 um nach rechts zu gehen
[ENDE]
1:2
2:37
[NOCHEINENDE]

Text:2
Du bist nach links gegangen
[ENDE]
[NOCHEINENDE]

Text:37
Du bist nach rechts gegangen
[ENDE]
[NOCHEINENDE]

Ist nur ein dämliches Beispiel, aber so kann mans machen.
Eine Zeile beinhaltet die Nummer des Textes. Dieser hat mehrere Zeilen, sobald in einer "[ENDE]" steht, weißte das hier der Text zu ende ist. Dann kommt das Zeichen das man drücken muss, dann ein Trennzeichen und dann die Nummer des Textes zu dem man kommt, wenn man die Entsprechende Eingabe gemacht hat.
"[NOCHEINENDE]" markiert dann das diese Weitergehauswahl vorbei ist und jetzt eine neue Textnummer kommt. Mit nem Text. Und so weiter.
Wenn du das jetzt spielen willst, es ist super easy. Du lädst Text 1, zeigts den an, und wartest auf die Eingabe des Spielers. Dann schaust du, ob es die gibt, wenn nicht kommt ne Fehlermeldung. Ansonsten schaust du, welche Textnummer zu dieser Eingabe gehört und suchst dann diesen Text raus, zeigts ihn an und so weiter.

Natürlich würde man das wenn mans gescheit haben will etwas komplexer machen, in nem Binär oder XML Format. Man könnte noch Bedingungen einbauen und Variablen die sich bei bestimmten Texten ändern und so weiter.
Aber nach dem gerade vorgestellten Prinzip habe ich mein erstes Textadventure programmiert, viel mehr Features wollte ich dann gar nicht mehr, weil ich dann spannenderere Spiele machen wollte. Aber zum üben wars ganz gut.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 19:26    Titel: Antworten mit Zitat

Dann müsst ich in einem Projekt z.b. 100 Texte machen, und das eigentliche Spiel ist es, zwischen denen hin und her zu springen?
Hab ich dat richtig verstanden? Shocked
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 19:29    Titel: Antworten mit Zitat

Hö?
Du programmierst das einmal, kompilierst das und hast dann deine fertige exe-Datei. Dann erstellst du eine ganze normale txt-Datei und tippst da deine Texte rein. Die wird dann von deiner kompilierten exe Datei geladne und interpretiert.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 19:43    Titel: Antworten mit Zitat

was?

nach dem link von robrunner muss ich das im Quellcode definieren oder so.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.10.2007, 21:43    Titel: Antworten mit Zitat

Du hast den Link nicht richtig verstanden. Im JLI Buch steht aber ein Kapitel über Dateien, das solltest du lesen. Allerdings werden dort noch ältere Methoden zum Schreiben und lesen benutzt, die in dem Link sind aktueller.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nixkoenner
Mini JLI'ler


Alter: 31
Anmeldedatum: 15.02.2007
Beiträge: 36

Medaillen: Keine

BeitragVerfasst am: 15.10.2007, 14:05    Titel: Antworten mit Zitat

thx Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum