All Classes Namespaces Files Functions Variables
RistiNollaController.java
Go to the documentation of this file.
1 package ristinolla;
2 
3 import java.net.URL;
4 import java.util.ResourceBundle;
5 
6 import fi.jyu.mit.fxgui.StringGrid;
7 import javafx.fxml.FXML;
8 import javafx.fxml.Initializable;
9 import javafx.scene.control.TextArea;
10 import javafx.scene.input.KeyCode;
11 
12 /**
13  * Yksikertaistettu risitinolla.
14  * Vuorossa oleva pelaaja näytetään otsikko-rivin 0-sarakkeessa.
15  * Alueen oikean reunaan näytetään siirtohistoria
16  * @author vesal
17  * @version 26.3.2016
18  */
19 public class RistiNollaController implements Initializable {
20  @FXML private StringGrid<Object> grid;
21  @FXML private TextArea area;
22  private int vuorossa = 0;
23  private int koko = 8;
24  private String[] merkit = {"X", "O"};
25  private String[] tyylit = {"risti", "nolla"};
26 
27 
28  @Override
29  public void initialize(URL location, ResourceBundle resources) {
30  //grid.setEmptyStyleClass("valkoinen"); // tyhjät solut valkoiseksi // voi hoitaa css:llä
31  grid.getSelectionModel().setCellSelectionEnabled(true); // yksittäinen solu voidaan valita
32  String[] headings = new String[koko+1];
33  String[] tyhja = new String[koko+1];
34  headings[0] = "";
35  for (int i=1; i<=koko; i++) headings[i] = ""+i;
36  grid.initTable(headings); // Alustetaan otsikot juoksevilla numeroilla
37  for (int i=0; i<koko+1; i++) tyhja[i] = "";
38 
39  grid.setColumnWidth(-1,30); // sarakkeet kapeammiksi
40  grid.setSortable(-1, false); // järjestäminen ei ole mielekästä
41  grid.disableColumnReOrder();
42 
43  for (int i=1; i<=koko; i++) { // lisätään rivinumero ja rivit
44  tyhja[0] = ""+i;
45  grid.add(tyhja);
46  grid.setStyleClass("otsikko", i-1, 0);
47  }
48 
49  naytaVuorossa();
50 
51  grid.setOnMouseClicked( e -> laitaMerkki() );
52  grid.setOnKeyPressed( e -> {if ( e.getCode() == KeyCode.ENTER ) laitaMerkki();});
53  }
54 
55 
56  private void laitaMerkki() {
57  int r = grid.getRowNr();
58  int c = grid.getColumnNr();
59  if ( r < 0 || c < 1 ) return; // otsikkoon ei saa klikata
60  if ( !grid.get(r, c).isEmpty() ) return; // vain tyhjään saa laittaa
61  grid.setStyleClass(tyylit[vuorossa], r, c);
62  String merkki = merkit[vuorossa];
63  grid.set(merkki, r, c);
64  area.setText(area.getText() + String.format("%s -> (%d,%d)\n", merkki, r+1, c));
65  vuorossa = (vuorossa+1) % merkit.length;
66  naytaVuorossa();
67  }
68 
69 
70  private void naytaVuorossa() {
71  grid.getColumns().get(0).setText(merkit[vuorossa]);
72  }
73 
74 }