You are not logged in.

  • Login

1

Wednesday, January 21st 2009, 6:31pm

4 Gewinnt in der Programmiersprache C

Hallo Leute,

brauche tips für 4 Gewinnt Programmieren, Habe schon die Tabelle für 4 Gewinnt fertig, wie geht ich jetzt vor??? Hat einer ein Quell code da??? Aber nicht wie der unter easy code????

Die Tabelle für 4 Gewinnt Quell code


#include <stdio.h>
#include <stdlib.h>
#ifdef __unix__
#define clrscr() printf("\x1B[2J")
#elif __BORLANDC__ && __MSDOS__
#include <conio.h>
#elif __WIN32__ || _MSC_VER
#define clrscr() system("cls")
#else
#define clrscr() printf("clrscr() – Fehler!!\n")
#endif
#define X 'X'
#define O 'O'
#define LEER ' '
#define GAME_OVER 0
#define A_WINNER 1
#define CONTINUE 2
/* Inhalt des 7 x 6 grossen Felds */
char TicTacToe[7][6] = { {' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '} };
/* Spieler1 hat das Zeichen 'X' */
char Spieler1 = X;
/* Spieler2 hat das Zeichen 'O' */
char Spieler2 = O;
/* Anzahl der Felder, die besetzt werden können */
unsigned int felder = 42;
/* Funktionsprototypen */
void print_spielfeld(void);
char neuer_zug(char);
int if_win(void);
/* Gibt den aktuellen Zustand des Spielfelds aus */
void print_spielfeld(void) {
int i;
clrscr();

printf("\n\n\n\t\tVIER GEWINNT\n\n\n");
printf(" 1 2 3 4 5 6 7 \n +---+---+---+---+---+---+---+\n");
for(i = 0; i < 6; i++) {
printf(" %d | ",i+1);
printf("%c",[0]);
printf(" | ");
printf("%c",[i][1]);
printf(" | ");
printf("%c",[i][2]);
printf(" | ");
printf("%c",[i][3]);
printf(" | ");
printf("%c",[i][4]);
printf(" | ");
printf("%c",[i][5]);
printf(" | ");
printf("%c",[i][6]);
printf(" | ");
printf("%c",[i][7]);
printf(" \n");

if(i != 2) {
printf(" +---+---+---+---+---+---+---+\n");
}
else {
printf(" +---+---+---+---+---+---+---+\n");
}
}
}

2

Wednesday, January 21st 2009, 9:46pm

Aufgabe
Entwickeln Sie ein Programm, das „Vier gewinnt“ spielen kann. Falls Sie das Spiel nicht
kennen, finden Sie eine Beschreibung unter http://de.wikipedia.org/wiki/Vier_gewinnt.
Das Programm soll:

1. Ein interaktives Spiel ermöglichen und dabei einen der beiden Spieler ersetzen.

2. Immer nur regelkonforme Züge machen und annehmen (was nicht schwer ist, da es
immer nur max. 7 mögliche Züge gibt).

3. Das Spielfeld mit dem aktuellen Spielzustand darstellen können (einfache wiederholte
Ausgabe des Feldes in Farbe ASCII-Grafik genügt!).

4. Erkennen, wenn einer der Spieler verloren hat, d.h. vier Steine horizontal, vertikal oder
diagonal in einer Reihe liegen.

5. Eine Gewinnstrategie haben.

Kommentieren und formatieren Sie das Programm und benennen Sie die Variablen und
Funktionen gemäß der in der Vorlesung genannten Richtlinien.

3

Wednesday, January 21st 2009, 9:50pm

Du schriebst: Habe schon die Tabelle für 4 Gewinnt fertig

Wo ist dann der Quelltext :?:

4

Wednesday, January 21st 2009, 9:51pm

Habe nur die Tabelle von 4 Gewinnt

5

Wednesday, January 21st 2009, 10:25pm

Dann schreib hier mal den Quelltext von einer lauffähigen Variante deiner Tabelle.

Und nutze die CodeTags, wenn du Quelltext postest - siehe unter diesem Editor
beim schreiben -> C&C++
dann sollte der der Code übersichtlicher sein.

6

Wednesday, January 21st 2009, 10:38pm

hier ist der Code, was ich so gemacht habe, wie mache ich jetzt die KI???? würde auch gerne die schrieft farbig machen????



