Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package hiekkaranta;
- import javafx.animation.AnimationTimer;
- import javafx.application.Application;
- import javafx.scene.Scene;
- import javafx.scene.canvas.Canvas;
- import javafx.scene.canvas.GraphicsContext;
- import javafx.scene.control.RadioButton;
- import javafx.scene.control.ToggleGroup;
- import javafx.scene.layout.BorderPane;
- import javafx.scene.layout.VBox;
- import javafx.scene.paint.Color;
- import javafx.stage.Stage;
- public class HiekkarantaSovellus extends Application {
- private Simulaatio simulaatio;
- @Override
- public void start(Stage ikkuna) {
- this.simulaatio = new Simulaatio(200, 200);
- Canvas piirtoalusta = new Canvas(200, 200);
- GraphicsContext piirturi = piirtoalusta.getGraphicsContext2D();
- RadioButton metalli = new RadioButton("Metalli");
- RadioButton hiekka = new RadioButton("Hiekka");
- RadioButton vesi = new RadioButton("Vesi");
- final ToggleGroup painikkeet = new ToggleGroup();
- metalli.setToggleGroup(painikkeet);
- metalli.setSelected(true);
- hiekka.setToggleGroup(painikkeet);
- vesi.setToggleGroup(painikkeet);
- VBox materiaaliValikko = new VBox();
- materiaaliValikko.getChildren().addAll(metalli, hiekka, vesi);
- BorderPane asettelu = new BorderPane();
- asettelu.setCenter(piirtoalusta);
- asettelu.setRight(materiaaliValikko);
- piirtoalusta.setOnMouseDragged((event) -> {
- if (metalli.isSelected()) {
- simulaatio.lisaa((int) event.getX(), (int) event.getY(), Tyyppi.METALLI);
- } else if (hiekka.isSelected()) {
- simulaatio.lisaa((int) event.getX(), (int) event.getY(), Tyyppi.HIEKKA);
- } else if (vesi.isSelected()) {
- simulaatio.lisaa((int) event.getX(), (int) event.getY(), Tyyppi.VESI);
- } else {
- simulaatio.lisaa((int) event.getX(), (int) event.getY(), Tyyppi.TYHJA);
- }
- });
- new AnimationTimer() {
- long edellinen = 0;
- @Override
- public void handle(long nykyhetki) {
- if (nykyhetki - edellinen < 200000000) {
- return;
- }
- simulaatio.paivita();
- }
- }.start();
- new AnimationTimer() {
- long edellinen = 0;
- @Override
- public void handle(long nykyhetki) {
- if (nykyhetki - edellinen < 100000000) {
- return;
- }
- piirturi.setFill(Color.BLACK);
- piirturi.fillRect(0, 0, 200, 200);
- for (int x = 0; x < piirtoalusta.getWidth(); x++) {
- for (int y = 0; y < piirtoalusta.getHeight(); y++) {
- if (simulaatio.sisalto(x, y) == Tyyppi.METALLI) {
- piirturi.setFill(Color.WHITE);
- } else if (simulaatio.sisalto(x, y) == Tyyppi.HIEKKA) {
- piirturi.setFill(Color.ORANGE);
- } else if (simulaatio.sisalto(x, y) == Tyyppi.VESI) {
- piirturi.setFill(Color.LIGHTBLUE);
- } else {
- piirturi.setFill(Color.BLACK);
- }
- piirturi.fillRect(x, y, 1, 1);
- }
- }
- this.edellinen = nykyhetki;
- }
- }.start();
- Scene nakyma = new Scene(asettelu);
- ikkuna.setScene(nakyma);
- ikkuna.show();
- }
- public static void main(String[] args) {
- launch(HiekkarantaSovellus.class);
- }
- }
- src/hiekkaranta/Simulaatio.java
- package hiekkaranta;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- public class Simulaatio {
- private Tyyppi[][] simulaatio;
- public Simulaatio(int leveys, int korkeus) {
- this.simulaatio = new Tyyppi[leveys][korkeus];
- int x = 0;
- while (x < simulaatio.length) {
- int y = 0;
- while (y < simulaatio[x].length) {
- simulaatio[x][y] = Tyyppi.TYHJA;
- y++;
- }
- x++;
- }
- }
- public void lisaa(int x, int y, Tyyppi tyyppi) {
- if (x >= 0 && x < this.simulaatio.length && y >= 0 && y < this.simulaatio[x].length) {
- this.simulaatio[x][y] = tyyppi;
- }
- }
- public Tyyppi sisalto(int x, int y) {
- if (x < 0 || x >= simulaatio.length || y < 0 || y >= simulaatio[x].length) {
- return Tyyppi.METALLI;
- } else if (simulaatio[x][y] == null) {
- return Tyyppi.TYHJA;
- } else {
- return simulaatio[x][y];
- }
- }
- public void paivita() {
- Random arpoja = new Random();
- List<Integer> alapuoli = new ArrayList<>();
- int x = 0;
- while (x < simulaatio.length - 1) {
- int y = 0;
- while (y < simulaatio[x].length - 1) {
- if (this.sisalto(x, y) == Tyyppi.HIEKKA) {
- if (this.sisalto(x - 1, y + 1) == Tyyppi.TYHJA || this.sisalto(x - 1, y + 1) == Tyyppi.VESI) {
- alapuoli.add(x - 1);
- }
- if (this.sisalto(x, y + 1) == Tyyppi.TYHJA || this.sisalto(x, y + 1) == Tyyppi.VESI) {
- alapuoli.add(x);
- }
- if (this.sisalto(x + 1, y + 1) == Tyyppi.TYHJA || this.sisalto(x + 1, y + 1) == Tyyppi.VESI) {
- alapuoli.add(x + 1);
- }
- if (!(alapuoli.isEmpty())) {
- int valinta = arpoja.nextInt(alapuoli.size());
- this.lisaa(x, y, Tyyppi.TYHJA);
- this.lisaa(alapuoli.get(valinta), y + 1, Tyyppi.HIEKKA);
- // if (this.sisalto(alapuoli.get(valinta) * 2, y + 1) == Tyyppi.TYHJA) {
- // this.lisaa(alapuoli.get(valinta) * 2, y + 1, Tyyppi.VESI);
- // } else if (this.sisalto(alapuoli.get(valinta) * 2, y) == Tyyppi.TYHJA) {
- // this.lisaa(alapuoli.get(valinta) * 2, y, Tyyppi.VESI);
- // }
- alapuoli.clear();
- }
- }
- // if (this.sisalto(x, y) == Tyyppi.VESI) {
- // if (this.sisalto(x - 1, y + 1) == Tyyppi.TYHJA) {
- // alapuoli.add(x - 1);
- // }
- // if (this.sisalto(x, y + 1) == Tyyppi.TYHJA) {
- // alapuoli.add(x);
- // }
- // if (this.sisalto(x + 1, y + 1) == Tyyppi.TYHJA) {
- // alapuoli.add(x + 1);
- // }
- // if (!(alapuoli.isEmpty())) {
- // int valinta = arpoja.nextInt(alapuoli.size() - 1);
- // this.lisaa(x, y, Tyyppi.TYHJA);
- // this.lisaa(alapuoli.get(valinta), y + 1, Tyyppi.HIEKKA);
- // alapuoli.clear();
- // } else {
- // if (this.sisalto(x - 1, y) == Tyyppi.TYHJA) {
- // alapuoli.add(x - 1);
- // }
- // if (this.sisalto(x + 1, y) == Tyyppi.TYHJA) {
- // alapuoli.add(x + 1);
- // }
- // if (!(alapuoli.isEmpty())) {
- // int valinta = arpoja.nextInt(alapuoli.size());
- // this.lisaa(x, y, Tyyppi.TYHJA);
- // this.lisaa(x, alapuoli.get(valinta), Tyyppi.VESI);
- // alapuoli.clear();
- // }
- // }
- // }
- y++;
- }
- x++;
- }
- }
- }
- src/hiekkaranta/Tyyppi.java
- package hiekkaranta;
- public enum Tyyppi {
- TYHJA, METALLI, HIEKKA, VESI;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement