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

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

21

01.09.2006, 17:54

jo, ist klar. :D
Tut mir leid.

Anonymous

unregistriert

22

01.09.2006, 17:59

Naja, so sind die Anfänge nä? Ich glaube kaum jemand hat nicht mal
sowas geschrieben. ;) Naja wird schon noch =) Verbessern kann man
da schlecht, was. Ich glaube die meisten hier würden lieber ein komplett
neues Tic Tac Toe schreiben. ;)

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

23

01.09.2006, 18:29

Ich hätte ne menge anders gemacht :p
Den das ist nicht wirklich sicher und perfekt :p hoffentlich sagt nix da keine Kritik an sonst wirds ne lange Liste ;)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

24

01.09.2006, 20:47

Naja, ich hab' auch eine ziemlich schlampig gecodete Version erschaffen :?

Es wollte ja niemand seine verbessern, na dann könnt ihr ja meine Version verbessern. Aus der Endversion können wir auch was lernen :D
Ich habe mal alle Variablen unbenannt und versucht alles auf Deutsch zu halten, ausserdem ist das ganze in Funktionen aufgeteilt.

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
#include <stdio.h>
#include <windows.h>
#include <conio.h>

struct SFeld 
{ 
    int Wert;
    char Zeichen;
};

SFeld Feld[9];

int Gewinner(){
    if(Feld[0].Wert == 1 && Feld[1].Wert == 1 && Feld[2].Wert == 1 ||
       Feld[3].Wert == 1 && Feld[4].Wert == 1 && Feld[5].Wert == 1 ||
       Feld[6].Wert == 1 && Feld[7].Wert == 1 && Feld[8].Wert == 1 ||
       Feld[0].Wert == 1 && Feld[3].Wert == 1 && Feld[6].Wert == 1 ||
       Feld[1].Wert == 1 && Feld[4].Wert == 1 && Feld[7].Wert == 1 ||
       Feld[2].Wert == 1 && Feld[5].Wert == 1 && Feld[8].Wert == 1 ||
       Feld[0].Wert == 1 && Feld[4].Wert == 1 && Feld[8].Wert == 1 ||
       Feld[2].Wert == 1 && Feld[4].Wert == 1 && Feld[6].Wert == 1){
    return 1;
    }
    if(Feld[0].Wert == 2 && Feld[1].Wert == 2 && Feld[2].Wert == 2 ||
       Feld[3].Wert == 2 && Feld[4].Wert == 2 && Feld[5].Wert == 2 ||
       Feld[6].Wert == 2 && Feld[7].Wert == 2 && Feld[8].Wert == 2 ||
       Feld[0].Wert == 2 && Feld[3].Wert == 2 && Feld[6].Wert == 2 ||
       Feld[1].Wert == 2 && Feld[4].Wert == 2 && Feld[7].Wert == 2 ||
       Feld[2].Wert == 2 && Feld[5].Wert == 2 && Feld[8].Wert == 2 ||
       Feld[0].Wert == 2 && Feld[4].Wert == 2 && Feld[8].Wert == 2 ||
       Feld[2].Wert == 2 && Feld[4].Wert == 2 && Feld[6].Wert == 2){
    return 2;
    }
    else return 0;

    return 0;
}

void update(){
    for(int i=0; i<9; i++){
        if(Feld[i].Wert == 1) Feld[i].Zeichen = 'O';
        else if(Feld[i].Wert == 2) Feld[i].Zeichen = 'X';
    }
}

int FuelleFeld(char FeldZahl, int SpielerZahl)
{
    if(Feld[FeldZahl-49].Wert != 0){
        printf("Dieses Feld wurde bereits besetzt!!");
        getch();
        return 1;
    }

    if(FeldZahl == '1' || FeldZahl == '2' || FeldZahl == '3' || FeldZahl == '4' || FeldZahl == '5' ||
       FeldZahl == '6' || FeldZahl == '7' || FeldZahl == '8' || FeldZahl == '9'){
           Feld[FeldZahl-49].Wert = SpielerZahl;
           return 0;
    }
    else if(FeldZahl == '0'){
        printf("Sie haben die [0] gedrueckt, das Spiel wird beendet... \n\n\n");
        return 1;
    }
    else {
        printf("Ungueltige Eingabe!!");
        getch();
        return 1;
    }
    return 0;
}

void ZeichneSpielfeld(){
    system("cls");

    printf("\n");
    printf("  %c | %c | %c \n", Feld[0].Zeichen, Feld[1].Zeichen, Feld[2].Zeichen);
    printf(" ---|---|---\n");
    printf("  %c | %c | %c \n", Feld[3].Zeichen, Feld[4].Zeichen, Feld[5].Zeichen);
    printf(" ---|---|---\n");
    printf("  %c | %c | %c \n", Feld[6].Zeichen, Feld[7].Zeichen, Feld[8].Zeichen);
    printf("\n");
}

void LeereSpielfeld(){
    for(int i=0; i<9; i++){
        Feld[i].Wert = 0;
        Feld[i].Zeichen = ' ';
    }
}

