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

~*Geheim*~

unregistriert

1

29.06.2010, 19:16

Tic Tac Toe

Hallo, Leute ich habe ein Problem, mit meinem Tic Tac Toe und komme trotz tipps immer noch nicht darauf. Also, ich habe soweit ein Menü, wo man sich ein paar Dinge auswählen kann.... Aber wenn ich jetzt im Spiel die X zeichne, dann weiß ich immer noch nicht wann ich gewonnen habe. Wie mache ich das am Besten???? [Ab Zeile 155 weiß ich nicht 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <iostream>

using namespace std;

// Variablen und Konstanten
//
const int Breite = 3;
const int Hoehe = 3;
int Spielfeld[Breite][Hoehe];


// Prototypen
//
void StarteSpiel ();
void LoescheSpielfeld ();
void ZeigeSpielfeld ();
void BesetzeFeld ();
void ZeigeHighscore ();

// Hauptprogramm
//
int main ()
{
    int Auswahl = 0;

    cout<<"TicTacToe!"<<endl;
    cout<<"----------"<<endl<<endl;

    // Menü anzeigen und Eingabe bearbeiten
    do
    {
        cout << "1 - Neues Spiel" << endl;
        cout << "2 - Information" << endl;
        cout << "3 - Highscore" << endl;
        cout << "4 - Programm beenden" << endl<<endl;
        cin >> Auswahl;

        switch (Auswahl)
        {
            // Neues Spiel?
            case (1):
            {           
                LoescheSpielfeld ();
                StarteSpiel ();     

            } break;

            // Information?
            case (2):
            {
                cout<<"TicTacToe"<<endl;
                cout<<"---------"<<endl<<endl;
                cout<<"Sie muessen 3 in eine Reihe bekommen,"<<endl;
                cout<<"indem sie ihren Spielstein setzen,"<<endl;
                cout<<"auf der x-Achse und der y-Achse..."<<endl;
                cout<<"Wenn sie schnell sind bekommen sie mehr Punkte!"<<endl<<endl;
            } break;

            // Highscore anzeigen?
            case (3):
            {
                ZeigeHighscore ();
            } break;

            // Programm beenden?
            case (4):
            {
                cout << "-----------------" << endl;
                cout << "Programm beendet!" << endl;
                cout << "-----------------" << endl;
            } break;



            // Falsche Eingabe?
            default:
            {
                cout << "Ungueltiger Menuepunkt!" << endl;
            }
        }

    } while (Auswahl != 4);

    return 0;
}

void StarteSpiel ()
{
    for (int i=0; i<9; i++)
    {
        ZeigeSpielfeld ();
        BesetzeFeld ();
    }
}

void LoescheSpielfeld ()
{
    for (int y=0; y<Hoehe; y++)
    {
        for (int x=0; x<Breite; x++)
        {
            Spielfeld[x][y] = 0;
        }
    }

} 

void ZeigeSpielfeld ()
{
    cout << endl;

    for (int y=0; y<Hoehe; y++)
    {
        for (int x=0; x<Breite; x++)
        {
            
            if (Spielfeld[x][y] == 1)
                cout << "X";
            else if (Spielfeld[x][y] == 2)
                cout << "O";
            else
                cout<<".";
        }

        cout << endl;
    }
} 

void BesetzeFeld ()
{
    int x = 0;
    int y = 0;

        cout << "x-Position (1-" << Breite << "): ";
        cin >> x;

        cout << "y-Position (1-" << Hoehe << "): ";
        cin >> y;

        if (y<1 || y>3 || x<1 || x>3)
        {
            cout<<"\nFalsche Eingabe!"<<endl;
            BesetzeFeld ();
        }
        else if (Spielfeld[x-1][y-1] == 1)
        {
            cout<<"\nFeld ist besetzt!"<<endl;
            BesetzeFeld ();
        }
        else
        {
            Spielfeld[x-1][y-1] = 1;
        }

        for (x=0; x<Breite; x++)
        {
            for (y=0; y<Hoehe; y++)
            {
                if (Spielfeld[x][y] == 1)
                    cout<<"Gewonnen"<<endl; 
            }
        }   
} 

void ZeigeHighscore ()
{
    cout<<"Derzeit noch in Arbeit"<<endl;
}


Hoffe ihr könnt mir weiterhelfen, thx schon mal fürs lesen^^

2

29.06.2010, 20:04

Hm, also erstmal eine Empfehlung. Reduziere den Code, den du pastest aufs nötigste ! Und in diesem Fall ist das nichts und nochmalnichts, weil für dein Problem scheinste ja noch keine adäquate Lösung gefunden zu haben.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

3

29.06.2010, 20:13

Hm, also erstmal eine Empfehlung. Reduziere den Code, den du pastest aufs nötigste ! Und in diesem Fall ist das nichts und nochmalnichts, weil für dein Problem scheinste ja noch keine adäquate Lösung gefunden zu haben.

In welchem Fall ist was nichts und nochmalnichts? Sorry aber ich werd' aus deinem Posting nicht schlau.
Und dass er keine Lösung gefunden hat, weiß er glaub ich selber ganz gut ^^.

@Topic:

Um in einem Tic-Tac-Toe Spiel zu gewinnen, müssen 3 anliegende Felder den gleichen(nicht leeren) Inhalt haben. Du überprüfst jeweils nur, ob ein Feld den Wert 1 hat...
WIP Website: kevinheese.de

~*Geheim*~

unregistriert

4

29.06.2010, 20:29

Das versuche ich doch, aber irgendwie verwende ich was falsch... Könntest du mir das als Code zeigen, ich weiß zwar was du meinst, aber kann es nicht umsetzen ^^
Vielen Dank für die schnellen Antworten! MfG

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

29.06.2010, 20:40

Naja, nur mal ein bisschen Pseudo-Code zum Verständnis.

Wenn du die ersten 3 Felder testen willst, hast du y= 0 und x = 0 (+1 / +2 weil es die nächsten drei Felder sind)
Eine Überprüfung sehe dann ca. so aus:

C-/C++-Quelltext

1
if(Spielfeld[x][y] == Spielfeld[x+1][y] && Spielfeld[x+1][y] == Spielfeld[x+2][y]) // ist true, wenn alle 3 Felder gleich sind 


Nun müsstest du eine Methode finden, wie du alle Fälle vernünftig überprüfen kannst. Das Prinzip ist allerdings immer das gleiche!
WIP Website: kevinheese.de

6

29.06.2010, 20:42

Also:
@KeksX: Das war so gemeint, dass er in anbetracht der Tatsache, dass er keine Lösung gefunden hat, auch keinen Quelltext der hier direkt gebraucht werden würde hat. Sprich, ich würd mal sagen, 90% von dem Code ist hier nicht nötig zu pasten, und trägt nicht zur übersicht bei :)

