You are not logged in.

  • Login

1

Tuesday, November 24th 2009, 12:33pm

Vier gewinnt

Hallo zusammen,

ich habe in unserem Infounterricht die Aufgabe ein 4 gewinnt Spiel in java zu programmieren.
Habe es auch geschafft ein Programm zu schreiben, welches beim j-Creator unten ausgefürt wird.
Allerdings habe ich jetzt den Anreitz ales im Browser ausführen zu können.

Java 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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
public class A07_Vier_gewinnt {
 
	static String SPIELER; // der aktuelle Spielername -> f�r die Gewinner Ausgabe
 
	/**
	 * @param args -> unbenutzt
	 */
	public static void main(String[] args) {
		int columns, rows, zaehler = 0, eingabe;
		String player1, player2;
		char zeichen;
		char[][] spielfeld;
 
		//Abfragen des Spielernamens
		player1 = eingabeString("Name von SpielerIn A\t\t\t: ");
 
		do {
			player2 = eingabeString("Name von SpielerIn B\t\t\t: ");
		} while(player1.equals(player2)); //Frage erneut, wenn die Spielernamen gleich sind
 
		//Abfragen der Ma�e
		do {
			columns = eingabeInt("Breite des Spielfeldes (mindestens 4)\t: ");
		} while (columns < 4); //Frage erneut, wenn die Breite zu klein gew�hlt wurde
 
		do {
			rows = eingabeInt("Hoehe des Spielfeldes (mindestens 4)\t: ");
		} while (rows < 4); //Frage erneut, wenn die H�he zu klein gew�hlt wurde
 
		spielfeld = new char[rows][columns];
 
		while (zaehler < columns*rows) {
			zeichen = (zaehler % 2 == 0) ? 'o' : '+';
			SPIELER = (zaehler % 2 == 0) ? player1 : player2;
			showSpielfeld(spielfeld);
			eingabe = eingabeInt("\n" + SPIELER + "(" + zeichen
					+ ") ist am Zug. Bitte gib die Spalte ein: ");
			if (eingabe > columns || eingabe < 1)
				System.err.println("Feld existriert nicht.. Bitte versuch es nochmal!");
			else {
				zaehler++; // naechster Bitte
				setzeFeld(spielfeld, eingabe, zeichen);
			}
		}
		showSpielfeld(spielfeld);
		System.err.println("Unentschieden!");
	}
 
	/**
	 * @param text -> Bildschirmausgabe
	 * @return -> Tastatureingabe
	 */
	static int eingabeInt(String text) {
		System.out.print(text);
		java.util.Scanner input = new java.util.Scanner(System.in);
		return input.nextInt();
	}
 
	/**
	 * @param text -> Bildschirmausgabe
	 * @return -> Tastatureingabe
	 */
	static String eingabeString(String text) {
		System.out.print(text);
		java.util.Scanner input = new java.util.Scanner(System.in);
		return input.next();
	}
 