C/C++ Quellcode

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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* tictactoe.c in 4 Gewinnt umwandeln */
#include <stdio.h>
#include <stdlib.h>
#ifdef __unix__
#define clrscr() printf("\x1B[2J")
#elif __BORLANDC__ && __MSDOS__
#include <conio.h>
#elif __WIN32__ || _MSC_VER
#define clrscr() system("cls")
#else
#define clrscr() printf("clrscr() – Fehler!!\n")
#endif
#define X 'X'
#define O 'O'
#define LEER ' '
#define GAME_OVER 0
#define A_WINNER 1
#define CONTINUE 2
/* Inhalt des 7 x 6 grossen Felds */
char TicTacToe[7][6] = { {' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' '} };
/* Spieler1 hat das Zeichen 'X' */
char Spieler1 = X;
/* Spieler2 hat das Zeichen 'O' */
char Spieler2 = O;
/* Anzahl der Felder, die besetzt werden können */
unsigned int felder = 42;
/* Funktionsprototypen */
void print_spielfeld(void);
char neuer_zug(char);
int if_win(void);
/* Gibt den aktuellen Zustand des Spielfelds aus */
void print_spielfeld(void) {
int i;
clrscr();
 
printf("\n\n\n\t\tVIER GEWINNT\n\n\n");
printf(" 1 2 3 4 5 6 7 \n +---+---+---+---+---+---+---+\n");
for(i = 0; i < 6; i++) {
printf(" %d | ",i+1);
printf("%c",TicTacToe[i][0]);
printf(" | ");
printf("%c",TicTacToe[i][1]);
printf(" | ");
printf("%c",TicTacToe[i][2]);
printf(" | ");
printf("%c",TicTacToe[i][3]);
printf(" | ");
printf("%c",TicTacToe[i][4]);
printf(" | ");
printf("%c",TicTacToe[i][5]);
printf(" | ");
printf("%c",TicTacToe[i][6]);
printf(" | ");
printf("%c",TicTacToe[i][7]);
printf(" \n");
 
if(i != 2) {
printf(" +---+---+---+---+---+---+---+\n");
}
else {
printf(" +---+---+---+---+---+---+---+\n");
}
}
}
/* Führt einen neuen Zug aus.
* char ch: Zeichen des Spielers, der an der Reihe ist, 'X'
* oder 'O'
* Rückgabewert: Zeichen des Spielers, der eben an der Reihe war
* falls ein Feld besetzt ist, wird der Rückgabewert vertauscht,
* damit der aktuelle Spieler nochmals seinen Zug machen kann.
* Hat ein Spieler gewonnen, gibt die Funktion die
* symb. Konstante GAME_OVER zurück
*/
char neuer_zug(char ch) {
unsigned int row, colum;
printf("\n\n\tSpieler \"%c\" ist an der Reihe\n\n",ch);
printf("\n\tZeile (1–7): ");
scanf("%d",&row);
printf("\n\tSpalte (1-6): ");
scanf("%d",&colum);
if(TicTacToe[row-1][colum-1] == LEER) {
/* Zeichen in das mehrdim. Array */
TicTacToe[row-1][colum-1] = ch;
print_spielfeld();
/* Haben wir schon einen Gewinner? */
if(if_win() == A_WINNER)
return GAME_OVER;
}
else { /* Ein bereits besetztes Feld */
print_spielfeld();
printf("\n!!! Feld ist bereits gesetzt !!!\n");
return (ch == X) ?O :X;
}
/* Sind bereits alle Felder besetzt? */
if(--felder > 0)
return ch;
else {
printf("\nAlle Felder sind besetzt – Unentschieden\n");
return GAME_OVER;
}
}
/* Auswertung aller Möglichkeiten, um einen Gewinner zu ermitteln
* Rückgabewert: symb. Konstante A_WINNER falls ein Gewinner
* ermittelt wurde oder die symb. Konstante CONTINUE zum
* Weiterspielen.
*/
int if_win(void) {
/* Zuerst Spieler1 'X' */
if(TicTacToe[0][0] == Spieler1 &&
TicTacToe[0][1] == Spieler1 &&
TicTacToe[0][2] == Spieler1 ||
TicTacToe[1][0] == Spieler1 &&
TicTacToe[1][1] == Spieler1 &&
TicTacToe[1][2] == Spieler1 ||
TicTacToe[2][0] == Spieler1 &&
TicTacToe[2][1] == Spieler1 &&
TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 &&
TicTacToe[1][0] == Spieler1 &&
TicTacToe[2][0] == Spieler1 ||
TicTacToe[0][1] == Spieler1 &&
TicTacToe[1][1] == Spieler1 &&
TicTacToe[2][1] == Spieler1 ||
TicTacToe[0][2] == Spieler1 &&
TicTacToe[1][2] == Spieler1 &&
TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 &&
TicTacToe[1][1] == Spieler1 &&
TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][2] == Spieler1 &&
TicTacToe[1][1] == Spieler1 &&
TicTacToe[2][0] == Spieler1) {
printf("Spieler1 hat gewonnen\n");
return A_WINNER;
}
/* Jetzt Spieler2 'O' */
else if( TicTacToe[0][0] == Spieler2 &&
TicTacToe[0][1] == Spieler2 &&
TicTacToe[0][2] == Spieler2 ||
TicTacToe[1][0] == Spieler2 &&
TicTacToe[1][1] == Spieler2 &&
TicTacToe[1][2] == Spieler2 ||
TicTacToe[2][0] == Spieler2 &&
TicTacToe[2][1] == Spieler2 &&
TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 &&
TicTacToe[1][0] == Spieler2 &&
TicTacToe[2][0] == Spieler2 ||
TicTacToe[0][1] == Spieler2 &&
TicTacToe[1][1] == Spieler2 &&
TicTacToe[2][1] == Spieler2 ||
TicTacToe[0][2] == Spieler2 &&
TicTacToe[1][2] == Spieler2 &&
TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 &&
TicTacToe[1][1] == Spieler2 &&
TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][2] == Spieler2 &&
TicTacToe[1][1] == Spieler2 &&
TicTacToe[2][0] == Spieler2) {
printf("Spieler2 hat gewonnen\n");
return A_WINNER;
}
return CONTINUE;
}
int main(void) {
char check = X;
/* Leeres Spielfeld ausgeben */
print_spielfeld();
do { /* War Spieler mit dem Zeichen 'X' gerade dran ... */
/* ... dann ist jetzt Spieler mit dem Zeichen 'O' dran */
if(check==X) {
check=neuer_zug(O);
}
else { /* ... ansonsten der Spieler mit dem Zeichen 'X' */
check=neuer_zug(X);
}
} while( check != GAME_OVER );
return EXIT_SUCCESS;
}

