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

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

29.08.2011, 22:24

Char Variable gibt statt Buchstaben Zahlen aus!

Halli Hallo,
Ich habe ein kleines Tic Tac Toe Spiel programmiert und ein kleiner Codeabschnitt bestimmt, ob Spieler 1 dran ist und ein X eingesetzt wird oder halt Spieler 2 mit einem O... Theoretisch funktioniert alles, aber stat X und O werden 88 und 79 ausgegeben?? Wieso das? Hier die initialisierung und Verwendung der Char Variable:

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
        // Markierer initialisieren: Spieler 1 - X | Spieler 2 - O
        char marker;
        
        if (PlayerTurn == 1)
        {
            marker = 'O';
        }
        else
        {
            marker = 'X';
        }

so und hier wir das ganze ausgegeben:

// Eingabe der Spieler
        cout << "Spieler " << PlayerTurn << ": ";   
        bool validMove = 0;
        int select;

        do
        {
            // Eingabe abfragen
            
            cin >> select;

            if (select == 1 && field01 == 1)
            {
                field01 = marker;
            }
            else if (select == 2 && field02 == 2)
            {
                field02 = marker;
            }
            else if (select == 3 && field03 == 3)
            {
                field03 = marker;
            }
            else if (select == 4 && field04 == 4)
            {
                field04 = marker;
            }
            else if (select == 5 && field05 == 5)
            {
                field05 = marker;
            }
            else if (select == 6 && field06 == 6)
            {
                field06 = marker;
            }
            else if (select == 7 && field07 == 7)
            {
                field07 = marker;
            }
            else if (select == 8 && field08 == 8)
            {
                field08 = marker;
            }
            else if (select == 9 && field09 == 9)
            {
                field09 = marker;
            }
            else
            {
                cout << "Ungueltige Eingabe. Versuch es erneut" << endl;
            }

        } while (select > 9);

Danke schonmal ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »drakon« (29.08.2011, 22:30) aus folgendem Grund: Code Tags


ridens

Frischling

Beiträge: 47

Beruf: Freiberuflicher Entwickler

  • Private Nachricht senden

2

29.08.2011, 22:29

Welchen Datentyp haben denn field01 bis field09? marker ist ein Char, field0X sieht aus als wären es int. Von daher findet hier vermutlich eine Konvertierung statt, die dein Compiler dier wahrscheinlich auch per Warnung mitteilt. 88 und 79 sind die ASCII-Buchstabencodes von X und O.

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

3

29.08.2011, 22:32

Danke für die schnelle Antwort. Ja die field sind alle int. und wie kann ich das Problem umgehen?
PS: Nein mein Compiler meckert nicht :/

ridens

Frischling

Beiträge: 47

Beruf: Freiberuflicher Entwickler

  • Private Nachricht senden

4

29.08.2011, 22:36

Du könntest z.B. die field-Variablen stattdessen ebenfalls alle als char machen und als Signal für "leeres Feld" den Wert am Anfang überall auf 'n' setzen. chars sind ohnehin kleiner als ints, spart also auch mikroskopisch Speicher :P

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

5

29.08.2011, 22:36

okay, dann halt so :D danke ... Aber mich würde mal interessieren, obs trotzdem so geht...

ridens

Frischling

Beiträge: 47

Beruf: Freiberuflicher Entwickler

  • Private Nachricht senden

6

29.08.2011, 22:42

Nun ja, du musst entweder die fields zu chars machen oder den marker zu int. In dem Fall kannst du dir die Markervariable aber eigentlich sparen, und einfach direkt im Feld speichern welcher Spieler es besetzt. Und dann würdest du bei der Ausgabe eben anhand der Spielernummer ein X oder O zeichnen.

Tatsächlich ließe sich sogar die riesige if-Kontruktion sparen, wenn du field zu einem Array machst und einfach Array an Index von Eingabe-1 auf frei überprüfst.

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

7

29.08.2011, 22:48

So hab jetzt alles mit char gemacht. Funzt aber nicht. Compiler: Keine Konvertierung von int in char *

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
int main ()
{
    // Variablen
    char field01 ('a');
    char field02 ('b');
    char field03 ('c');
    char field04 ('d');
    char field05 ('e');
    char field06 ('f');
    char field07 ('g');
    char field08 ('h');
    char field09 ('i');
    int PlayerTurn (1);
    bool GameOver (true);

    do
    {
        // Spielfeld Zeichnen
        cout << field01 << "|" << field02 << "|" << field03 << endl;
        cout << "- + -" << endl;
        cout << field04 << "|" << field05 << "|" << field06 << endl;
        cout << "- + -" << endl;
        cout << field07 << "|" << field08 << "|" << field09 << endl;
        cout << "\n\n";

        // Markierer initialisieren: Spieler 1 - X | Spieler 2 - O
        char marker;
        
        if (PlayerTurn == 1)
        {
            marker = 'X';
        }
        else
        {
            marker = 'O';
        }


        // Eingabe der Spieler
        cout << "Spieler " << PlayerTurn << ": ";   
        bool validMove = 0;

        do
        {
            // Eingabe abfragen
            char select[2];
            cin.get (select, 1);
            bool validMove = true;

            if (select == 'a' && field01 == 'a')
            {
                field01 = marker;
            }
            else if (select == 'b' && field02 == 'b')
            {
                field02 = marker;
            }
            else if (select == 'c' && field03 == 'c')
            {
                field03 = marker;
            }
            else if (select == 'd' && field04 == 'd')
            {
                field04 = marker;
            }
            else if (select == 'e' && field05 == 'e')
            {
                field05 = marker;
            }
            else if (select == 'f' && field06 == 'f')
            {
                field06 = marker;
            }
            else if (select == 'g' && field07 == 'g')
            {
                field07 = marker;
            }
            else if (select == 'h' && field08 == 'h')
            {
                field08 = marker;
            }
            else if (select == 'i' && field09 == 'i')
            {
                field09 = marker;
            }
            else
            {
                cout << "Ungueltige Eingabe. Versuch es erneut" << endl;
                validMove = false;
            }

        } while (!validMove);

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »drakon« (29.08.2011, 22:55)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

9

29.08.2011, 22:54

Ja srry, hab ich erst gemacht aber dann wird alles vrschoben und ist äußerst unleserlich :/

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

29.08.2011, 22:55

Was ist jetzt daran unleserlich? - Ohne Tags ist es unleserlich..

Werbeanzeige