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

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

11

25.10.2011, 22:22

Jain. ;)
Es können 256 verschiedene Zeichen (2^8) dargestellt werden...
In der Variable ist aber nur Platz für einen Buchstaben. Das 'A' ist zum Beispiel 65, das 'a' ist 97 (wenn ich mich korrekt erinnere). Der Zahlenwert wird in dem char gespeichert. Aber eben immer nur ein Wert.
Um einen ganzen Namen zu speicher könntest Du char[] nehmen um jeden Buchstaben aneinander zu reihen, oder viel einfacher und sicherer, wie von drakon empfohlen std::string benutzen.

helebelele

Frischling

  • »helebelele« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Düsseldorf

  • Private Nachricht senden

12

25.10.2011, 22:26

ach so ist das gemeint :D das ist einleuchtend :)

Gibt es ein Präfix für Strings, wie zum Beispiel das "ch" für char?

helebelele

Frischling

  • »helebelele« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Düsseldorf

  • Private Nachricht senden

13

25.10.2011, 22:51

Ok jetzt hab ich ein weiteres Problem, dass ich bisher noch NIE hatte. :/
Also wenn ich die Anwendung starte und im Menü die Konsole wieder schließe ohne eine Figur erstellt zu haben, beendet sich das Spiel ganz normal. Wenn ich aber eine Instanz meiner Klasse erstelle und dann im Menü die Anwendung schließe krieg ich folgende Meldung:


(Link)

Uploaded with ImageShack.us

Kann mir dabei bitte jemand helfen?
Hier ist mal meine main.cpp. Weiß ja nicht ob euch die hilft :/

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
int main()
{
    // Variablen
    int auswahl;

    // "Titelbild" mit Menü
    cout << "\n\n\n";
    cout << "\t\t   Willkommen bei meinem ersten Rollenspiel!\n";
    cout << "\t\t  -------------------------------------------\n\n\n";

    do
    {
        cout << "Menue\n";
        cout << "------------------------\n\n";
        cout << "(1) - Neues Spiel starten\n";
        cout << "(2) - Spiel fortsetzen\n";
        cout << "(3) - Spiel beenden\n";
        cout << "Eingabe(1-3): ";
        cin >> auswahl;
        cout << endl;

        switch(auswahl)
        {
            // Neues Spiel?
            case (1):
            {
                cout << "Neues Spiel starten!\n\n";

                string name;
                cout << "Bitte gib den Namen deines Charakteres ein: ";
                cin >> name;
                cout << endl;

                int rasse;
                cout << "Welcher Rasse soll dein Charakter angehoeren?\n";
                cout << "1 - Mensch\n";
                cout << "2 - Ork\n";
                cout << "3 - Elfe\n";
                cout << "Rasse(1-3): ";
                cin >> rasse;
                cout << endl;

                CPlayer Player1(name, rasse);

                Player1.showStatus();

            } break;

            case (3):
            {
                cout << "Spiel wird beendet\n";
            } break;

            default:
            {
                cout << "Falsche Eingabe\n\n";
            }
        }
    } while (auswahl != 3);

    cin.sync();
    cin.get();
    return 0;
}


Dieser "case(1)" war nur zum testen ob der Konstruktor auch funktioniert. Für das eigentliche "Spiel" werd ich noch ne extra Datei anlegen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

25.10.2011, 22:54

Gibt es bestimmt, aber ich wage es jetzt mal dir davon abzuraten weiterhin die ungarische Notation zu verwenden. Das ist Heutzutage eher hinderlich, als hilfreich.

In Zeiten, wo man C noch mit einem normalen Editor gemacht hat war das sehr hilfreich, aber mit C++ und einer anständigen IDE findet man den Typen schnell heraus, wenn es überhaupt eine Rolle spielt. Öfters weiss man den Typen ja nicht einmal. Dazu kommt noch, dass es kaum durchzusetzen ist bei all den eigenen Typen (Klassen sind ja auch Typen). Es ist also kaum möglich überhaupt konsistent zu bleiben von dem ganzen Aufwand, wenn du mal den Typen wechseln willst abgesehen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

25.10.2011, 22:56

Zeig mal die komplette Definition von showStatus() und den aktuellen Konstruktor.

helebelele

Frischling

  • »helebelele« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Düsseldorf

  • Private Nachricht senden

16

25.10.2011, 23:00

Da es nur 3 Dateien momentan sind hau ich die mal alle kurz hier rein :)

main.cpp

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
#include <iostream>
#include <string>
#include "Player.h"

using namespace std;

