Gambas: Spiele: TicTacToe2 Form1.class

tb[9] AS TextBox
PUBLIC iAnz AS Integer 'Zahl der Züge
PUBLIC sSpieler AS String 'Wer ist am Zug O oder X

PUBLIC SUB Form_Open()
  DIM n AS Integer

  'Die neun TextBoxen erzeugen
  FOR n = 0 TO 8
    tb[n] = NEW TextBox(ME) AS "tb"
    tb[n].Tag = n
    tb[n].Alignment = Align.Center
    tb[n].Move( 20 + 40 * (n MOD 3), 20 + 40 * ((n - n MOD 3)/3), 40, 40 )
  NEXT

  Button1.Move( 250, 20, 200, 32 )
  Button1.Text = "Neues Spiel"
  Button2.Move( 250, 80, 200, 32 )
  Button2.Text = "Spielregeln"
  Button3.Move( 250, 140, 200, 32 )
  Button3.Text = "Fragen zum Spiel"
  Button4.Move( 250, 220, 200, 32 )
  Button4.Text = "Schließen"
  TextBox1.Move( 20, 160, 200, 32 )
  TextBox2.Move( 20, 220, 200, 32 )

  ME.Text = "Tic Tac Toe V 2.0"
  ME.Border = Window.Resizable
  ME.Width = 470
  ME.Height = 280
  ME.Border = Window.Fixed
  ME.Center
  Button1_Click
END

PUBLIC SUB tb_DblClick()
  DIM a AS Integer[]
  DIM n AS Integer
  n = LAST.Tag
  
  'Spiel bereits gewonnen
  IF sSpieler = "G" THEN RETURN

  'Feld schon belegt
  IF tb[n].Text <> "" THEN
    TextBox1.Text = "Schon belegt!"
    RETURN
  END IF
  
  tb[n].Text = sSpieler

  'Jemand gewonnen?
  FOR EACH a IN [ [0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6] ]
    IF ( tb[a[0]].Text = sSpieler AND tb[a[1]].Text = sSpieler AND tb[a[2]].Text = sSpieler ) THEN
      TextBox1.Text = sSpieler & " hat gewonnen"
      tb[a[0]].Background = &H00FF00&
      tb[a[1]].Background = &H00FF00&
      tb[a[2]].Background = &H00FF00&
      sSpieler = "G"
    END IF
  NEXT
  
  'Spieler wechseln
  IF sSpieler = "X" THEN
    sSpieler = "O"
    TextBox1.Text = "Am Zug ist O"
  ELSE IF sSpieler = "O" THEN
    sSpieler = "X"
    TextBox1.Text = "Am Zug ist X"
  END IF
  
  INC iAnz
  TextBox2.Text = "Zug " & Str(iAnz)
END

PUBLIC SUB Button1_Click()
  'neues Spiel, alle Textfelder werden gelöscht, Zahl der Spielzüge auf Null gesetzt
  DIM n AS Integer
  FOR n = 0 TO 8
    tb[n].Text = ""
    tb[n].Background = &HFFFFFF&
  NEXT
  iAnz = 0
  sSpieler = "X"
  TextBox1.Text = "Am Zug ist X"
  TextBox2.Text = "Zug 0"
  tb[4].SetFocus
END

PUBLIC SUB Button2_Click()
  DIM msg AS String
  msg = "Sprint: Spielregeln\n"
  msg = msg & "Mit der Maus (Doppelklick!) markiert der erste Spieler ein freies Feld.\n"
  msg = msg & "Das Feld wird mit X gekennzeichnet.\n"
  msg = msg & "Danach ist der Spielpartner dran.\n"
  msg = msg & "Er bekommt O zugeordnet und klickt ein freies Feld an.\n"
  msg = msg & "Gesetzt wird abwechselnd.\n"
  msg = msg & "Sieger ist, wer drei gleiche Zeichen in einer Reihe setzen kann."
  Message(msg)
END

PUBLIC SUB Button3_Click()
  DIM msg AS String
  msg = "Fragen zum Spiel\n"
  msg = msg & "Gibt es ein Spiel mit weniger als 5 Zügen?\n"
  msg = msg & "Gibt es ein Spiel mit mehr als 9 Zügen?\n"
  msg = msg & "Gibt es für den Spieler, der beginnen darf,\n"
  msg = msg & "eine optimale Gewinnstrategie?\n"
  msg = msg & "Wo wurde dieses Spiel das erste Mal gespielt?\n"
  msg = msg & "Wo wurde dieses Spiel das erste Mal beschrieben?\n"
  Message(msg)
END

PUBLIC SUB Button4_Click()
  ME.Close 
END