Wäre es nicht mal wieder an der Zeit...

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von NicTheQuick »

Was haltet ihr davon? Aber bevor es los geht, könnten wir noch darüber diskutieren, ob nicht vielleicht statt "-", "+" und "|" nicht doch besser andere schöne ASCII-Zeichen von Nöten wären. Ich bin gerade nur zu faul die heraus zu suchen.

Steuerung über W, A, S, D für den Cursor, Leertaste zum Setzen und Q zum Beenden.

Mir ist sonst grad nichts besseres für PureGolf eingefallen.

Regeln wie gehabt:
1. EnableExplicit muss bleiben.
2. Von außen her muss alles exakt gleich aussehen und reagieren.
3. Die Summe der Längen aller Zeilen nach Anwenden von Trim() sind ausschlaggebend.
4. Ich glaub sonst gab's nix.

Code: Alles auswählen

EnableExplicit

Enumeration
	#Empty
	#Circle
	#Cross
EndEnumeration

Dim Field(2, 2)

Procedure drawField(Array Field.i(2), curRow.i, curCol.i, lastAction.i, winner.i, curPlayer.i)
	Protected row.i, col.i, s.s
	ClearConsole()
	ConsoleLocate(1, 1)
	ConsoleColor(7, 0)
	PrintN("   |   |")
	PrintN("   |   |")
	PrintN("   |   |")
	PrintN("---+---+---")
	PrintN("   |   |")
	PrintN("   |   |")
	PrintN("   |   |")
	PrintN("---+---+---")
	PrintN("   |   |")
	PrintN("   |   |")
	PrintN("   |   |")
	
	If ((ElapsedMilliseconds() - lastAction) / 500) % 2 = 0 And winner = -1
		If Field(curRow, curCol) <> #Empty
			ConsoleColor(4, 0)
		EndIf
		ConsoleLocate(curCol * 4 + 1, curRow * 4 + 1)
		Print("---")
		ConsoleLocate(curCol * 4 + 1, curRow * 4 + 2)
		Print("| |")
		ConsoleLocate(curCol * 4 + 1, curRow * 4 + 3)
		Print("---")
	EndIf
	
	ConsoleColor(15, 0)
	
	For row = 0 To 2
		For col = 0 To 2
			ConsoleLocate(col * 4 + 2, row * 4 + 2)
			Select Field(row, col)
				Case #Circle
					Print("O")
				Case #Cross
					Print("X")
			EndSelect
		Next
	Next
	
	ConsoleLocate(13, 2)
	If winner <> -1
		If winner = #Circle
			s = "O"
		ElseIf winner = #Cross
			s = "X"
		EndIf
		Print(s + " hat gewonnen!")
		ConsoleLocate(13, 3)
		Print("Nochmal? (J/N)")
	Else
		If curPlayer = 0
			s = "O"
		ElseIf curPlayer = 1
			s = "X"
		EndIf
		Print(s + " ist am Zug.")
	EndIf
EndProcedure

Procedure resetField(Array Field.i(2))
	Protected row.i, col.i
	For row = 0 To 2
		For col = 0 To 2
			Field(row, col) = #Empty
		Next
	Next
EndProcedure

Procedure checkWin(Array Field.i(2))
	Protected content.i, row.i, col.i
	
	For row = 0 To 2
		content = Field(row, 0)
		If Field(row, 1) = content And Field(row, 2) = content And content <> #Empty
			ProcedureReturn content
		EndIf
	Next
	For col = 0 To 2
		content = Field(0, col)
		If Field(1, col) = content And Field(2, col) = content And content <> #Empty
			ProcedureReturn content
		EndIf
	Next
	content = Field(0, 0)
	If Field(1, 1) = content And Field(2, 2) = content And content <> #Empty
		ProcedureReturn content
	EndIf
	content = Field(2, 0)
	If Field(1, 1) = content And Field(0, 2) = content And content <> #Empty
		ProcedureReturn content
	EndIf
	
	ProcedureReturn -1
EndProcedure

Define curCol.i = 0, curRow.i = 0
Define input.s
Define curPlayer.i = 0
Define lastAction.i = ElapsedMilliseconds()
Define winner.i

If OpenConsole()
	EnableGraphicalConsole(1)
	ConsoleCursor(0)
	
	resetField(Field())
	
	Repeat
		drawField(Field(), curRow, curCol, lastAction, winner, curPlayer)
		Delay(50)
		input.s = Inkey()
		If input
			lastAction = ElapsedMilliseconds()
		EndIf
		winner = checkWin(Field())
		If winner = -1
			Select input
				Case "q"
					Break
				Case " "
					If Field(curRow, curCol) = #Empty
						If curPlayer = 0
							Field(curRow, curCol) = #Circle
							curPlayer = 1
						Else
							Field(curRow, curCol) = #Cross
							curPlayer = 0
						EndIf
					EndIf
				Case "w"
					curRow = (curRow + 2) % 3
				Case "a"
					curCol = (curCol + 2) % 3
				Case "s"
					curRow = (curRow + 1) % 3
				Case "d"
					curCol = (curCol + 1) % 3
			EndSelect
		Else
			Select input
				Case "n"
					Break
				Case "j"
					resetField(Field())
					curPlayer = 0
			EndSelect
		EndIf
	ForEver