int main()
{
    SetConsoleTitle("Tic Tac Toe");

    LeereSpielfeld();
    ZeichneSpielfeld();

    bool quit = false;
    char Eingabe;
    int Spieler = 1;

    do{
        ZeichneSpielfeld();

        printf("  Spieler %d ist an der Reihe! \n\n", Spieler);

        Eingabe = getch();

        if(FuelleFeld(Eingabe, Spieler) == 0){
            if(Spieler == 1) Spieler = 2;
            else if(Spieler == 2) Spieler = 1;
        }

        if(Gewinner() != 0){
            update();
            ZeichneSpielfeld();
            printf("Spieler %d hat gewonnen, druecken Sie eine beliebige Taste um fortzufahren...\n", Gewinner());
            printf("Druecken Sie im Spiel die [0] Taste um zu beenden");
            getch();

            LeereSpielfeld();
            Spieler = 1;
        }

        for(int i=0; i<9; i++){
            if(Feld[i].Wert == 0) break;
            if(i == 8){
                update();
                ZeichneSpielfeld();
                printf("Das Spiel endet unentschieden!");
                getch();
                LeereSpielfeld();
                Spieler = 1;
            }
        }
        if(Eingabe == '0') quit = true;

        update();
    }while(!quit);

    return 0;
}



Wie gesagt, ist recht schnell gemacht, da steckt nicht besonders viel Plan dahinter... :oops:

@drakon
Ich würde dir auch auf jeden "C++ für Spieleprogrammierer" von Heiko Kalista empfehlen.

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

25

01.09.2006, 21:02

cool...bin gespannt... :D

Eben wie gesagt, das ist ja in C geschrieben und ich habe eigentlich noch nicht vor mich weiter mit C zu beschäftigen.
Ich HABE das Buch "C++ für Spieleprogrammierer"..
und das mache ich zuerst.

und dann erst werde ich wieder anfangen "richtig" zu proggen.

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

26

01.09.2006, 21:08

C++ ist eigentlich sowas wie eine Erweiterung von C, (na gut, es zählt als eine eigene Sprache).

Es sind zum Beispiel Sachen wie Klassen und anderes dazu gekommen (Ich habe diese im Beispiel aber absichtlich nicht genommen).
Du solltest das meiste, aussert vllt. ein paar Befehle noch verstehen.
Kann aber sein dass ein paar Sachen in C auch ein wenig anders sind...

Anonymous

unregistriert

27

01.09.2006, 21:12

Viele meinen erst C und dann C++. Ich meine erst C++ und dann ein
bisschen C lernen.

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

28

01.09.2006, 21:28

Vielen Dank.
Ist recht übersichtlich gemacht und eigentlich verstehe ich auch fast alles.
Es gibt kleinigkeiten, welche ich damals in C vermisst habe, wie zmb. das Feld. Habe im ernst gedacht, dass es praktisch wäre, wenn man dies eben mit so einer for-Schleife machen könnte, habe aber nicht gewusst, dass es so etwas wie Felder gibt.

Ist ein gutes Beispiel, mit dem ich meinen Fortschritt überprüfen kann.

@babelfish: sollten die funktionen nicht alle nacheinander am schluss kommen??(nur so eine frage, keine ahnung, wie das ist.)

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

29

01.09.2006, 21:41

Zitat von »"drakon"«

Habe im ernst gedacht, dass es praktisch wäre, wenn man dies eben mit so einer for-Schleife machen könnte, habe aber nicht gewusst, dass es so etwas wie Felder gibt.


Die Felder sind einfach mehrere Variablen, (Arrays genannt)
Variable[50] ist also gleich Variable0, Variable1, Variable2, Variable3, ..., Variable49
(49, weil es bei 0 anfängt, und ich 50 Variablen deklariere)

Diese sind auch praktisch wenn man zB. ein Feld machen Möchte:

C-/C++-Quelltext

1
2
3
4
int Breite = 5;
int Hoehe = 5;

int Spielfeld[Breite][Hoehe] //Das erstellt ein 5x5 grosses Spielfeld

Das sind dann Mehrdimensionale Arrays

Zitat von »"drakon"«


@babelfish: sollten die funktionen nicht alle nacheinander am schluss kommen??(nur so eine frage, keine ahnung, wie das ist.)

Man könnte entweder zuerst einen Prototyp machen, und sie ans Ende hängen, oder eben so.

Das mit dem Prototyp funktioniert dann so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void Funktion();

int main()
{
//...

Funktion();
//...

return 0;
 }

void Funktion(){
//...

}

Das dient dazu dass der Compiler weiss dass es diese Funktion gibt, und sie dann unten sucht.

Aber das ganze sollte ja noch im Buch kommen. :)

So, wer mag jetzt meinen Code verbessern? :D

Anonymous

unregistriert

30

01.09.2006, 21:52

Ich halte nicht viel von Prototypen, man sollte die meiner Meinung nach
gleich richtig sortieren. ;)

@ babelfish: Mh, verbessern möchte ich den auch nicht unbedingt, ich
glaub ich schreib selber mal einen. ^^

Werbeanzeige