[/i][/i][/i][/i][/i][/i][/i][/i]

7

Wednesday, January 21st 2009, 10:43pm

Welcher Compiler kann denn aus deinem Code eine xyz.exe bilden, die das macht was du möchtest :?:

8

Wednesday, January 21st 2009, 10:47pm

Mit Bloodshed Dev-C++

9

Wednesday, January 21st 2009, 11:14pm

Da hast du Quellcode gefunden.

Die Spaltennamen musst du noch anpassen.

Dann deine KI:
Kannst du bei "4 gewinnt" die Spielsteine beliebig plazieren?
Ergänzen, das es wie beim Original funktioniert-
dann hast du den 1.Schritt der KI

Warum benutzt du keine Codetags?

10

Wednesday, January 21st 2009, 11:26pm

Habs jetzt mal editiert und die Code-Tags eingefügt. Wieso hast du da so komische #defines in deinem Quellcode, die passen gar nicht zu Bloodshed DevC++. Naja kompilieren kann er das wohl trotzdem.

11

Wednesday, January 21st 2009, 11:47pm

Das mit den #defines, wie in Zeile 13 bis 18, war vor Jahren mal in Mode.
In aktuellen Sourcen sollte es in dieser Form eigentlich nicht notwendig sein.

Bloodshed DevC hat ja den MinGW als Compiler, der ja aus dem Linux kam.
Deswegen die compilerspezifischen #defines, Zeile 4 bis 12, für die verschiedenen Compiler.
Wahrscheinlich stammt der Code aus der Win95 oder spätestens Win98-Zeit.

die

C/C++ Quellcode

1
2
3
4
void print_spielfeld(void)
{
 
}

solltest du mindestens 1/3 kürzer schreiben da du einige Redundanzen drin hast
und was soll das if gegen Ende?

Die Auswertung musst du ja eh noch anpassen.

This post has been edited 1 times, last edit by "bcc-fan" (Jan 22nd 2009, 12:15am)


12

Thursday, January 22nd 2009, 12:35am

Hat jemand von euch ein Quellcode von 4 Gewinnt???????????

13

Thursday, January 22nd 2009, 9:47am

Zitat 1. Beitrag Bits: Aber nicht wie der unter easy code????
Troll oder drunken: Hat jemand von euch ein Quellcode von 4 Gewinnt???????????

Bits
bist du da eingeschrieben:
http://www.bits-iserlohn.de/
dann solltest du vielleicht einen Ghostwriter beschäftigen ;)

Zum Quelltext:

http://www.c-plusplus.de/forum/viewtopic…-is-231779.html
http://www.c-plusplus.de/forum/viewtopic…-is-232317.html

Meine Kommentare waren dazu gedacht, das du den Quelltext den
du hier bisher gepostet hast anpasst. Als Basis waren TicTacToe
doch brauchbar.

Du musst auch ein wenig selbst investieren, Zeit und Gehirnzellen.

14

Thursday, January 22nd 2009, 2:05pm

Kein Meister, ist vom Himmel gefallen ;-)

15

Monday, January 26th 2009, 3:12pm

kein Meister hat einfach fremden Quellcode genommen ohne zu denken

Similar threads

Social bookmarks