	/**
	 * Spalte wird �bergeben und das Feld wird gesetzt
	 * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
	 * @param column -> eingegebene Spalte
	 * @param zeichen -> jeder Spieler hat ein Zeichen (*) oder (+)
	 */
	static void setzeFeld(char[][] spielfeld, int column, char zeichen) {
		column--; // Weil der gemeine Mensch denkt, der Zahlenbereich w�rde sich von 1 bis 4 erstrecken
		int pos2check;
		if (spielfeld[0][column] != '\0')
			System.err.println("Die Reihe ist voll.. Pech!");
		else
			for (int i = 0; i < spielfeld.length; i++) { //Iteriere durch die Zeilen
				if (i + 1 == spielfeld.length) {
					// Nach der letzten Zeile kommt nichts mehr..
					// also darf in das aktuelle K�stchen geschrieben werden, obwohl im
					// n�chsten nichts steht
					pos2check = i;
					if (spielfeld[pos2check][column] == '\0') {
						spielfeld[i][column] = zeichen;
						if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
							System.out.println("Spieler mit "+zeichen+"hat gewonnen");
							System.exit(0);
						}
						break;
					}
 
				} else {
					//�berpr�fe immer das folgende Feld
					pos2check = i+1;
					if (spielfeld[pos2check][column] != '\0') {
						spielfeld[i][column] = zeichen;
						if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
							System.out.println("Spieler mit "+zeichen+"hat gewonnen");
							System.exit(0);
						}
						break;
					}
				}
			}
	}
 
	/**
	 * Sammelstelle f�r die Funktionen, die �berpr�fen ob jmd. gewonnen hat
	 * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten 
	 * @param column -> die Spalte an der das Zeichen gesetzt wurde
	 * @param row -> die Reihe an der das Zeichen gesetzt wurde
	 * @param zeichen -> das Zeichen
	 */
	static boolean IsGameOver(char[][] spielfeld, int column, int row, char zeichen) {
		boolean b1 = GameIsOver_row(spielfeld, column, row, zeichen);
		boolean b2 = GameIsOver_column(spielfeld, column, row, zeichen);
		boolean b3 = GameIsOver_straight1(spielfeld, column, row, zeichen);
		boolean b4 = GameIsOver_straight2(spielfeld, column, row, zeichen);
 
		return (b1||b2||b3||b4);
	}
 
	static boolean GameIsOver_row(char[][] spielfeld, int column, int row, char zeichen) {
		// nach links
		int go = row - 1; // mit dem Punkt links neber dem gesetzten beginne
							// ich
		int i = 1; // der gesetzte Punkt = 1 Treffer
		while (go >= 0) {
			if (spielfeld[column][go] != zeichen)
				break;
			go--;
			i++;
		}
 
		// nach rechts
		go = row + 1;
		while (go < spielfeld.length) {
			if (spielfeld[column][go] != zeichen)
				break;
			go++;
			i++;
		}
 
		return (i > 3);
	}
 
	static boolean GameIsOver_column(char[][] spielfeld, int column, int row, char zeichen) {
		// nach oben
		int go = column - 1;
		int i = 1;
		while (go >= 0) {
			if (spielfeld[go][row] != zeichen)
				break;
			go--;
			i++;
		}
 
		// nach unten
		go = column + 1;
		while (go < spielfeld.length) {
			if (spielfeld[go][row] != zeichen)
				break;
			go++;
			i++;
		}
 
		return (i > 3);
	}
 
	static boolean GameIsOver_straight1(char[][] spielfeld, int column, int row, char zeichen) {
		// nach links oben
		int go = row - 1;
		int go2 = column - 1;
		int i = 1;
		while (go >= 0 && go2 >= 0) {
			if (spielfeld[go2][go] != zeichen)
				break;
			go--;
			go2--;
			i++;
		}
 
		// nach rechts unten
		go = row + 1;
		go2 = column + 1;
		while (go < spielfeld[0].length && go2 < spielfeld.length) {
			if (spielfeld[go2][go] != zeichen)
				break;
			go++;
			go2++;
			i++;
		}
 
		return (i > 3);
	}
 
	static boolean GameIsOver_straight2(char[][] spielfeld, int column, int row, char zeichen) {
		// nach links unten
		int go = row - 1;
		int go2 = column + 1;
		int i = 1;
		while (go >= 0 && go2 < spielfeld.length) {
			if (spielfeld[go2][go] != zeichen)
				break;
			go--;
			go2++;
			i++;
		}
 
		// nach rechts oben
		go = row + 1;
		go2 = column - 1;
		while (go < spielfeld[0].length && go2 >= 0) {
			if (spielfeld[go2][go] != zeichen)
				break;
			go++;
			go2--;
			i++;
		}
 
		return (i > 3);
	}
 
	/**
	 * Bricht das Programm ab und liefert den Gewinner 
	 * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
	 */
	static void spielFertig(char[][] spielfeld) {
		showSpielfeld(spielfeld);
		System.out.println(SPIELER + " hat gewonnen\n");
		System.exit(1);
	}
 
	/**
	 * Zeigt das komplette Spielfeld auf dem Bildschirm
	 * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
	 */
	static void showSpielfeld(char[][] spielfeld) {
		StringBuffer Geruest = new StringBuffer(); 
		StringBuffer row_start = new StringBuffer(" "); // erste Zeile 1 2 3 4
		StringBuffer row_divide = new StringBuffer("|"); // Trennzeile |-----|
		StringBuffer row_end = new StringBuffer("-"); // letzte Zeile -------
 
		if (spielfeld[0].length > 9) {
			for (int i = 1; i <= spielfeld[0].length; i++)
				row_start.append((i/10==0) ? " " : i/10).append(" ");
			row_start.append("\n ");
		}
		for (int i = 1; i <= spielfeld[0].length; i++) {
			row_start.append(i%10).append(" ");
			row_divide.append((i==spielfeld[0].length)? "-|" : "--");
			row_end.append("--");
		}
		System.out.println(row_start);
		System.out.println(row_divide);
 
		for (char[] arrZeile : spielfeld) { //iteriere durch alle Zeilen
			for (char arrSpalte : arrZeile) { //iteriere durch alle Spalten
				Geruest.append("|");
				Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte);
			}
			Geruest.append("|\n");
		}
		Geruest.append(row_end).append("\n");
		System.out.println(Geruest);
	}
}


Hoffe das funktioniert ohne Probleme ^^

Hoffe ihr könnt mir dabei helfen. Meine Überlegung war das ganze mit Applet zu verwirklichen.

Danke schonmal im Voraus.

MfG andrethiemann

2

Tuesday, November 24th 2009, 1:42pm

Was verstehst du genau unter helfen?
Falls du Informationen zur Appletprogrammierung brauchst, kann ich dir http://openbook.galileocomputing.de/java…edfd41d5c869327 empfehlen.
Ansonsten stelle bitte konkrete Fragen.

3

Tuesday, November 24th 2009, 1:49pm

Also, ich habe das oben stehende Programm und möchte es, wie oben beschrieben, in einem Browser öffnen können.

Ich kenne mich mit Applets nicht aus, desswegen hatte ich gehofft hier eine antwort zu beckommen.
Ich schaue mir gleich mal deinen Link an. Danke ;-)

4

Tuesday, November 24th 2009, 3:04pm

Naja es geht nicht so sehr ohne Probleme das wir dir das hier binnen 5 Minuten machen können.
Da musst du dich schon in die Applet-Thematik einarbeiten.

So'ne Frage nebenbei: Warum sind alle Operationen bzw. Methoden bei dir static?
[klugscheiss]
Alles in die Mainmethode zu schreiben & alles als static zu deklarieren verfolgt nicht den OOP-Gedanken.
[/klugscheiss]

Bis denn :)

5

Tuesday, December 1st 2009, 9:46am

^^

Dass das nicht geht habe ich mir fast schon gedacht.

Naja, ich habe das so gemacht, da ich es nicht besser wusste :P
Ist schließlich ein Projekt das auf dem gelernten aufbaut ...
Der Rest soll ja eine Art zusatz darstellen.

Ich habe mich schon teilweise eingelesen, aber das hat mich nicht viel weitergebracht -.-

Similar threads

Social bookmarks