int main()
{
    // Variablen
    int auswahl;

    // "Titelbild" mit Menü
    cout << "\n\n\n";
    cout << "\t\t   Willkommen bei meinem ersten Rollenspiel!\n";
    cout << "\t\t  -------------------------------------------\n\n\n";

    do
    {
        cout << "Menue\n";
        cout << "------------------------\n\n";
        cout << "(1) - Neues Spiel starten\n";
        cout << "(2) - Spiel fortsetzen\n";
        cout << "(3) - Spiel beenden\n";
        cout << "Eingabe(1-3): ";
        cin >> auswahl;
        cout << endl;

        switch(auswahl)
        {
            // Neues Spiel?
            case (1):
            {
                cout << "Neues Spiel starten!\n\n";

                string name;
                cout << "Bitte gib den Namen deines Charakteres ein: ";
                cin >> name;
                cout << endl;

                int rasse;
                cout << "Welcher Rasse soll dein Charakter angehoeren?\n";
                cout << "1 - Mensch\n";
                cout << "2 - Ork\n";
                cout << "3 - Elfe\n";
                cout << "Rasse(1-3): ";
                cin >> rasse;
                cout << endl;

                CPlayer Player1(name, rasse);

                Player1.showStatus();

            } break;

            case (3):
            {
                cout << "Spiel wird beendet\n";
            } break;

            default:
            {
                cout << "Falsche Eingabe\n\n";
            }
        }
    } while (auswahl != 3);

    cin.sync();
    cin.get();
    return 0;
}


Player.h

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
#include <iostream>
#include <string>

using namespace std;

class CPlayer
{
    private:

        //Membervariablen
        string m_chName;
        string m_chRace;
        int m_health;
        int m_attack;
        int m_defense;
        int m_agility;
        
    public:

        //Memberfunktionen
        CPlayer (string name, int race);
        void showStatus();
};


Player.cpp

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
#include "Player.h"
#include <string>

using namespace std;

// Konstruktor
CPlayer::CPlayer (string name, int race)
{
    m_chName = name;

    m_health = 100;

    // Attribute je nach Rasse verteilen
    if (race = 1)
    {
        m_chRace = "Mensch";
        m_attack = 12; m_defense = 9; m_agility = 20;
    }
    else if (race = 2)
    {
        m_chRace = "Ork";
        m_attack = 9; m_defense = 12; m_agility = 20;
    }
    else if (race = 3)
    {
        m_chRace = "Elf";
        m_attack = 9; m_defense = 9; m_agility = 25;
    }

    cout << "Spieler \"" << m_chName << "\" wurde erfolgreich erstellt!\n\n";
}

// Statusanzeige des Spielers
void CPlayer::showStatus ()
{
    cout << "Informationen ueber den Spieler: \n";
    cout << "---------------------------------\n\n";
    cout << "Name: " << m_chName << endl;
    cout << "Rasse: " << m_chRace << endl << endl;
    cout << "Lebenspunkte: " << m_health << endl;
    cout << "Angriff: " << m_attack << endl;
    cout << "Verteidigung: " << m_defense << endl;
    cout << "Schnelligkeit: " << m_agility << endl << endl;
}


Hoffe das hilft. Ist ja noch nicht so viel :)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

25.10.2011, 23:10

Probier das Projekt mal zu bereinigen. Ich sehe da kein Problem.

Du hast aber noch einen Fehler drin. Überprüf mal deine if's. Sind das wirklich Vergleiche oder etwas anderes? ;)

btw:
using namespace sollte man im Header vermeiden, da sonst alle, die deinen Header includen auch automatisch alles von dem (uninteressanten) Header offen liegen haben (das möchte man mit namespaces genau verhindern).

helebelele

Frischling

  • »helebelele« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Düsseldorf

  • Private Nachricht senden

18

25.10.2011, 23:16

Probier das Projekt mal zu bereinigen. Ich sehe da kein Problem.

Hab ich schon mehrfach getan. Hat nicht geholfen.
Bei dieser free.c datei steht über dem markierten was von HeapFree. Kann es sein, dass es was mit dem Speicher zu tun hat? Nur so ne Idee. Hab da leider keinen blassen Schimmer von :/

Du hast aber noch einen Fehler drin. Überprüf mal deine if's. Sind das wirklich Vergleiche oder etwas anderes? ;)

Ist mir garnich aufgefallen XD ich muss "==" für Vergleiche verwenden :D

Und das "using namespace" möglichst vermeiden und mit "std::" arbeiten. Also std::cout und so schreiben?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

26.10.2011, 00:12

Hab ich schon mehrfach getan. Hat nicht geholfen.

Das ist merkwürdig. Also bei mir funktioniert das. Erstell sonst einfach mal ein neues Projekt und kopier die Dateien da rein. Sollte grundsätzlich funktionieren.

Und das "using namespace" möglichst vermeiden und mit "std::" arbeiten. Also std::cout und so schreiben?

Im Header vermeiden, ja. In der .cpp kannst du using schon machen, weil das File niemand included kann es das Problem nicht geben.

helebelele

Frischling

  • »helebelele« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Düsseldorf

  • Private Nachricht senden

20

26.10.2011, 08:36

Ich werd das heute nach meinem Praktikum mal versuchen die Dateien in ein neues Projekt zu packen.
Könnte das vielleicht mit den Einstellungen des Projektes zusammenhängen? Also ich benutz VS2010 und hab ne win32-konsolenanwendung dafür erstellt. Hab das ganz leer ohne voreingestellten Header gemacht.

Werbeanzeige