budders
Goto Top

Batch 4 Gewinnt.

Hallo liebes Administrator-Forum.

Ich bin gerade dabei das Spiel "4 Gewinnt" in Batch zu programmieren.

Soweit so gut, bin auch schon recht weit, nur beisse ich mir die Zähne an den Diagonalen aus, der Rest steht.

Sprich ich möchte mein Feld auswerten, ob 4 gleiche Steine in einer Diagonale liegen.

Das Feld sieht so aus:
   A B C D E F G 
 1 %a1% %b1% %c1% %d1% %e1% %f1% %g1%
 2 %a2% %b2% %c2% %d2% %e2% %f2% %g2%
 3 %a3% %b3% %c3% %d3% %e3% %f3% %g3%
 4 %a4% %b4% %c4% %d4% %e4% %f4% %g4%
 5 %a5% %b5% %c5% %d5% %e5% %f5% %g5%
 6 %a6% %b6% %c6% %d6% %e6% %f6% %g6%

Und die "Funktionen" zum auswerten der Horizontalen und Vertikalen sehen so aus:
::Horizontal
for /l %%e in (1,1,6) do (
	for %%d in (A,B,C,D,E,F,G) do (
		if !%%d%%e!==X set /a X%%e+=1 && set /a O%%e=0
		if !%%d%%e!==O set /a O%%e+=1 && set /a X%%e=0
		if "!%%d%%e!"==" " set /a O%%e=0 && set /a X%%e=0  
		if !X%%e!==4 (
			cls
			call :board
			echo Spieler 2 hat GEWONNEN! 
			pause>nul
			exit
		)
		if !O%%e!==4 (
			cls
			call :board
			echo Spieler 1 hat GEWONNEN! 
			pause>nul
			exit
		)
	)
)
::Vertikal
for %%f in (A,B,C,D,E,F,G) do (
	for /l %%g in (1,1,6) do (
		if !%%f%%g!==X set /a X%%f+=1 && set /a O%%f=0
		if !%%f%%g!==O set /a O%%f+=1 && set /a X%%g=0
		if "!%%f%%g!"==" " set /a O%%f=0 && set /a X%%g=0  
		if !X%%g!==4 (
			cls
			call :board
			echo Spieler 2 hat GEWONNEN! 
			pause>nul
			exit
		)
		if !O%%f!==4 (
			cls
			call :board
			echo Spieler 1 hat GEWONNEN! 
			pause>nul
			exit
		)
	)
)
exit/b

Habt ihr spontan eine Idee, wie ich das am besten realisieren kann?
Würde mich über jeden Gedankenanstoß freuen.

Hier ist der komplette Code, wollte nicht alles in den Thread posten.
http://pastebin.com/Lx7Hr38m

Mit freundlichsten Grüßen,
Budders/Gerrit

Content-ID: 237136

Url: https://administrator.de/contentid/237136

Ausgedruckt am: 08.11.2024 um 13:11 Uhr

Budders
Budders 05.05.2014 um 13:23:17 Uhr
Goto Top
Sollten Fragen zum Code bestehen könnt ihr natürlich gerne fragen face-smile
Ich tu mein bestes sie zu beantworten