PureGolf mit TicTacToe

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

Beitrag von NicTheQuick »

Badboy99 hat geschrieben:Wer draus nen 20 Zeiler macht bekommt Respect von mir!!!!!!!!!!!!!!!!!
1. Hör bitte mal auf mit den nervenden Ausrufezeichen. Punkte reichen
auch, aber 20 Fragezeichen sind Schreien.
2. Für 20 Zeilen hat es nicht ganz gereicht, aber es sind immerhin 36
geworden:

Code: Alles auswählen

Dim TTT.l(8)
Global FontID1, FontID2
FontID1 = LoadFont(1, "Arial", 24) : FontID2 = LoadFont(2, "Arial", 12)
Gewinn.RECT : Gewinn\left = $05430210 : Gewinn\top = $06300876 : Gewinn\right = $08520741 : Gewinn\bottom = $06420840
If OpenWindow(0, 216, 0, 190, 260,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Tic Tac Toe")
  If CreateGadgetList(WindowID())
    For a.l = 0 To 8
      ButtonGadget(a, 10 + 60 * a % 3, 10 + 60 * (a / 3), 50, 50, "") : SetGadgetFont(a, FontID1)
    Next
    ButtonGadget(9, 10, 220, 80, 30, "Neues Spiel")
    ButtonGadget(10, 100, 220, 80, 30, "Spiel Beenden")
    TextGadget(11, 10, 190, 170, 20, "X ist dran", #PB_Text_Center)
    SetGadgetFont(11, FontID2)
    Repeat
      Select WaitWindowEvent()
        Case #PB_EventCloseWindow : Break
        Case #PB_EventGadget
          EGID.l = EventGadgetID() : Select EGID
            Case 10 : Break
            Case 9 : For a = 0 To 8 : TTT(a) = 0 : SetGadgetText(a, "") : DisableGadget(a, 0) : Pl = 0 : Next
            Default
              If TTT(EGID) = 0
                Pl ! 1 : TTT(EGID) = Pl + 1 : DisableGadget(EGID, 1)
                If Pl = 0 : SetGadgetText(EGID, "O") : SetGadgetText(11, "X ist dran") : Else : SetGadgetText(EGID, "X") : SetGadgetText(11, "O ist dran") : EndIf 
                For a = 0 To 7
                  If TTT(PeekB(@Gewinn + a * 2) & $F) = Pl + 1 And TTT((PeekB(@Gewinn + a * 2) & $F0) >> 4) = Pl + 1 And TTT(PeekB(@Gewinn + a * 2 + 1)) = Pl + 1
                    If Pl = 0 : SetGadgetText(11, "O gewinnt") : Else : SetGadgetText(11, "X gewinnt") : EndIf
                    For a = 0 To 8 : DisableGadget(a, 1) : Next : Break
                  EndIf
                Next
              EndIf
          EndSelect
      EndSelect
    ForEver
  EndIf
EndIf
PS.: Den Code musst du nicht verstehen, das tun die andern
wahrscheinlich auch nicht. :wink: Wenn doch, kriegt ihr ihn ja vielleicht
noch kleiner, aber ohne dass sich optisch was dran ändert! (PureGolf lässt
grüßen) :wink:
activategadget(#GadgetID) ist falsch den da setzt es ja bloß deen fokus darauf!!!!!

was für ein befehl betätigt den Button????
Wieso willst du einen Button drücken lassen? Du musst doch nur im
Programm selbst so machen, dass der Computer gegen dich spielt. Du
brauchst keine Maus zu bewegen oder einen Klick zu simulieren.
Denk mal etwas drüber nach.
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

30 zeilen und noch ne menge gekürzt :-)

Code: Alles auswählen

Dim TTT.l(8) 
Gewinn.RECT\left = $05430210 : Gewinn\top = $06300876 : Gewinn\right = $08520741 : Gewinn\bottom = $06420840 
If CreateGadgetList(OpenWindow(0, 216, 0, 190, 260,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Tic Tac Toe") ) 
  For a.l = 0 To 8 
    ButtonGadget(a, 10 + 60 * a % 3, 10 + 60 * (a / 3), 50, 50, "") : SetGadgetFont(a, LoadFont(1, "Arial", 24)) 
  Next 
  ButtonGadget(9, 10, 220, 80, 30, "Neues Spiel") 
  ButtonGadget(10, 100, 220, 80, 30, "Spiel Beenden") 
  TextGadget(11, 10, 190, 170, 20, "X ist dran", #PB_Text_Center) 
  SetGadgetFont(11, LoadFont(2, "Arial", 12)) 
  While PeekL(PokeL(@Event, WaitWindowEvent())) <> #PB_EventCloseWindow
    If Event = #PB_EventGadget 
      Select PeekL(PokeL(@EGID, EventGadgetID()))
        Case 10 : Break 
        Case 9 : For a = 0 To 8 : TTT(a) = 0 : SetGadgetText(a, "") : DisableGadget(a, 0) : Pl = 0 : Next 
        Default
          If TTT(EGID) = 0 
            Pl ! 1 : TTT(EGID) = Pl + 1 : DisableGadget(EGID, 1) 
            SetGadgetText(EGID, ReplaceString(Str(Pl), "1", "X")) : SetGadgetText(11, GetGadgetText(EGID)+" ist dran")
            For a = 0 To 7 
              If TTT(PeekB(@Gewinn + a * 2) & $F) = Pl + 1 And TTT((PeekB(@Gewinn + a * 2) & $F0) >> 4) = Pl + 1 And TTT(PeekB(@Gewinn + a * 2 + 1)) = Pl + 1 
                SetGadgetText(11, ReplaceString(Str(Pl), "1", "X")+" gewinnt")
                For a = 0 To 8 : DisableGadget(a, 1) : Next : Break 
              EndIf 
            Next 
          EndIf
      EndSelect 
    EndIf
  Wend
EndIf
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

Beitrag von NicTheQuick »

@MLK:
Zeile 5 kann man so aber nicht lassen. Probiers am besten selbst mal aus. :wink:
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

stimmt <)
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

NicTheQuick hat geschrieben:Für 20 Zeilen hat es nicht ganz gereicht, aber es sind immerhin 36
geworden
Eigentlich sind es aufgedröselt (soviel ich weiss darf man bei PureGolf nicht mehrere Befehle in eine Zeile setzen ) 66 Zeilen!
NicTheQuick hat geschrieben: PS.: Den Code musst du nicht verstehen, das tun die andern
wahrscheinlich auch nicht
Ein wenig Überheblichkeit gefrühstückt ? :roll:

Hier 50 Zeilen (wie gesagt ohne MehrfachZeilen):

Code: Alles auswählen

Dim TTT.l(8) 
Gewinn.RECT\left = $05430210
Gewinn\top = $06300876
Gewinn\right = $08520741
Gewinn\bottom = $06420840 
If OpenWindow(0, 216, 0, 190, 260,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Tic Tac Toe") And CreateGadgetList(WindowID()) 
  SetGadgetFont(#PB_Default, LoadFont(1, "Arial", 24))
  For a.l = 0 To 8 
    ButtonGadget(a, 10 + 60 * a % 3, 10 + 60 * (a / 3), 50, 50, "")
  Next
  SetGadgetFont(#PB_Default, #PB_Default)
  ButtonGadget(9, 10, 220, 80, 30, "Neues Spiel") 
  ButtonGadget(10, 100, 220, 80, 30, "Spiel Beenden")
  SetGadgetFont(#PB_Default, LoadFont(2, "Arial", 12))
  TextGadget(11, 10, 190, 170, 20, "X ist dran", #PB_Text_Center) 
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_EventCloseWindow
      	Break 
      Case #PB_EventGadget 
        If EventGadgetID() = 10 
          Break 
        ElseIf EventGadgetID() = 9
          For a = 0 To 8
	         	TTT(a) = 0
	         	SetGadgetText(a, "")
	         	DisableGadget(a, 0)
	        Next
          Pl = 0
        Else
          If TTT(EventGadgetID()) = 0 
            Pl ! 1
            TTT(EventGadgetID()) = Pl + 1
            DisableGadget(EventGadgetID(), 1)
            SetGadgetText(EventGadgetID(), Chr(79 + Pl*9))
            SetGadgetText(11, Chr(79 + Pl*9)+ " ist dran")
            For a = 0 To 7 
              If TTT(PeekB(@Gewinn + a * 2) & $F) = Pl + 1 And TTT((PeekB(@Gewinn + a * 2) & $F0) >> 4) = Pl + 1 And TTT(PeekB(@Gewinn + a * 2 + 1)) = Pl + 1 
                SetGadgetText(11, Chr(79 + Pl*9) + " gewinnt")
                For a = 0 To 8
                	DisableGadget(a, 1)
                Next
               	Break 
              EndIf 
            Next 
          EndIf 
        EndIf
    EndSelect 
  ForEver 
EndIf
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

Beitrag von NicTheQuick »

HeX0R hat geschrieben:
NicTheQuick hat geschrieben:Für 20 Zeilen hat es nicht ganz gereicht, aber es sind immerhin 36
geworden
Eigentlich sind es aufgedröselt (soviel ich weiss darf man bei PureGolf nicht mehrere Befehle in eine Zeile setzen ) 66 Zeilen!
Das stimmt so nicht ganz. Hier sind nochmal die Regeln. Es kommt
letztendlich nur auf die einzelnen Zeichen an.
NicTheQuick hat geschrieben: PS.: Den Code musst du nicht verstehen, das tun die andern
wahrscheinlich auch nicht
Ein wenig Überheblichkeit gefrühstückt ? :roll:
Nimm's bitte nicht persönlich. Klar versteht man den Code, wenn man ihn
genauer durchliest. Das war absolut nicht überheblich gemeint, auch wenn
es vielleicht so rübergekommen ist. Dann tut es mir Leid.
Hier 50 Zeilen (wie gesagt ohne MehrfachZeilen):

Code: Alles auswählen

...blablabla...
Coole Sache. Gute Idee mit dem [c]Chr()[/c].
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

NicTheQuick hat geschrieben:Es kommt
letztendlich nur auf die einzelnen Zeichen an.
Aha!
Dann war mein Ansatz ja völlig falsch, deswegen hier eine geänderte Version (1076 Zeichen)
Is mir übrigens eben aufgefallen, dass Trim() offensichtlich meine TABS am Anfang mitzählt :freak: , hab deswegen Leerzeichen genommen.

Code: Alles auswählen

Dim T(8)
If OpenWindow(0,216,0,190,260,#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar,"Tic Tac Toe") And CreateGadgetList(WindowID())
  f=LoadFont(1,"Arial",24)
  For a=0 To 8
    ButtonGadget(a,10+60*a%3,10+60*(a/3),50,50,"")
    SetGadgetFont(a,f)
  Next
  ButtonGadget(9,10,220,80,30,"Neues Spiel")
  ButtonGadget(10,100,220,80,30,"Spiel Beenden")
  g=LoadFont(2,"Arial",12)
  TextGadget(11,10,190,170,20,"O ist dran",#PB_Text_Center)
  SetGadgetFont(11,g)
  Repeat
    Select WaitWindowEvent()
      Case #PB_EventCloseWindow
        Break
      Case #PB_EventGadget
      	O=EventGadgetID()
        If O=10
          Break
        ElseIf O=9
          For a=0 To 8
            T(a)=0
            SetGadgetText(a,"")
            DisableGadget(a,0)
          Next
          P=0
        Else
          If T(O)=0
            T(O)=P+1
            DisableGadget(O,1)
            SetGadgetText(O,Chr(79+P*9))
            SetGadgetText(11,Chr(79+P!1*9)+" ist dran")
            j=P+1
            If T(0)&T(1)&T(2)=j Or T(3)&T(4)&T(5)=j Or T(6)&T(7)&T(8)=j Or T(0)&T(3)&T(6)=j Or T(1)&T(4)&T(7)=j Or T(2)&T(5)&T(8)=j Or T(0)&T(4)&T(8)=j Or T(2)&T(4)&T(6)=j
              SetGadgetText(11,Chr(79+P*9)+" gewinnt")
              For a=0 To 8
                DisableGadget(a,1)
              Next
            EndIf
            P!1
          EndIf
        EndIf
    EndSelect
  ForEver
EndIf
NicTheQuick hat geschrieben: Nimm's bitte nicht persönlich.
Ich doch nicht :allright:

[Edit]1010 Zeichen
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ich kann auch mit mir selbst ganz gut spielen :mrgreen:

912!

Code: Alles auswählen

Dim T(8)
If OpenWindow(0,216,0,190,260,$CC0000,"Tic Tac Toe") And CreateGadgetList(WindowID())
  f=LoadFont(1,"Arial",24)
  For a=0 To 8
    ButtonGadget(a,10+60*a%3,10+60*(a/3),50,50,"")
    SetGadgetFont(a,f)
  Next
  ButtonGadget(9,10,220,80,30,"Neues Spiel")
  ButtonGadget(10,100,220,80,30,"Spiel Beenden")
  g=LoadFont(2,"Arial",12)
  TextGadget(11,10,190,170,20,"O ist dran",1)
  SetGadgetFont(11,g)
  Repeat
    Select WaitWindowEvent()
      Case 16
        Break
      Case $332C
      	O=EventGadgetID()
        If O=10
          Break
        ElseIf O=9
          For a=0 To 8
            T(a)=0
            SetGadgetText(a,"")
            DisableGadget(a,0)
          Next
          P=0
        Else
          If T(O)=0
            T(O)=P+1
            DisableGadget(O,1)
            SetGadgetText(O,Chr(79+P*9))
            SetGadgetText(11,Chr(79+P!1*9)+" ist dran")
            j=P+1
            If T(0)&T(1)&T(2)=j Or T(3)&T(4)&T(5)=j Or T(6)&T(7)&T(8)=j Or T(0)&T(3)&T(6)=j Or T(1)&T(4)&T(7)=j Or T(2)&T(5)&T(8)=j Or T(0)&T(4)&T(8)=j Or T(2)&T(4)&T(6)=j
              SetGadgetText(11,Chr(79+P*9)+" gewinnt")
              For a=0 To 8
                DisableGadget(a,1)
              Next
            EndIf
            P!1
          EndIf
        EndIf
    EndSelect
  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

Beitrag von ts-soft »

Die Konstanten in Hex :lol:
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
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

muss leider los, aber:

Code: Alles auswählen

Dim T(8) 
If CreateGadgetList(OpenWindow(0,216,0,190,260,#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar,"Tic Tac Toe")) 
  f=LoadFont(1,"Arial",24) 
  For a=0 To 8 
    ButtonGadget(a,10+60*a%3,10+60*(a/3),50,50,"") 
    SetGadgetFont(a,f) 
  Next 
  ButtonGadget(9,10,220,80,30,"Neues") 
  ButtonGadget(10,100,220,80,30,"Spiel Beenden") 
  TextGadget(11,10,190,170,20,"O ist dran",1) 
  SetGadgetFont(11,LoadFont(2,"Arial",12)) 
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_EventCloseWindow 
        Break 
      Case #PB_EventGadget 
        If O=10 
          Break 
        ElseIf O=9 
          For a=0 To 8 
            T(a)=0 
            SetGadgetText(a,"") 
            DisableGadget(a,0) 
          Next 
          P=0 
        Else 
          If T(O)=0 
            T(O)=P+1 
            DisableGadget(O,1) 
            SetGadgetText(O,Chr(79+P*9)) 
            SetGadgetText(11,Chr(79+P!1*9)+" ist dran") 
            j=P+1
            For i = 0 To 2
              x=i*3
              If T(x)&T(x+1)&T(x+2)=j Or T(i)&T(i+3)&T(i+6)=j Or T(0)&T(4)&T(8)=j Or T(2)&T(4)&T(6)=j 
                SetGadgetText(11,Chr(79+P*9)+" gewinnt")
                For a=0 To 8 
                  DisableGadget(a,1) 
                Next
              EndIf
            Next
            P!1 
          EndIf 
        EndIf 
    EndSelect 
  ForEver 
EndIf
Antworten