Hallo, aus Augsburg
Jeder kennt doch das Spiel:
xox
oxo
oox
… so zu sagen 3 gewinnt…
kannes möglich sein, ewigen code zu schreiben (If …)
oder wie löst man denn so was?
Danke für eure anregungen & hilfe
Hallo, aus Augsburg
Jeder kennt doch das Spiel:
xox
oxo
oox
… so zu sagen 3 gewinnt…
kannes möglich sein, ewigen code zu schreiben (If …)
oder wie löst man denn so was?
Danke für eure anregungen & hilfe
Hallo aus Hamburg 
Jeder kennt doch das Spiel:
xox
oxo
oox
… so zu sagen 3 gewinnt…
Stimmt schonmal. (Tic Tac Toe…)
kannes möglich sein, ewigen code zu schreiben (If …)
Ich weiß nicht genau, was Du mit ewigem Code meinst, aber es klingt ja sehr stark nach Rekursion (Methode/ Funktion ruft sich selbst auf…)
In welcher Sprache willst Du das denn programmieren?
Danke für eure anregungen & hilfe
…das hat Dir wahrscheinlich noch nicht geholfen…
Trotzdem viele Grüße
Till
Hallo,
Programm. in VB6,
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
bei dem kleinen Ding, das nur neun Felder hat, würde ich mit
Select Case anfangen und die sinnvollen Lösungen in Strings ablegen.
Das wird wohl ein kurzes Prigramm.
Gruß, Rainer
berichtigt mich bitte …
Hallo,
berichtigt mich bitte …
wenn der 1. anfängt soll x an seine gewünschte stelle,
der rechner ist der Gegner (2),
der sollte doch erst mal prüfen ob da scho einer ist,
wenn net soll er irgend wo ne o „bauen“, wenn der
(2) wieder dran ist, soll schauen, ob da einer ist, und sinnvoll
das 2. o bauen,
weitere durchgänge …
und wenn in einer linie ooo dann WINNER… oder so …
wenig Code ???
klein ??? Na klar klein, würde ich jetzt mein Menschärgerdichnicht hier reinstellen … würde es den Rahmen etwas sprengen,
suche nur ne IDEE…
Danke euch für eure Antworten
(der Anfänger)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
ich fand die Idee lustig und probiere gerade mal, wie lange ich dazu brauche. 
Im Moment habe ich ein Steuerelementefeld, Pictureboxen von 0-9 und die Bilden mit dem X und dem O auf der Form.
Ein Button, auf dem ‚Neu starten‘ steht und bisher den Code …
Dim i As Integer
Dim l(9) As String
Private Sub Command1\_Click()
For i = 0 To 8
Picture1.Picture = LoadPicture()
Next
l(0) = "123468"
l(1) = "0247"
l(2) = "014568"
l(3) = "0456"
l(4) = "01235678"
l(5) = "2348"
l(6) = "023478"
l(7) = "1468"
l(8) = "024567"
End Sub
Du kannst es natürlich auch kompliziert machen. 
Gruß, Rainer
PS. Jetzt gehe ich erst mal kochen, die Zeit zählt nicht.
Hallo, Udo!
Was genau hast Du vor? Willst Du wissen, wie man dieses Problem löst? Willst Du ein sinnvolles Spiel programmieren? Dass dieses Spiel nicht gewonnen werden kann, wenn nicht einer der Spieler so dumm ist, dass er nicht aus dem Bus gucken kann, ist ja nun bekannt. Demzufolge ließe sich ein Programm schreiben, welches mit der Zielvorgabe, das Spiel zu gewinnen, sich aufhängt, wenn es nicht korrekt terminiert wird.
Für mich gäbe es zwei Gründe, Tic Tac Toe zu programmieren: 1. Ich will ein Spiel schreiben: Entfällt, weil es garantiert zig tausend Downloads für umsonst dazu gibt. Da würde ich doch lieber was vernünftiges mit meiner Zeit anfangen.
Du brauchst:
Regeln: Wohin dürfen Markierungen gesetzt werden? Wann terminiert das Spiel (drei in einer Zeile, Spalte oder diagonal mit Sieg, alle Felder belegt mit Unentschieden)?
Repräsentierung der Spielwelt: z. B. Array 3x3 mit Dreifach-Markierung für jedes Feld (leer, Spieler 1, Spieler 2)
Logik: In einem einfachen Beispiel wie hier: Alle Möglichkeiten und Spiele hardvercodet ablegen. Bei der begrenzten Zahl von Möglichkeiten durchaus noch realistisch darstellbar. Alternativ: Regelwerk ausnutzen: Gibt es eine Möglichkeit, das Spiel sofort zu gewinnen? Ja: Nimm diese, nein: Hinterlasse ich eine Situation, in der der Gegner sofort gewinnen kann? Ja: Vermeide diese, versuch was anderes; nein: Zug wäre möglich. Nun könnte um der Perfektion willen dieser Algortihmus rekursiv fortgesetzt werden…
Basierend auf dieser Art könntest Du Dir das Spiel bauen…
Gruß, Manfred
HALLO;
jaja, ich versuch mich gerade mit solchem „schmarn“, wo bei ich dies nicht einmal für schmarn finde, eigendlich will ich ja no was lernen…!
Sei doch Bitte so nett, und maile mir den Code, man lernt net aus…!
Danke
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Udo,
ist doch lustig und übt. Man kann’s nicht gewinnen, deshalb bleibt’s bei der Übung. Wenn ich’s ferig habe maile ich Dir den Code gern, obwohl der hier noch gut passen würde. Wird echt nicht lang und heute noch fertig.
Gruß, Rainer
freu mich drauf 
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Udo,
Mail ist raus.
Gruß, Rainer
Hallo Manfred,
Für mich gäbe es zwei Gründe, Tic Tac Toe zu programmieren: 1.
Ich will ein Spiel schreiben: Entfällt, weil es garantiert zig
tausend Downloads für umsonst dazu gibt. Da würde ich doch
lieber was vernünftiges mit meiner Zeit anfangen.
- Ich will hinter die Logik steigen und dieses Spiel
„verstehen“, ebenso die computergestützte Umsetzung. Dazu
heißt es dann, den Lösungsalgorithmus zu entwerfen. Und da
hast Du schon die ersten Punkte geliefert.
mir fällt noch eine dritte Variante ein, einfach mal entspannen. 
So ein kleines Programm zu schreiben ist die richtige Erholung für den Sonntagnachmittag.
Gruß, Rainer
Hallo Rainer,
häng’s doch hier auch mal dran 
Danke & Grüße
CMБ
Hi,
häng’s doch hier auch mal dran
willst was zum Kritisieren haben …
OK.
Dim l(9) As String
Dim g(9, 3) As String
Private Sub Command1\_Click()
neu
End Sub
Private Sub Form\_Load()
Randomize Timer
neu
End Sub
Private Sub Picture1\_Click(Index As Integer)
If Picture1(Index).Picture Picture2.Picture And Picture1(Index).Picture Picture3.Picture Then
Picture1(Index).Picture = Picture3.Picture
DoEvents
'\*\*\*\*\* Hat der Spieler gewonnen? \*\*\*\*\*
For i = 0 To 3
If Len(g(Index, i)) \> 0 Then
If Picture1(Val(Left(g(Index, i), 1))) = Picture3.Picture And Picture1(Val(Right(g(Index, i), 1))) = Picture3.Picture Then
Label1.Caption = "Du hast gewonnen!"
Label1.Visible = True
For j = 0 To 8
Picture1(j).Enabled = False
Next
Timer1.Enabled = True
Exit Sub
End If
End If
Next
'\*\*\*\*\* Kann der Computer gewinnen? \*\*\*\*\*\*
For f = 0 To 8
If Picture1(f).Picture Picture2.Picture And Picture1(f).Picture Picture3.Picture Then
For i = 0 To 3
If Len(g(f, i)) \> 0 Then
If Picture1(Val(Left(g(f, i), 1))) = Picture2.Picture And Picture1(Val(Right(g(f, i), 1))) = Picture2.Picture Then
Picture1(f).Picture = Picture2.Picture
Label1.Caption = "Der Computer hat gewonnen!"
Label1.Visible = True
For j = 0 To 8
Picture1(j).Enabled = False
Next
Timer1.Enabled = True
Exit Sub
End If
End If
Next
End If
Next
'\*\*\*\*\* Muß ein Sieg verhindert werden? \*\*\*\*\*\*
For f = 0 To 8
If Picture1(f).Picture Picture2.Picture And Picture1(f).Picture Picture3.Picture Then
For i = 0 To 3
If Len(g(f, i)) \> 0 Then
If Picture1(Val(Left(g(f, i), 1))) = Picture3.Picture And Picture1(Val(Right(g(f, i), 1))) = Picture3.Picture Then
Picture1(f).Picture = Picture2.Picture
Exit Sub
End If
End If
Next
End If
Next
'\*\*\*\*\*\*\*\* einen sinnvollen Zug machen \*\*\*\*\*\*\*\*\*\*
m = ""
For i = 0 To 8
If Picture1(i).Picture Picture2.Picture And Picture1(i).Picture Picture3.Picture Then
m = m + Trim(Str(i))
End If
Next
If Len(m) = 0 Then
Label1.Caption = "OK, noch einmal."
Label1.Visible = True
For j = 0 To 8
Picture1(j).Enabled = False
Next
Timer1.Enabled = True
Exit Sub
End If
w = 9
If Len(l(Index)) \> 0 Then
r = Int(Rnd(1) \* Len(l(Index))) + 1
w = Val(Mid(l(Index), r, 1))
End If
If InStr(m, w) = 0 Then
r = Int(Rnd(1) \* Len(m)) + 1
w = Val(Mid(m, r, 1))
End If
If Len(m) \> 0 Then
Picture1(w).Picture = Picture2.Picture
End If
End If
End Sub
Private Sub neu()
For i = 0 To 8
Picture1(i).Picture = LoadPicture()
Next
l(0) = "123468"
l(1) = "0247"
l(2) = "014568"
l(3) = "0456"
l(4) = "01235678"
l(5) = "2348"
l(6) = "023478"
l(7) = "1468"
l(8) = "024567"
g(0, 0) = "12"
g(0, 1) = "36"
g(0, 2) = "48"
g(0, 3) = ""
g(1, 0) = "0,2"
g(1, 1) = "4,7"
g(1, 2) = ""
g(1, 3) = ""
g(2, 0) = "01"
g(2, 1) = "58"
g(2, 2) = "46"
g(2, 3) = ""
g(3, 0) = "06"
g(3, 1) = "45"
g(3, 2) = ""
g(3, 3) = ""
g(4, 0) = "08"
g(4, 1) = "17)"
g(4, 2) = "26"
g(4, 3) = "35"
g(5, 0) = "28"
g(5, 1) = "34"
g(5, 2) = ""
g(5, 3) = ""
g(6, 0) = "03"
g(6, 1) = "24"
g(6, 2) = "78"
g(6, 3) = ""
g(7, 0) = "14"
g(7, 1) = "68"
g(7, 2) = ""
g(7, 3) = ""
g(8, 0) = "04"
g(8, 1) = "25"
g(8, 2) = "67"
g(8, 3) = ""
End Sub
Private Sub Timer1\_Timer()
Timer1.Enabled = False
For i = 0 To 8
Picture1(i).Enabled = True
Next
neu
Label1.Visible = False
End Sub
Bitte nicht zu sehr prügeln. 
Gruß, Rainer
Fehlerberichtigung
Hallo,
da hat sich ein Tippfehler eingeschlichen.
g(4, 1) = „17)“ muß natürlich
g(4, 1) = „17“ heißen.
Gruß, Rainer