@topic:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for (x=0; x<Breite; x++)
        {
            for (y=0; y<Hoehe; y++)
            {
                if (Spielfeld[x][y] == 1)
                    cout<<"Gewonnen"<<endl; 
            }
        }

Guck dir deinen Code mal an.
Die Bedingung ist, dass 3 Anliegende Felder 1 sind.
Und jetzt stell dir vor, Spielfeld[x][y] ist 1. Dann hat man nach deinem Ansatz gewonnen, bräuchte für gewöhnlich aber noch mindestens 2 Anliegende.
Sprich: Dein Ansatz geht jedes Feld durch, und sobald er ein Besetztes findet, meint er, du hättest gewonnen.

~*Geheim*~

unregistriert

7

29.06.2010, 21:02

@E122:
Also, dass er jedes Feld besetzt und dann "Gewonnen" schreibt weiß ich (leider)... Aber um zu prüfen, ob jetzt die erste Reihe besetzt ist weiß ich nicht wie....

@KeksX:
Thx für den Code, aber so richtig funktioniert der bei mir nicht, ich weiß nicht wie ich das in den Code einbauen muss, um zu prüfen, ob die erste Reihe besetzt ist oder nicht! Immer wenn ich denke ich habs, gehts nicht.

Könnte mir wer das erklären, und vielleicht auch den dementsprechenden Codeteil zeigen. Ich steh total auf der Leitung... ^^

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

8

29.06.2010, 21:05

Dann solltest du dir eventuell doch nochmal genauer ansehen, wie das mit den Schleifen und mehrdimensionalen Arrays genau funktioniert. Dann wirst du auch keine Probleme haben, den Code einzubauen ;).
WIP Website: kevinheese.de

~*Geheim*~

unregistriert

9

29.06.2010, 21:09

Ok, ich werd nochmal alles durchgehen, thx fürs helfen, hoffe ich komme drauf ^^ Viel Spaß bei euren Projekten :thumbsup:

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

30.06.2010, 12:43

Sinnvollerweise solltest du einfach ein Array aus allen Siegesmustern anlegen, denn die folgen nicht wirklich einer Logik. Also z.b.

C-/C++-Quelltext

1
2
3
4
1,1,1,0,0,0,0,0,0,0,
...
1,0,0,0,1,0,0,0,0,1,
...
Jetzt brauchst du nur noch eine Abfrage: Hat ein Spieler fuer eines der Siegesmuster jede dieser Felder mit seiner Nummer besetzt -> Sieg.

Werbeanzeige