Пишу игру "Быки и Коровы", думаю все ее знают, но вот - правила. В коде много недоработок, но в целом все работает. Сейчас у меня есть два массива которые сравнивают элементы и выдают (пока в консоле) все совпадения, а хочется выводить всю информацию в поля Label, я недопонимаю как пользоваться гетарами и сетарами что бы правильно переносить всю информацию, помогите мне пожалуйста, хотя бы объяснением на каком-то примере как это делается. Сейчас я создал 10 Label, т.к. хочу ограничиться 10-ю ходами, ввожу число в TextField, нажимаю кнопку принять и происходит сравнение, но после нажатия, хочу, что бы прописывались быки и которы в Лейблах (ход1 потом ход2 и т.д.) Помогите пожалуйста.
Основной класс мейн
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
private Stage menu;
private BorderPane wind;
public Main() {
}
/**
* Инициализирует menuBar.
*/
public void initMenuBar() {
try {
// Загружаем корневой макет из fxml файла.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/fxml/menuBar.fxml"));
wind = loader.load();
// Отображаем сцену, содержащую корневой макет.
Scene scene = new Scene(wind);
menu.setScene(scene);
menu.show();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Загружает в корневой макет mainWindow.
*/
public void initWindow() {
try {
// Загружаем сведения об адресатах.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/fxml/window.fxml"));
AnchorPane personOverview = loader.load();
// Помещаем сведения в центр корневого макета.
wind.setCenter(personOverview);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void start(Stage primaryStage) throws Exception {
this.menu = primaryStage;
this.menu.setTitle("Быки и коровы");
initMenuBar();
initWindow();
}
public static void main(String[] args) {
launch(args);
}
}
Его контроллер
package model.ControllerClass;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import model.Data;
import model.Util;
import java.util.Arrays;
public class MainController {
private int[] enterNumber; //вводимое число
private int[] randomNumber; //загаданное число компьютером
int bulls; //число коров
int cows; //число быков
private Data data;
@FXML
private Label label1;
@FXML
private Label label2;
@FXML
private Label label3;
@FXML
private Label label4;
@FXML
private Label label5;
@FXML
private Label label6;
@FXML
private Label label7;
@FXML
private Label label8;
@FXML
private Label label9;
@FXML
private Label label10;
@FXML
private Label finishLabel;
@FXML
private Button StartGameButton;
@FXML
private Button ExitGameButton;
@FXML
private TextField enterNumberField;
@FXML
private Button enterNumberButton;
@FXML
void initialize() {
showDataDetails(null);
ExitGameButton.setOnAction(event -> {
System.exit(0);
});
enterNumberButton.setOnAction(event -> {
String number = enterNumberField.getText();
enterNumber = Arrays.stream(number.split("")).mapToInt(Integer::parseInt).toArray();
System.out.println("Массив строк - " + Arrays.toString(enterNumber));
if (randomNumber == null) {
randomNumber = Util.randInt(1234, 9876);
}
System.out.println("Рандомное число" + Arrays.toString(randomNumber));
bulls = 0;
cows = 0;
for (int i = 0; i < enterNumber.length; i++) {
for (int i2 = 0; i2 < randomNumber.length; i2++) {
if (i == i2) {
if (randomNumber[i] == enterNumber[i2]) {
bulls++;
}
} else
if (randomNumber[i] == enterNumber[i2]) {
cows++;
}
}
}
System.out.println("Быков - " + bulls);
System.out.println("Коровы - " + cows);
setData(data);
if (bulls == 4) {
System.out.println("Победа");
}
});
}
/**
* Отвечает за отображение хода игрока
* @param data
*/
private void showDataDetails(Data data) {
if (data != null) {
// Заполняем метки информацией из объекта data.
label1.setText(data.getMove1());
label2.setText(data.getMove2());
label3.setText(data.getMove3());
label4.setText(data.getMove4());
label5.setText(data.getMove5());
label6.setText(data.getMove6());
label7.setText(data.getMove7());
label8.setText(data.getMove8());
label9.setText(data.getMove9());
label10.setText(data.getMove10());
finishLabel.setText(data.getFinish());
} else {
// Если Data = null, то убираем весь текст.
label1.setText("");
label2.setText("");
label3.setText("");
label4.setText("");
label5.setText("");
label6.setText("");
label7.setText("");
label8.setText("");
label9.setText("");
label10.setText("");
finishLabel.setText("");
}
}
private void setData (Data data) {
this.data = data;
}
}
Класс в гетарами и сетарами
import javafx.beans.property.StringProperty;
public class Data {
private StringProperty move1;
private StringProperty move2;
private StringProperty move3;
private StringProperty move4;
private StringProperty move5;
private StringProperty move6;
private StringProperty move7;
private StringProperty move8;
private StringProperty move9;
private StringProperty move10;
private StringProperty finish;
public Data() {
}
public String getFinish() {
return finish.get();
}
public void setFinish(String finish) {
this.finish.set(finish);
}
public String getMove1() {
return move1.get();
}
public void setMove1(String move1) {
this.move1.set(move1);
}
public String getMove2() {
return move2.get();
}
public void setMove2(String move2) {
this.move2.set(move2);
}
public String getMove3() {
return move3.get();
}
public void setMove3(String move3) {
this.move3.set(move3);
}
public String getMove4() {
return move4.get();
}
public void setMove4(String move4) {
this.move4.set(move4);
}
public String getMove5() {
return move5.get();
}
public void setMove5(String move5) {
this.move5.set(move5);
}
public String getMove6() {
return move6.get();
}
public void setMove6(String move6) {
this.move6.set(move6);
}
public String getMove7() {
return move7.get();
}
public void setMove7(String move7) {
this.move7.set(move7);
}
public String getMove8() {
return move8.get();
}
public void setMove8(String move8) {
this.move8.set(move8);
}
public String getMove9() {
return move9.get();
}
public void setMove9(String move9) {
this.move9.set(move9);
}
public String getMove10() {
return move10.get();
}
public void setMove10(String move10) {
this.move10.set(move10);
}
}
Утилитный класс где получаю рандомное число
import java.util.Random;
public class Util {
public static int[] randInt(int min, int max) {
Random random = new Random();
int randomNum;
int [] arr;
do {
randomNum = random.nextInt((max - min) + 1) + min;
String s = Integer.toString(randomNum);
arr = new int[s.length()];
for (int i = s.length() - 1; i >= 0; i--) {
arr[i] = randomNum % 10;
randomNum /= 10;
}
} while (arr[0] == arr[1] || arr[0] == arr[2] || arr[0] == arr[3] ||
arr[1] == arr[2] || arr[1] == arr[3] || arr[2] == arr[3]);
return arr;
}
}
И FXML класс
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="model.ControllerClass.MainController">
<children>
<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="300.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<center>
<SplitPane dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" style="-fx-background-color: #FEFCE1;">
<children>
<TextField fx:id="enterNumberField" alignment="CENTER" layoutX="15.0" layoutY="85.0" prefHeight="25.0" prefWidth="171.0" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0">
<font>
<Font size="14.0" />
</font>
</TextField>
<Label alignment="CENTER" layoutX="15.0" layoutY="14.0" prefHeight="63.0" prefWidth="166.0" text="Введите четырехзначное число, символы в котором не повторяются" textAlignment="CENTER" wrapText="true" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0">
<font>
<Font size="13.0" />
</font>
</Label>
<Button fx:id="enterNumberButton" layoutX="72.0" layoutY="128.0" mnemonicParsing="false" text="Принять" AnchorPane.leftAnchor="65.0" AnchorPane.rightAnchor="65.0" />
</children></AnchorPane>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" style="-fx-background-color: E1FEF6;">
<children>
<Label fx:id="label1" layoutX="14.0" layoutY="14.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0" />
<Label fx:id="label2" layoutX="15.0" layoutY="55.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label3" layoutX="15.0" layoutY="96.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label4" layoutX="15.0" layoutY="137.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label5" layoutX="15.0" layoutY="178.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label6" layoutX="15.0" layoutY="219.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label7" layoutX="15.0" layoutY="260.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label8" layoutX="15.0" layoutY="301.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label9" layoutX="15.0" layoutY="342.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="label10" layoutX="15.0" layoutY="383.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
<Label fx:id="finishLabel" layoutX="15.0" layoutY="453.0" prefHeight="41.0" prefWidth="167.0" text="Label" wrapText="true" />
</children></AnchorPane>
</items>
</SplitPane>
</center>
<bottom>
<GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="40.0" prefWidth="600.0" BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button fx:id="StartGameButton" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Играть" />
<Button fx:id="ExitGameButton" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Выход" GridPane.columnIndex="1" />
</children>
</GridPane>
</bottom>
</BorderPane>
</children>
</AnchorPane>
FXML менюбар
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="430.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
</BorderPane>
Реализовать это можно по-разному. Можете сделать так, чтобы вся логика обрабатывалась внутри кнопки и там же вносить всё в метки.
Геттер - это метод возвращающий значение некоего свойства класса, а сеттер соответственно то что устанавливает свойство класса. Пример:
public class MyClass {
private String name; //свойство
public String getName() { //геттер
return this.name;
}
public void setName(String name) { //сеттер
this.name=name;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В JS при создании даты из получаемых извне чисел, при передаче отрицательных значений:
И везде так и требуетсяНо как быть если в одном месте мне надо что бы SVG имел тот же fill что и в документе ( там градиент поэтому задать через...
При запуске у нас есть 10 шаровКогда мы кликаем, то спауним новый шар