EndIf
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von ts-soft »

Wie wäre es, wenn wir den Initial-Source ganz weglassen, stattdessen eine sehr genaue Beschreibung, was
Pflicht ist. Sollte bei Tic Tac To ja nicht so viel sein. So kann man den Source des Vorposters nutzen, oder
was ganz eigenes Erstellen. Dann wird sich zum Schluß rausstellen, welche GUI, Console, Window oder Screen usw.
am effektivsten ist.

Nur so als Vorschlag, damit das ganze mehr Pepp hat :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von STARGÅTE »

Also ich weiß nicht.
Ich finde eigentlich alles schlecht, was man selbst "ausprobieren" muss.
Damit meine ich, in muss bei TicTacToe immer selber alle möglichen variationen testen, um festzustelen ob meine Kürzung legal war oder nicht.
Es wäre viel einfacher wenn die Aufgabe statisch ist und nur Zeichenkette oder einem Bild besteht.
So kann das Resultat immer exakt zu 100% verglichen werden und falscher Code eindeutig rausgeschmissen werden.

Natürlich sollte dann die Ausgabe in der Datenmenge (länge des Strings, größe des Bild) größer sein, als der Code selbst, sonst kann man die Ausgabe ja einfach ausgeben ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von CSHW89 »

Nur ne Idee: Wie wäre es denn mit der Permutation eines Strings. Ab der Länge 5 (120 Strings á 5 Zeichen) sollte auch die Bedingung von Stargate, Lösung nicht einfach eintippen zu können, erfüllt sein. Außerdem kann man die Korrektheit leicht ablesen, und mögliche Lösungswege gibt es auch ein paar.

lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von NicTheQuick »

CSHW89 hat geschrieben:Nur ne Idee: Wie wäre es denn mit der Permutation eines Strings.
Die Sache ist eben ziemlich einfach und ist nach kurzer Zeit schon sehr klein auf das Wesentliche zu kürzen. Es sollte vielleicht schon einen Tick komplexer sein als Kombinatorik oder Fraktalerzeugung. Aber ich bin da auch nicht gerade kreativ.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von NicTheQuick »

NicTheQuick hat geschrieben:
7x7 hat geschrieben:
c4s hat geschrieben:@7x7
Trotzdem wird doch kein größeres Array benötigt?! Bitte erklären. :o
Eigentlich...hast Recht! :mrgreen:

Hatte nämlich in einer früheren Phase auch schon mal diesen Gedanken, aber wieder verworfen aus o.g.Gründen. Hatte
aber nicht überrissen, dass der Brainfuck-Code davon gar nicht tangiert wird.

Also, wenn sonst niemand Einwände hat, passt's :D
Ich hab einen Einwand. Natürlich kann man einen Brainfuck-Code mit Schleifen schreiben, der auf mehr Speicherzellen zugreift als er lang ist. Es muss nur > öfter aufgerufen werden als der Code lang ist. Dafür habe ich nur gerade keinen Code da.
Hier übrigens ein Brainfuck-Code der so viele Zellen braucht wie das Zeichen als ASCII-Code hat, das man am Anfang eingegeben hat.

Code: Alles auswählen

,-[>[-]<[>+<-]>.-]
:wink:

Oder ohne Eingabe:

Code: Alles auswählen

-[>[-]<[>+<-]>.-]
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von RSBasic »

Wie siehts denn jetzt aus? Gibt es keine weiteren Spiele mehr?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von ts-soft »

RSBasic hat geschrieben:Wie siehts denn jetzt aus? Gibt es keine weiteren Spiele mehr?
Naja, wenn dann richtig :mrgreen:
Also Regeln erstellen, Juroren festlegen, Sponsoren finden usw.

Hau rein und warte nicht, bis sich hier jemand einig ist, das wird nie geschehen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von 7x7 »

Ich mache mit 8)

Vielleicht irgendwie zur EM passend ein Fussballthema (bots)? Wäre schon cool, 2x 11 bots den ball ins tor treiben lassen... :bounce:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Wäre es nicht mal wieder an der Zeit...

Beitrag von WPö »

7x7 hat geschrieben:Vielleicht irgendwie zur EM passend ein Fussballthema (bots)? Wäre schon cool, 2x 11 bots den ball ins tor treiben lassen...
Klar, und Du sitzt auf der Ersatzbank und schaust zu. :lol:

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Antworten