Gambas: Spiele: Sprint2 Form1.class

tb[8,8] 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
  DIM m AS Integer

  'Die TextBoxen erzeugen
  FOR n = 0 TO 7
    FOR m = 0 TO 7
      tb[n,m] = NEW TextBox(ME) AS "tb"
      tb[n,m].Tag = [n,m]
      tb[n,m].Alignment = Align.Center
      tb[n,m].Move( 20 + 40 * (n MOD 8), 20 + 40 * (m MOD 8), 40, 40 )
    NEXT
  NEXT
  
  'Überflüssige TextBoxen wieder entfernen
  FOR n = 2 TO 7
    tb[n,0].Delete
    tb[n,0] = NULL
    tb[7,n].Delete
    tb[7,n] = NULL
  NEXT
  FOR n = 0 TO 5
    tb[0,n].Delete
    tb[0,n] = NULL
    tb[n,7].Delete
    tb[n,7] = NULL
  NEXT
  
  Button1.Move( 370, 20, 200, 32 )
  Button1.Text = "Spielregeln"
  Button2.Move( 370, 80, 200, 32 )
  Button2.Text = "Fragen zum Spiel"
  Button3.Move( 370, 140, 200, 32 )
  Button3.Text = "Neues Spiel"
  Button4.Move( 370, 420, 200, 32 )
  Button4.Text = "Schließen"
  TextBox1.Move( 20, 370, 300, 32 )
  TextBox2.Move( 20, 420, 300, 32 )

  ME.TEXT = "Sprint, wer setzt den letzten Stein. Ein Spiel für 2"
  ME.Border = Window.Resizable
  ME.Width = 600
  ME.Height = 480
  ME.Border = Window.Fixed
  ME.Center
  Button3_Click
END

PUBLIC SUB tb_DblClick()
  DIM a AS Integer
  DIM n AS Integer
  DIM m AS Integer
  DIM o AS Integer
  DIM p AS Integer
  n = LAST.Tag[0]
  m = LAST.Tag[1]

  'Spiel bereits gewonnen
  IF sSpieler = "G" THEN RETURN

  'Feld schon belegt
  IF tb[n,m].Text <> "" THEN
    TextBox1.Text = "Schon belegt!"
    RETURN
  END IF
  
  'Felder markieren
  tb[n,m].Text = sSpieler
  IF sSpieler = "X" THEN
    tb[n,m].Background = &H00FF00&
  ELSE
    tb[n,m].Background = &HFF0000&
  END IF
  FOR o = Max( 0, n - 1) TO Min( n + 1, 7 )
    FOR p = Max( 0, m - 1) TO Min( m + 1, 7 )
      IF tb[o,p] <> NULL THEN
        IF tb[o,p].Text = "" THEN
          tb[o,p].Text = "B"
          tb[o,p].Background = &HFFFF00&
          IF sSpieler = "X" THEN
            tb[o,p].Background = &HDDFF00&
          ELSE
            tb[o,p].Background = &HFFDD00&
          END IF
        END IF
      END IF
    NEXT
  NEXT
  
  'Jemand gewonnen?
  a = 0
  FOR o = 0 TO 7
    FOR p = 0 TO 7
      IF tb[o,p] <> NULL THEN
        IF tb[o,p].Text <> "" THEN INC a
      END IF
    NEXT
  NEXT
  
  'Wenn jemand gewonnen hat
  IF a = 40 THEN
    TextBox1.Text = sSpieler & " hat gewonnen"
    sSpieler = "G"
  END IF
  
  '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
  IF iAnz = 1 THEN
    TextBox2.Text = "1 Zug gespielt"
  ELSE
    TextBox2.Text = Str(iAnz) & " Züge gespielt"
  END IF
END

PUBLIC SUB Button1_Click()
  DIM msg AS String
  msg = "Sprint: Spielregeln\n\n"
  msg = msg & "Mit der Maus markiert der erste Spieler ein freies Feld.\n"
  msg = msg & "Das Feld wird mit X gekennzeichnet.\n"
  msg = msg & "Die benachbarten Felder werden automatisch mit B belegt.\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 das letzte Zeichen einsetzen kann."
  Message(msg) 
END

PUBLIC SUB Button2_Click() 
  DIM msg AS String
  msg = "Fragen zum Spiel\n\n"
  msg = msg & "Gibt es ein Spiel mit weniger als 8 Zügen?\n"
  msg = msg & "Gibt es ein Spiel mit mehr als 13 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"
  msg = msg & "Antworten per email an: rho54@gmx.de"
  Message(msg) 
END

PUBLIC SUB Button3_Click()
  'neues Spiel, alle Textfelder werden gelöscht, Zahl der Spielzüge auf Null gesetzt
  DIM o AS Integer
  DIM p AS Integer
  FOR o = 0 TO 7
    FOR p = 0 TO 7
      IF tb[o,p] <> NULL THEN
        tb[o,p].Text = ""
        tb[o,p].Background = &HFFFFFF&
      END IF
    NEXT
  NEXT
  iAnz = 0
  sSpieler = "X"
  TextBox1.Text = "Am Zug ist X"
  TextBox2.Text = "0 Züge gespielt"
END

PUBLIC SUB Button4_Click()
  ME.Close
END