2017-11-21 1 views
0

Ich wurde gebeten, einen Tic Tac Toe in Windows Form zu machen, und ich muss 2D-Array verwenden Ich versuche, 1 im Array für jeden zu speichern X und -1 für jede 0 dann werde ich die Werte in jeder Zeile, Spalte und Diagonale hinzufügen und überprüfen, ob es 3 oder -3C# Wie ich i und j in 2D-Array zuweisen, wenn ich auf einen Knopf drücke

das Problem ist, ich weiß nicht, wie zuweisen und i und j für jeden Element im Array nach i auf einer entsprechenden Taste

 private void storeInboard(int i, int j, object sender, EventArgs e) 
    { 
      { 
       if ((sender as Button).Text == "X") 
        board[i][j] = 1; 
       else if ((sender as Button).Text == "O") 
        board[i][j] = -1; 
      } 
    } 

hier i für jede Spalte prüfen, indem die Nummer

Angabe
private bool checkCol(int col) 
    { 
     for (int i = 0; i < 3; i++) 
     { 
      rowSum += board[i][col]; 
      if (colSum == 3 || colSum ==-3) 
       return true; 
      else 
       colSum = 0; 
     } 
     return false; 
    } 

für Gewinner Überprüfung

private bool checkWinner() 
    { 
     return (checkCol(0) || checkCol(1) || checkCol(2) || checkDiag1() || checkDiag2() || checkRow(0) || checkRow(1) || checkRow(2)); 
    } 

hier ist die Schaltfläche Click-Ereignis >> sein für alle Tasten zugeordnet ist

private void button_click(object sender, EventArgs e) 
    { 
     if (turn) 
     { 
      (sender as Button).Text = "X"; 
     } 
     else 
      (sender as Button).Text = "O"; 
     turn = !turn; 
     turnCount++; 
     (sender as Button).Enabled = false; 
     if (checkWinner() && turnCount <=9) 
      MessageBox.Show("Winner !!!"); 
     else 
      MessageBox.Show("Tie -.-"); 

so will einfach nur wissen, dass ich, wie kann ich eine i senden und j für das Ereignis storeInboard für jede Schaltfläche klicken Sie Dank im Voraus

+0

Ich bin nicht klar, wie Ihre Tasten eingerichtet sind. Hast du ein Paar für jede der 9 Positionen, oder nur eins für X und eins für O? Wenn die Ersteren ihnen dann eindeutige Namen wie X00, X01, ... X22 geben. Wenn Letzteres erforderlich ist, müssen Sie einen anderen Weg für den Benutzer einbeziehen, um die Zelle auszuwählen, in die sie ein X oder O einfügen. – juharr

+0

Ich fügte nur 9 Knöpfe hinzu, dass ihr Text in X oder O geändert werden kann. Und die Zelle wird ausgewählt, indem man auf die Taste in der GUI drückt >> ich kann die Knöpfe mit dem Array einfach nicht verbinden –

Antwort

0

Diese Frage bezieht sich nicht auf Arrays oder einige 2D-Studien ff aber verbindliche Informationen zu winform Kontrollen.

Sie haben mehrere Möglichkeiten, dies zu tun.

1) In Visual Studio-Eigenschaftenfeld Füllschaltflächen Tag-Eigenschaft mit einer Ordnungszahl von links nach rechts beginnend mit Null. Linker-oberer Knopf = 0, mittlerer-oberer = 1 und so weiter. Dann in button_click können Sie so etwas wie:

var tag = int.Parse((string)((Button)sender).Tag); 
int colIndex = tag % 3; 
int rowIndex = tag/3; 

2) Vielleicht sind die Tasten in einem Schaltschrank untergebracht. Anschließend können Sie in button_click durch die untergeordneten Elemente des übergeordneten Bedienfelds iterieren und prüfen, ob eins mit dem Absender übereinstimmt.

int c = 0; 
    foreach (var item in parentPanel.Controls) 
    { 
     if (item == sender) 
      break; 
     c++; 
    } 
    if (c<parentPanel.Controls.Count) // found 
    { 
     int colIndex = c % 3; 
     int rowIndex = c/3; 
    } 
    // else -- ugh, something went wrong, maybe not only the buttons have this event 

Viel mehr Lösung ist möglich.

Verwandte Themen