From ce16ba54360f92efced6b6f7053dfedb0e9e9f8c Mon Sep 17 00:00:00 2001 From: teahyuk Date: Sat, 1 Dec 2018 03:58:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=B0=EC=84=B1=EB=B9=84=202=EC=B0=A8?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20=EC=99=84=EB=A3=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...n__com_github_javafaker_javafaker_0_16.xml | 13 - ...Maven__com_github_mifmif_generex_1_0_2.xml | 13 - ...n__dk_brics_automaton_automaton_1_11_8.xml | 13 - ...ven__io_reactivex_rxjava2_rxjava_2_2_4.xml | 13 + .../Maven__io_reactivex_rxjava_1_3_8.xml | 13 - ...__org_apache_commons_commons_lang3_3_5.xml | 13 - ...reactivestreams_reactive_streams_1_0_2.xml | 13 + ...Maven__org_yaml_snakeyaml_android_1_20.xml | 13 - teahyuk/Ssansungvy/.idea/workspace.xml | 448 +++++++++++++----- teahyuk/Ssansungvy/Ssansungvy.iml | 8 +- teahyuk/Ssansungvy/pom.xml | 11 +- .../main/java/controller/BoardController.java | 104 +++- .../main/java/controller/MainPresenter.java | 5 +- .../src/main/java/model/SentenceMaker.java | 53 ++- .../src/main/java/model/SentencesManager.java | 45 +- .../src/main/java/model/vo/GameLevel.java | 78 +++ .../Ssansungvy/src/main/resources/board.fxml | 51 +- .../Ssansungvy/src/main/resources/texts.csv | 1 + teahyuk/Ssansungvy/target/classes/board.fxml | 51 +- .../classes/controller/BoardController.class | Bin 8351 -> 10072 bytes .../classes/controller/MainPresenter.class | Bin 2806 -> 2790 bytes .../target/classes/model/SentenceMaker.class | Bin 2140 -> 4549 bytes .../classes/model/SentencesManager.class | Bin 5797 -> 6522 bytes .../target/classes/model/vo/GameLevel.class | Bin 0 -> 1971 bytes teahyuk/Ssansungvy/target/classes/texts.csv | 1 + 25 files changed, 713 insertions(+), 247 deletions(-) delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_javafaker_javafaker_0_16.xml delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_mifmif_generex_1_0_2.xml delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__dk_brics_automaton_automaton_1_11_8.xml create mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava2_rxjava_2_2_4.xml delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml create mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml delete mode 100644 teahyuk/Ssansungvy/.idea/libraries/Maven__org_yaml_snakeyaml_android_1_20.xml create mode 100644 teahyuk/Ssansungvy/src/main/java/model/vo/GameLevel.java create mode 100644 teahyuk/Ssansungvy/src/main/resources/texts.csv create mode 100644 teahyuk/Ssansungvy/target/classes/model/vo/GameLevel.class create mode 100644 teahyuk/Ssansungvy/target/classes/texts.csv diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_javafaker_javafaker_0_16.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_javafaker_javafaker_0_16.xml deleted file mode 100644 index f7528ba..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_javafaker_javafaker_0_16.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_mifmif_generex_1_0_2.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_mifmif_generex_1_0_2.xml deleted file mode 100644 index aff8216..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__com_github_mifmif_generex_1_0_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__dk_brics_automaton_automaton_1_11_8.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__dk_brics_automaton_automaton_1_11_8.xml deleted file mode 100644 index 40327c1..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__dk_brics_automaton_automaton_1_11_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava2_rxjava_2_2_4.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava2_rxjava_2_2_4.xml new file mode 100644 index 0000000..19a0513 --- /dev/null +++ b/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava2_rxjava_2_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml deleted file mode 100644 index cda742b..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml deleted file mode 100644 index 666266c..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml new file mode 100644 index 0000000..457c7b7 --- /dev/null +++ b/teahyuk/Ssansungvy/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/libraries/Maven__org_yaml_snakeyaml_android_1_20.xml b/teahyuk/Ssansungvy/.idea/libraries/Maven__org_yaml_snakeyaml_android_1_20.xml deleted file mode 100644 index ddcca87..0000000 --- a/teahyuk/Ssansungvy/.idea/libraries/Maven__org_yaml_snakeyaml_android_1_20.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/teahyuk/Ssansungvy/.idea/workspace.xml b/teahyuk/Ssansungvy/.idea/workspace.xml index 8754b7a..438241d 100644 --- a/teahyuk/Ssansungvy/.idea/workspace.xml +++ b/teahyuk/Ssansungvy/.idea/workspace.xml @@ -2,39 +2,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -91,44 +79,49 @@ - + - + + - - + + + - - - + + + - - - + + + - - - + + + + - - - + + + + + @@ -140,10 +133,15 @@ - + - - + + + + + + + @@ -151,26 +149,92 @@ - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + @@ -187,14 +251,23 @@ - gameOver This Side of Paradise pane asOb random sentencesManager replaceSentenceIdx + , + removeSentence + GridPane.columnIndex="0" + gameOver + startRaining + restart + makeSentenceDisposable + + ,\nrrr + @@ -219,10 +292,8 @@ @@ -248,14 +323,29 @@ - + + + + + + + + + + + + + + + + + @@ -356,7 +457,7 @@ - + @@ -367,13 +468,13 @@ - - - + + + \ No newline at end of file diff --git a/teahyuk/Ssansungvy/pom.xml b/teahyuk/Ssansungvy/pom.xml index 0408d44..e1c4394 100644 --- a/teahyuk/Ssansungvy/pom.xml +++ b/teahyuk/Ssansungvy/pom.xml @@ -22,16 +22,11 @@ + - com.github.javafaker - javafaker - 0.16 - - - - io.reactivex + io.reactivex.rxjava2 rxjava - 1.3.8 + 2.2.4 \ No newline at end of file diff --git a/teahyuk/Ssansungvy/src/main/java/controller/BoardController.java b/teahyuk/Ssansungvy/src/main/java/controller/BoardController.java index 8483029..f3db273 100644 --- a/teahyuk/Ssansungvy/src/main/java/controller/BoardController.java +++ b/teahyuk/Ssansungvy/src/main/java/controller/BoardController.java @@ -1,5 +1,6 @@ package controller; +import io.reactivex.disposables.Disposable; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -9,8 +10,8 @@ import javafx.scene.layout.AnchorPane; import model.SentenceMaker; import model.SentencesManager; +import model.vo.GameLevel; import model.vo.Sentence; -import rx.Subscription; import java.net.URL; import java.util.*; @@ -19,22 +20,33 @@ public class BoardController implements Initializable { + private int LEVEL_UP_COUNT = 10; + private int removedCount = 0; + + @FXML + private Label levelLabel; + + @FXML + private Label lifeLabel; + + @FXML + private Label scoreLabel; + @FXML private AnchorPane pane; - private SentenceMaker sentenceMaker; private SentencesManager sentencesManager; private Map labelMap; private Random random; private Double paneHeight; private Double paneWidth; - private Subscription makeSentenceSubscription; + private Disposable makeSentenceDisposable; + + private GameLevel currentGameLevel; @Override public void initialize(URL location, ResourceBundle resources) { - sentenceMaker = new SentenceMaker(); - random = new Random(); labelMap = new HashMap<>(); @@ -42,18 +54,28 @@ public void initialize(URL location, ResourceBundle resources) { pane.widthProperty().addListener((observable, oldValue, newValue) -> paneWidth = (Double) newValue); } - public void startRaining(int maxIntervalMS, int minIntervalMS) { - sentencesManager = new SentencesManager(); - sentencesManager.getSentencesHotObservable() + public void startRaining() { + currentGameLevel = new GameLevel(); + scoreLabel.setText("0"); + lifeLabel.setText("5"); + this.startRaining(currentGameLevel); + } + + public void startRaining(GameLevel level) { + currentGameLevel = level; + levelLabel.setText(String.valueOf(currentGameLevel.getLevel())); + SentenceMaker sentenceMaker = new SentenceMaker(level.getMaxInterval(), level.getMinInterval(), level.getMaxCharLength(), level.getMinCharLength()); + sentencesManager = new SentencesManager(level.getMaxDropSpeed(), level.getMinDropSpeed()); + Disposable disposable = sentencesManager.getSentencesObservable() .buffer(100, TimeUnit.MICROSECONDS) .subscribe(this::updateView, - this::logging, - this::gameOver); + this::logging); - makeSentenceSubscription = sentenceMaker.getSentences(maxIntervalMS, minIntervalMS) + makeSentenceDisposable = sentenceMaker.getSentences() .doOnNext(this::visibleSentence) .subscribe(sentencesManager::addSentences, - this::logging); + this::logging, + disposable::dispose); } private void visibleSentence(Sentence sentence) { @@ -71,15 +93,34 @@ private void updateView(List sentences) { Platform.runLater(() -> sentences .stream() .filter(labelMap::containsKey) - .forEach(sentence -> labelMap.get(sentence).setLayoutY(paneHeight * 0.95 * sentence.getHeight() / 1000))); + .forEach(this::updateSentence)); + } + + private void updateSentence(Sentence sentence) { + if (sentence.getHeight() == SentencesManager.SENTENCE_DIVIDE_LENGTH) { + removeSentence(sentence); + loseLife(); + } else { + labelMap.get(sentence).setLayoutY(paneHeight * 0.95 * sentence.getHeight() / SentencesManager.SENTENCE_DIVIDE_LENGTH); + } + } + + private void loseLife() { + int life = Integer.parseInt(lifeLabel.getText()); + life--; + if (life <= 0) + gameOver(); + else + lifeLabel.setText(String.valueOf(life)); } private void gameOver() { - makeSentenceSubscription.unsubscribe(); + makeSentenceDisposable.dispose(); Platform.runLater(() -> { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("게임오바아"); - alert.setHeaderText("게임 오버되었습니다."); + alert.setHeaderText("게임 오버되었습니다. \n 처음부터 ?"); + sentencesManager.close(); alert.showAndWait(); restart(); }); @@ -90,22 +131,45 @@ private void logging(Throwable e) { e.printStackTrace(); } - public boolean removeSentence(String sentence) { - Sentence removed = sentencesManager.popSentence(sentence); + boolean removeSentence(String sentence) { + Sentence removed = sentencesManager.removeSentence(sentence); boolean removeSuccess = removed != null; if (removeSuccess) { - pane.getChildren().remove(labelMap.get(removed)); - labelMap.remove(removed); + removeSentence(removed); + + int score = Integer.parseInt(scoreLabel.getText()); + score += removed.getSentence().length(); + scoreLabel.setText(String.valueOf(score)); + removedCount++; + if(removedCount>=LEVEL_UP_COUNT){ + moveToNextLevel(); + removedCount=0; + } } return removeSuccess; } + private void removeSentence(Sentence removed) { + pane.getChildren().remove(labelMap.get(removed)); + labelMap.remove(removed); + } + private void restart() { labelMap.keySet() .stream() .map(Sentence::getSentence) .collect(Collectors.toList()) .forEach(this::removeSentence); - this.startRaining(1000, 500); + this.startRaining(); + } + + private void moveToNextLevel() { + labelMap.keySet() + .stream() + .collect(Collectors.toList()) + .forEach(this::removeSentence); + makeSentenceDisposable.dispose(); + sentencesManager.close(); + startRaining(currentGameLevel.levelUp()); } } diff --git a/teahyuk/Ssansungvy/src/main/java/controller/MainPresenter.java b/teahyuk/Ssansungvy/src/main/java/controller/MainPresenter.java index c00c63d..b22c8d8 100644 --- a/teahyuk/Ssansungvy/src/main/java/controller/MainPresenter.java +++ b/teahyuk/Ssansungvy/src/main/java/controller/MainPresenter.java @@ -6,12 +6,13 @@ import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; import java.net.URL; import java.util.ResourceBundle; public class MainPresenter implements Initializable { - @FXML private AnchorPane board; + @FXML private GridPane board; @FXML private Button tryRemoveButton; @FXML private TextField textField; @FXML private BoardController boardController; @@ -28,7 +29,7 @@ public void initialize(URL arg0, ResourceBundle arg1){ }); textField.setFocusTraversable(true); - boardController.startRaining(2000,500); + boardController.startRaining(); } private void tryRemoveAcid(String sentence){ diff --git a/teahyuk/Ssansungvy/src/main/java/model/SentenceMaker.java b/teahyuk/Ssansungvy/src/main/java/model/SentenceMaker.java index 2a986e4..6826563 100644 --- a/teahyuk/Ssansungvy/src/main/java/model/SentenceMaker.java +++ b/teahyuk/Ssansungvy/src/main/java/model/SentenceMaker.java @@ -1,26 +1,59 @@ package model; -import com.github.javafaker.Faker; +import io.reactivex.Observable; import model.vo.Sentence; -import rx.Observable; +import java.io.BufferedReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class SentenceMaker { - public SentenceMaker() { + private List sentences; + private Random random; + private int maxMakeInterval; + private int minMakeInterval; + private int maxLength; + private int minLength; + + public SentenceMaker(int maxMakeInterval, int minMakeInterval, int maxLength, int minLength) { + try (BufferedReader br = Files.newBufferedReader(Paths.get("C:/Users/user/IdeaProjects/es-RxJava/teahyuk/Ssansungvy/target/classes/texts.csv"))){ + sentences = Arrays.asList(br.readLine().split(",")); + br.close(); + random = new Random(); + this.maxMakeInterval = maxMakeInterval; + this.minMakeInterval = minMakeInterval; + this.maxLength = maxLength; + this.minLength = minLength; + } catch (IOException e) { + e.printStackTrace(); + } } //timeInterval ms - public Observable getSentences(int maxInterval, int minInterval) { - AtomicInteger interval = new AtomicInteger(maxInterval); - return Observable.defer(() -> - Observable.just(new Sentence(Faker.instance().dragonBall().character())) - .delay(minInterval < interval.get() ? interval.getAndDecrement() : minInterval, - TimeUnit.MILLISECONDS)) - .repeat(); + public Observable getSentences() { + if(sentences.size() == 0) + return Observable.error(new Exception("NoTextsException")); + AtomicInteger interval = new AtomicInteger(maxMakeInterval); + return Observable.defer(() -> Observable.just(new Sentence(sentences.get(random.nextInt(sentences.size()))))) + .repeat() + .filter(this::isSentenceInLength) + .take(1) + .delay(minMakeInterval < interval.get() ? interval.getAndDecrement() : minMakeInterval, + TimeUnit.MILLISECONDS) + .repeat() + .doOnDispose(()->System.out.println("dispose")); + } + + private boolean isSentenceInLength(Sentence s){ + return minLength <= s.getSentence().length() && s.getSentence().length() <= maxLength; } } diff --git a/teahyuk/Ssansungvy/src/main/java/model/SentencesManager.java b/teahyuk/Ssansungvy/src/main/java/model/SentencesManager.java index ef2a9cb..73c8ad5 100644 --- a/teahyuk/Ssansungvy/src/main/java/model/SentencesManager.java +++ b/teahyuk/Ssansungvy/src/main/java/model/SentencesManager.java @@ -1,9 +1,9 @@ package model; +import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; +import io.reactivex.subjects.PublishSubject; import model.vo.Sentence; -import rx.Observable; -import rx.Subscription; -import rx.subjects.PublishSubject; import java.util.ArrayList; import java.util.HashMap; @@ -11,7 +11,12 @@ import java.util.Random; import java.util.concurrent.TimeUnit; +/** + * + */ public class SentencesManager { + public static final int SENTENCE_DIVIDE_LENGTH = 1000; + private int maxSpeed; private int minSpeed; @@ -19,7 +24,7 @@ public class SentencesManager { private PublishSubject subject; private Observable observable; - private Map subscriptionMap; + private Map subscriptionMap; private Random random; @@ -30,7 +35,7 @@ public SentencesManager(int maxSpeed, int minSpeed) { sentences = new ArrayList<>(); subject = PublishSubject.create(); - observable = subject.asObservable().doOnNext(this::replaceSentenceIdx); + observable = subject.doOnNext(this::replaceSentenceIdx); subscriptionMap = new HashMap<>(); random = new Random(); } @@ -39,37 +44,41 @@ public void addSentences(Sentence sentence) { if (!sentences.contains(sentence)) { sentences.add(sentence); - int interval = random.nextInt(1000/minSpeed-1000/maxSpeed) + 1000/maxSpeed; + int interval = random.nextInt(SENTENCE_DIVIDE_LENGTH / minSpeed - SENTENCE_DIVIDE_LENGTH / maxSpeed) + SENTENCE_DIVIDE_LENGTH / maxSpeed; subscriptionMap.put(sentence, Observable.interval(interval, TimeUnit.MILLISECONDS) - .take(1000) + .take(SENTENCE_DIVIDE_LENGTH) .map(i -> i + 1) .doOnNext(sentence::setHeight) .map(x -> sentence) .subscribe(subject::onNext, this::logging, - subject::onCompleted)); + () -> removeSentence(sentence))); } } - public Sentence popSentence(String text) { + public Sentence removeSentence(String text) { Sentence removedSentence = sentences.stream() .filter(x -> x.getSentence().equals(text)) .findFirst() .orElse(null); if (removedSentence != null) { - sentences.remove(removedSentence); - - subscriptionMap.get(removedSentence).unsubscribe(); - subscriptionMap.remove(removedSentence); + removeSentence(removedSentence); } return removedSentence; } - public Observable getSentencesHotObservable() { + public Observable getSentencesObservable() { return observable; } + public void close(){ + subject.onComplete(); + subscriptionMap.values().forEach(Disposable::dispose); + subscriptionMap.clear(); + sentences.clear(); + } + private void replaceSentenceIdx(Sentence sentence) { int idx = sentences.indexOf(sentence); if (idx > 0) { @@ -80,7 +89,13 @@ private void replaceSentenceIdx(Sentence sentence) { sentences.set(idx, front); } } - System.out.println(sentence.getSentence() + ":" + sentence.getHeight()); + } + + private void removeSentence(Sentence removedSentence) { + sentences.remove(removedSentence); + + subscriptionMap.get(removedSentence).dispose(); + subscriptionMap.remove(removedSentence); } private void logging(Throwable e) { diff --git a/teahyuk/Ssansungvy/src/main/java/model/vo/GameLevel.java b/teahyuk/Ssansungvy/src/main/java/model/vo/GameLevel.java new file mode 100644 index 0000000..e8c4a1a --- /dev/null +++ b/teahyuk/Ssansungvy/src/main/java/model/vo/GameLevel.java @@ -0,0 +1,78 @@ +package model.vo; + +public class GameLevel { + private int level = 1; + + private int maxInterval = 2000; + private int minInterval = 500; + private int maxDropSpeed = 50; + private int minDropSpeed = 10; + private int maxCharLength = 5; + private int minCharLength = 3; + + + public int getLevel() { + return level; + } + + public int getMaxInterval() { + return maxInterval; + } + + public int getMinInterval() { + return minInterval; + } + + public int getMaxDropSpeed() { + return maxDropSpeed; + } + + public int getMinDropSpeed() { + return minDropSpeed; + } + + public int getMaxCharLength() { + return maxCharLength; + } + + public int getMinCharLength() { + return minCharLength; + } + + public void setMaxInterval(int maxInterval) { + this.maxInterval = maxInterval; + } + + public void setMinInterval(int minInterval) { + this.minInterval = minInterval; + } + + public void setMaxDropSpeed(int maxDropSpeed) { + this.maxDropSpeed = maxDropSpeed; + } + + public void setMinDropSpeed(int minDropSpeed) { + this.minDropSpeed = minDropSpeed; + } + + public void setMaxCharLength(int maxCharLength) { + this.maxCharLength = maxCharLength; + } + + public void setMinCharLength(int minCharLength) { + this.minCharLength = minCharLength; + } + + public GameLevel levelUp(){ + maxInterval = Math.max(500,maxInterval-100); + minInterval = Math.max(200,minInterval-50); + maxDropSpeed = Math.min(100,maxDropSpeed+10); + minDropSpeed = Math.min(50,minDropSpeed+5); + maxCharLength += 2; + minCharLength = Math.min(7,minCharLength+1); + + level++; + + return this; + } +} diff --git a/teahyuk/Ssansungvy/src/main/resources/board.fxml b/teahyuk/Ssansungvy/src/main/resources/board.fxml index 844d03f..f716c64 100644 --- a/teahyuk/Ssansungvy/src/main/resources/board.fxml +++ b/teahyuk/Ssansungvy/src/main/resources/board.fxml @@ -1,5 +1,54 @@ + + + + + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/teahyuk/Ssansungvy/src/main/resources/texts.csv b/teahyuk/Ssansungvy/src/main/resources/texts.csv new file mode 100644 index 0000000..980e5fc --- /dev/null +++ b/teahyuk/Ssansungvy/src/main/resources/texts.csv @@ -0,0 +1 @@ +가까워지다,가까이,가까이,가깝다,가꾸다,가난하다,가늘다,가능성,가능하다,가능해지다,가득하다,가득히,가라앉다,가려지다,가로등,가로막다,가로수,가르다,가르치다,가르침,가리다,가리다,가리키다,가만있다,가만히,가볍다,가슴속,가운데,가이드,가입자,가입하다,가정교사,가져가다,가져다주다,가져오다,가지다,가지다,가치관,가톨릭,가하다,간단하다,간단히,간신히,간접적,간편하다,간호사,갇히다,갈비탕,갈수록,갈아입다,갈아타다,감동적,감사하다,감사하다,감상하다,감소되다,감소하다,감수성,감싸다,감정적,감추다,갑자기,갑작스럽다,값싸다,강력하다,강력히,강렬하다,강수량,강아지,강요하다,강원도,강의하다,강조하다,강하다,강화하다,갖가지,갖추다,같이하다,개개인,개구리,개나리,개발되다,개발하다,개방되다,개방하다,개선되다,개선하다,개인적,객관적,거꾸로,거대하다,거두다,거들다,거부하다,거절하다,거짓말,거치다,거칠다,걱정되다,걱정스럽다,걱정하다,건강하다,건너가다,건너다,건너오다,건너편,건넌방,건네다,건네주다,건드리다,건설되다,건설하다,건전하다,건조하다,건지다,걸리다,걸어가다,걸어오다,걸치다,검은색,검정색,겁나다,게다가,게시판,게으르다,겨울철,견디다,결과적,결석하다,결심하다,결정되다,결정하다,결혼식,결혼하다,경고하다,경기도,경기장,경복궁,경상도,경영하다,경쟁력,경제력,경제적,경제학,경찰관,경찰서,경험하다,계산기,계산하다,계속되다,계속하다,계시다,계시다,계획하다,고구려,고구마,고급스럽다,고등학교,고등학생,고려하다,고르다,고르다,고맙다,고모부,고무신,고민하다,고생하다,고소하다,고속도로,고속버스,고양이,고요하다,고집하다,고추장,고춧가루,고치다,고통스럽다,고프다,곤란하다,곧바로,곧이어,골고루,골목길,골짜기,골프장,공개하다,공격하다,공무원,공부하다,공식적,공연되다,공연장,공연하다,공연히,공중전화,공통되다,공통적,공통점,공항버스,공휴일,과학자,과학적,관계되다,관계없이,관계자,관광객,관광버스,관광지,관람객,관련되다,관련하다,관리하다,관심사,관찰하다,관하다,괜찮다,괴로움,괴로워하다,괴롭다,괴롭히다,굉장하다,굉장히,교과서,교육비,교육자,교통사고,교환하다,구경하다,구르다,구별되다,구별하다,구분되다,구분하다,구석구석,구성되다,구성하다,구속되다,구속하다,구입하다,구체적,구하다,구하다,국가적,국내선,국내외,국민적,국제선,국제적,국제화,국회의원,굳어지다,굳히다,굽히다,궁극적,궁금하다,권하다,귀가하다,귀국하다,귀엽다,귀중하다,귀찮다,귀하다,규칙적,그나마,그다음,그다지,그대로,그동안,그때그때,그래도,그래서,그래서,그래야,그래픽,그러나,그러니까,그러다,그러면,그러므로,그러하다,그런대로,그런데,그럴듯하다,그렇게,그렇다,그렇지,그렇지만,그려지다,그리고,그리다,그리로,그리움,그리워하다,그리하여,그림자,그립다,그만두다,그만큼,그만하다,그사이,그야말로,그저께,그제서야,그제야,그치다,그토록,극복하다,극작가,근거하다,근로자,근무하다,근본적,글쎄요,글쓰기,금강산,금메달,금요일,금지되다,금지하다,금하다,급격히,급속히,급증하다,급하다,긍정적,기념일,기념품,기념하다,기다리다,기대다,기대되다,기대하다,기도하다,기독교,기록되다,기록하다,기르다,기막히다,기본적,기뻐하다,기쁘다,기성세대,기숙사,기술자,기술하다,기억나다,기억되다,기억하다,기업인,기여하다,기울다,기울이다,기원전,기초적,기초하다,긴장감,긴장되다,긴장하다,길거리,길어지다,김치찌개,김포공항,깊숙이,까만색,까맣다,까먹다,깍두기,깔끔하다,깔리다,깨끗이,깨끗하다,깨끗해지다,깨닫다,깨달음,깨뜨리다,깨소금,깨어나다,깨어지다,깨우다,깨지다,꺼내다,꺼지다,꼭대기,꼼꼼하다,꼽히다,꾸리다,꾸미다,꾸준하다,꾸준히,꿈꾸다,끄덕이다,끊기다,끊어지다,끊임없다,끊임없이,끌리다,끌어당기다,끓이다,끝나다,끝내다,끝없다,끝없이,끼어들다,끼우다,나가다,나가다,나누다,나누어지다,나뉘다,나들이,나란히,나르다,나머지,나뭇가지,나뭇잎,나빠지다,나쁘다,나서다,나아가다,나아지다,나오다,나침반,나타나다,나타내다,낚시꾼,낚싯대,날리다,날아가다,날아다니다,날아오다,날카롭다,남기다,남대문,남대문시장,남동생,남학생,납득하다,낮아지다,낮추다,낯설다,내놓다,내다보다,내려가다,내려놓다,내려다보다,내려오다,내려지다,내리다,내밀다,내버리다,내보내다,내쉬다,내용물,내주다,내후년,냉장고,너무나,넉넉하다,넓어지다,넓히다,넘겨주다,넘기다,넘어가다,넘어뜨리다,넘어서다,넘어오다,넘어지다,넘치다,네거리,넥타이,노동자,노란색,노랗다,노래방,노래하다,노랫소리,노력하다,녹음하다,녹이다,논리적,논의하다,논하다,놀라다,놀랍다,놀리다,놀이터,농사일,농사짓다,농산물,높아지다,높이다,놓아두다,놓이다,놓치다,놔두다,누르다,눈감다,눈동자,눈뜨다,눈부시다,느껴지다,느끼다,느리다,늘리다,늘어나다,늘어놓다,늘어서다,늘어지다,능동적,늦가을,늦어지다,다가가다,다가서다,다가오다,다녀가다,다녀오다,다니다,다듬다,다루다,다르다,다름없다,다섯째,다섯째,다양성,다양하다,다양해지다,다이어트,다정하다,다지다,다짐하다,다치다,다투다,다하다,다행히,닥치다,단단하다,단순하다,단순히,닫히다,달라지다,달래다,달려가다,달려들다,달려오다,달리기,달리다,달리다,달리하다,달아나다,닭고기,담그다,담기다,담당자,담당하다,답답하다,답하다,당기다,당당하다,당분간,당연하다,당연히,당하다,당황하다,대규모,대기업,대기하다,대다수,대단하다,대단히,대답하다,대도시,대부분,대비하다,대사관,대상자,대신하다,대여섯,대응하다,대접하다,대중교통,대중문화,대중적,대처하다,대체로,대통령,대표적,대표하다,대하다,대학교,대학교수,대학로,대학생,대학원,대한민국,대합실,대화하다,더구나,더더욱,더러워지다,더럽다,더불다,더욱더,더욱이,더하다,덕수궁,던지다,덧붙이다,덩어리,덮이다,데려가다,데려오다,데리다,데우다,데이트,도달하다,도대체,도리어,도망가다,도망치다,도서관,도시락,도와주다,도움말,도자기,도저히,도착하다,도쿄(동경),독립하다,독일어,독창적,독특하다,독하다,돌려주다,돌리다,돌멩이,돌보다,돌아가다,돌아다니다,돌아보다,돌아서다,돌아오다,동그라미,동그랗다,동대문,동대문시장,동물원,동서남북,동아리,동양인,동의하다,동일하다,동화책,돼지고기,되돌리다,되돌아가다,되돌아보다,되돌아오다,되살리다,되찾다,되풀이되다,되풀이하다,된장찌개,두껍다,두드러지다,두드리다,두려움,두려워하다,두렵다,두르다,두리번거리다,둘러보다,둘러싸다,둘러싸이다,둥글다,뒤늦다,뒤따르다,뒤지다,뒤집다,뒷골목,뒷모습,드디어,드라마,드러나다,드리다,드리다,드물다,들려오다,들려주다,들르다,들리다,들어가다,들어서다,들어오다,들어주다,들여놓다,들여다보다,들이다,들이마시다,들이켜다,듯싶다,듯하다,등록금,등록증,등록하다,등산로,등장하다,디스크,디자이너,디자인,따뜻하다,따라가다,따라다니다,따라서,따라오다,따로따로,따르다,따르다,따스하다,딱딱하다,딸아이,땅바닥,때때로,때리다,떠나가다,떠나다,떠나오다,떠들다,떠들썩하다,떠오르다,떠올리다,떡볶이,떨리다,떨어뜨리다,떨어지다,또다시,똑같다,똑같이,똑똑하다,똑바로,뚱뚱하다,뛰놀다,뛰어가다,뛰어나가다,뛰어나다,뛰어나오다,뛰어내리다,뛰어넘다,뛰어놀다,뛰어다니다,뛰어들다,뛰어오다,뛰어오르다,뜨겁다,뜻대로,뜻밖에,뜻하다,띄우다,라디오,라운드,라이벌,라이터,러시아,레스토랑,레이저,로터리,마누라,마땅하다,마라톤,마련되다,마련하다,마르다,마무리,마사지,마시다,마요네즈,마음가짐,마음껏,마음대로,마음먹다,마음속,마음씨,마이크,마주치다,마지막,마찬가지,마치다,마침내,막걸리,막히다,만나다,만들다,만들어지다,만만하다,만족스럽다,만족하다,만족하다,만지다,만하다,만화가,많아지다,말리다,말리다,말씀드리다,말씀하다,말없이,말하다,맘대로,맛보다,맛없다,맛있다,망설이다,망원경,망치다,망하다,맞서다,맞은편,맞이하다,맞추다,맡기다,매달다,매달리다,매스컴,머리말,머리카락,머리칼,머릿속,머무르다,머물다,먹고살다,먹이다,먹히다,멀어지다,멈추다,멋있다,멋지다,메시지,메우다,며느리,면하다,명령어,명확하다,모니터,모르다,모색하다,모시다,모여들다,모으다,모이다,모자라다,모조리,모집하다,모처럼,모퉁이,목걸이,목소리,목요일,목욕탕,몰려들다,몰려오다,몸무게,못되다,못생기다,못지않다,못하다,못하다,못하다,묘사하다,무겁다,무관심,무관심하다,무궁화,무너지다,무더위,무덥다,무리하다,무사하다,무섭다,무시하다,무용가,무의미하다,무조건,무지개,무책임하다,묶이다,문제되다,문제점,문학적,문화재,문화적,묻히다,묻히다,물고기,물러나다,물리학,물어보다,물질적,미끄러지다,미끄럽다,미디어,미루다,미사일,미술관,미안하다,미용실,미워하다,미치다,미치다,민주주의,민주화,믿어지다,밀가루,밀리다,밀리미터,밀접하다,밑바닥,바가지,바구니,바깥쪽,바꾸다,바뀌다,바나나,바닷가,바닷물,바라다,바라보다,바람직하다,바로잡다,바르다,바르다,바쁘다,바이러스,바이올린,바치다,박물관,박히다,반갑다,반기다,반대편,반대하다,반드시,반복되다,반복하다,반성하다,반영하다,반짝거리다,반짝이다,반하다,받아들이다,발가락,발걸음,발견되다,발견하다,발달되다,발달하다,발바닥,발생하다,발음하다,발자국,발전되다,발전하다,발표되다,발표하다,발휘하다,밝아지다,밝혀내다,밝혀지다,밝히다,밤늦다,밤새다,밤새우다,밤하늘,밥그릇,방문하다,방바닥,방송국,방송사,방송하다,방지하다,방해하다,배고프다,배드민턴,배부르다,배우다,배우자,배추김치,백두산,백화점,뱃사람,버려지다,버리다,버리다,버티다,번거롭다,번역하다,벌리다,벌어지다,벌어지다,벌이다,벗기다,베이징(북경),변하다,변호사,변화되다,변화하다,별다르다,병들다,병아리,보고서,보고하다,보관하다,보내다,보내오다,보너스,보도되다,보도하다,보라색,보살피다,보수적,보완하다,보이다,보이다,보자기,보장되다,보장하다,보존하다,보충하다,보편적,보호되다,보호하다,복사기,복사하다,복숭아,복습하다,복잡하다,볶음밥,본격적,봉사하다,부끄러움,부끄럽다,부담하다,부동산,부드럽다,부딪치다,부딪히다,부러워하다,부러지다,부럽다,부르다,부르다,부모님,부분적,부서지다,부작용,부잣집,부정적,부정하다,부족하다,부지런하다,부지런히,부치다,부탁하다,부회장,분리되다,분리하다,분명하다,분명해지다,분명히,분석하다,분위기,분주하다,분포하다,분홍색,불가능하다,불가피하다,불고기,불과하다,불구하다,불러일으키다,불리다,불리다,불리하다,불쌍하다,불안하다,불어오다,불완전하다,불이익,불편하다,불평등하다,불필요하다,불행하다,불확실하다,붐비다,붙들다,붙이다,붙잡다,붙잡히다,브랜드,블라우스,비교적,비교하다,비기다,비닐봉지,비둘기,비디오,비로소,비롯되다,비롯하다,비바람,비비다,비빔밥,비슷하다,비싸다,비우다,비웃다,비추다,비치다,비키다,비타민,비판적,비판하다,비하다,비행기,비행장,빌리다,빗방울,빗줄기,빛나다,빠뜨리다,빠르다,빠져나가다,빠져나오다,빠지다,빠지다,빨간색,빨갛다,빼놓다,빼앗기다,빼앗다,뻔하다,뻔하다,뽑히다,뿌리다,뿌리치다,사계절,사과하다,사귀다,사나이,사들이다,사라지다,사랑스럽다,사랑하다,사망하다,사모님,사무소,사무실,사무직,사생활,사소하다,사실상,사업가,사업자,사용되다,사용자,사용하다,사이사이,사이좋다,사진기,사춘기,사투리,사회생활,사회자,사회적,사회주의,사회학,산부인과,살리다,살아가다,살아나다,살아남다,살아오다,살펴보다,살피다,삼가다,삼계탕,삼키다,상관없다,상관없이,상당수,상당하다,상당히,상대방,상대성,상대적,상대편,상반기,상상력,상상하다,상징적,상징하다,상쾌하다,상하다,새기다,새로이,새롭다,새소리,새우다,색다르다,색연필,샌드위치,생각나다,생각되다,생각하다,생겨나다,생기다,생방송,생산되다,생산력,생산자,생산하다,생활비,생활수준,생활용품,생활하다,생활환경,서늘하다,서두르다,서명하다,서비스,서서히,서양인,서울역,서투르다,서툴다,섞이다,선명하다,선물하다,선생님,선언하다,선정하다,선진국,선택하다,선풍기,선호하다,설거지,설득하다,설렁탕,설립하다,설명되다,설명하다,설악산,설치되다,설치하다,섭섭하다,성공적,성공하다,성립되다,성립하다,성숙하다,성실하다,성장하다,세계관,세계적,세련되다,세미나,세상에,세우다,세워지다,세종대왕,세탁기,세탁소,섹시하다,센티미터,소개되다,소개하다,소규모,소극적,소나기,소나무,소리치다,소문나다,소박하다,소비자,소비하다,소설가,소시지,소아과,소요되다,소용없다,소유자,소유하다,소중하다,소중히,소지품,소프트웨어,소홀히,소화하다,속마음,속삭이다,속상하다,속이다,속하다,손가락,손바닥,손수건,손쉽다,손잡다,손잡이,손질하다,솔직하다,솔직히,송아지,쇠고기,수고하다,수도권,수도꼭지,수돗물,수동적,수리하다,수많다,수시로,수없이,수영장,수요일,수입되다,수입품,수입하다,수집하다,수출하다,수행하다,수험생,수화기,숙이다,순간적,순수하다,순식간,순진하다,순하다,숟가락,술자리,숨기다,숨지다,슈퍼마켓,스스로,스스로,스웨터,스위치,스치다,스케이트,스케줄,스키장,스타일,스튜디오,스트레스,스포츠,슬그머니,슬퍼하다,슬프다,승리하다,승용차,시금치,시끄럽다,시나리오,시내버스,시대적,시도하다,시들다,시디롬,시리즈,시멘트,시부모,시스템,시아버지,시어머니,시외버스,시원하다,시작되다,시작하다,시집가다,시청률,시청자,시키다,식료품,식사하다,식생활,식용유,식품점,식히다,신고하다,신기하다,신기하다,신문사,신문지,신선하다,신세대,신속하다,신입생,신제품,신중하다,신청서,신청하다,신체적,신호등,신혼부부,신혼여행,실례하다,실리다,실망하다,실수하다,실시되다,실시하다,실제로,실질적,실천하다,실패하다,실현되다,실현하다,싫어지다,싫어하다,심각하다,심각해지다,심리적,심부름,심심하다,심하다,심해지다,십이월,십일월,싱겁다,싱싱하다,싶어지다,싸구려,싸우다,쌍둥이,쌓이다,썰렁하다,쏟아지다,쓰다듬다,쓰러지다,쓰레기,쓰레기통,쓰이다,쓰이다,쓸데없다,쓸데없이,쓸쓸하다,씌우다,씩씩하다,씻기다,씻기다,아가씨,아깝다,아끼다,아나운서,아니다,아니야,아니요,아니하다,아드님,아래쪽,아래층,아랫사람,아르바이트,아름답다,아마도,아무개,아무것,아무래도,아무런,아무렇다,아무리,아무튼,아버님,아버지,아쉬움,아쉽다,아스팔트,아시아,아울러,아이고,아이디어,아이스크림,아저씨,아주머니,아줌마,아파트,아프다,아프리카,안기다,안기다,안내하다,안녕하다,안녕히,안되다,안되다,안심하다,안전하다,안정되다,안타깝다,앉히다,알려지다,알루미늄,알리다,알맞다,알아내다,알아듣다,알아보다,알아주다,알코올,앞두다,앞바다,앞서다,앞세우다,앞장서다,애쓰다,액세서리,야구장,야하다,약속하다,약하다,약해지다,약혼녀,약혼자,얄밉다,양배추,양보하다,양상추,얘기하다,어기다,어느덧,어느새,어두워지다,어둡다,어떠하다,어떡하다,어떻다,어려움,어려워지다,어렵다,어리다,어리다,어리석다,어린아이,어린애,어린이,어린이날,어머니,어머님,어색하다,어울리다,어저께,어젯밤,어지럽다,어째서,어쨌든,어쩌다,어쩌다,어쩌다가,어쩌면,어쩐지,어찌나,어찌하다,억울하다,언제나,언젠가,얻어먹다,얼리다,얼마간,얼마나,엄격하다,엄숙하다,엄청나다,없애다,없어지다,엇갈리다,엉덩이,엉뚱하다,엉터리,엊그제,엎드리다,에너지,에어컨,엘리베이터,여겨지다,여고생,여기다,여기저기,여대생,여동생,여러분,여름철,여보세요,여전하다,여전히,여직원,여쭈다,여학생,여행사,여행하다,역사가,역사상,역사적,역사학,연결되다,연결하다,연구소,연구실,연구원,연구자,연구하다,연기되다,연기자,연기하다,연두색,연락처,연락하다,연상하다,연습하다,연예인,연출하다,연하다,열리다,열리다,열심히,열중하다,염려하다,엿보다,영원하다,영원히,영향력,영화관,영화배우,영화제,옆구리,예고하다,예매하다,예방하다,예쁘다,예상되다,예상하다,예술가,예술적,예습하다,예식장,예약하다,예정되다,예측하다,예컨대,옛날이야기,오가다,오늘날,오래간만,오래도록,오래되다,오래전,오랜만,오랫동안,오렌지,오로지,오르내리다,오르다,오른발,오른손,오른쪽,오염되다,오징어,오페라,오피스텔,오히려,옥수수,온라인,온종일,올가을,올라가다,올라서다,올라오다,올라타다,올려놓다,올려다보다,올리다,올림픽,올바르다,올여름,옮기다,옷차림,와이셔츠,완벽하다,완성되다,완성하다,완전하다,완전히,왜냐하면,외갓집,외교관,외국어,외국인,외로움,외롭다,외면하다,외삼촌,외아들,외우다,외출하다,외치다,외할머니,외할아버지,요구되다,요구하다,요리사,요리하다,요약하다,요즈음,요청하다,욕하다,용감하다,용서하다,우리나라,우리말,우수하다,우습다,우승하다,우아하다,우연히,우울하다,우체국,운동복,운동장,운동하다,운동화,운영하다,운전기사,운전사,운전자,운전하다,울리다,울리다,울음소리,움직이다,움직임,웃기다,웃어른,웃음소리,원숭이,원피스,원하다,월드컵,월요일,웨이터,웬만하다,위대하다,위로하다,위반하다,위아래,위원장,위치하다,위하다,위험성,위험하다,윗사람,유난히,유능하다,유리창,유리하다,유명하다,유발하다,유사하다,유의하다,유적지,유지되다,유지하다,유치원,유학생,유행하다,육체적,은은하다,은행나무,음료수,음식물,음식점,음악가,응답하다,의논하다,의도적,의미하다,의식하다,의심하다,의외로,의존하다,의지하다,의하다,이같이,이것저것,이곳저곳,이기다,이끌다,이다음,이대로,이데올로기,이동하다,이따가,이따금,이래서,이러다,이러하다,이런저런,이렇게,이렇다,이력서,이론적,이롭다,이루다,이루어지다,이룩하다,이뤄지다,이르다,이르다,이르다,이리저리,이미지,이발소,이사장,이사하다,이상적,이상하다,이야기,이야기하다,이어서,이어지다,이용되다,이용자,이용하다,이웃집,이윽고,이제야,이튿날,이해관계,이해되다,이해하다,이혼하다,익숙하다,익숙해지다,익히다,익히다,인간관계,인간성,인간적,인사말,인사하다,인삼차,인상적,인식하다,인정되다,인정받다,인정하다,인천공항,인터넷,인터뷰,인하다,일반인,일반적,일본어,일부러,일상생활,일상적,일시적,일어나다,일어서다,일요일,일으키다,일일이,일자리,일정하다,일주일,일찍이,일치하다,일하다,일회용,일회용품,읽히다,잃어버리다,임신부,임신하다,입력하다,입사하다,입원하다,입학하다,입히다,잇따르다,잊어버리다,잊혀지다,자가용,자격증,자극하다,자꾸만,자동차,자라나다,자라다,자랑스럽다,자랑하다,자르다,자부심,자살하다,자세하다,자세히,자신감,자연스럽다,자연적,자연현상,자연환경,자연히,자유롭다,자장면,자전거,자존심,자판기,작성하다,작아지다,작용하다,작은딸,작은아들,작은아버지,작은어머니,잔디밭,잘나다,잘되다,잘리다,잘못되다,잘못하다,잘살다,잘생기다,잘하다,잠그다,잠기다,잠들다,잠수함,잠자다,잠자리,잠자리,잡수다,잡수시다,잡아당기다,잡아먹다,잡히다,장기간,장기적,장난감,장례식,장모님,장사꾼,장애인,장학금,재미없다,재미있다,재밌다,재빨리,재우다,재작년,재채기,재활용,재활용품,저고리,저녁때,저러다,저렇게,저렇다,저마다,저절로,저지르다,적극적,적당하다,적당히,적어도,적어지다,적용되다,적용하다,적응하다,적절하다,적합하다,적히다,전개되다,전개하다,전공하다,전국적,전기밥솥,전달되다,전달하다,전라도,전망하다,전문가,전문적,전문점,전문직,전반적,전시되다,전시장,전시하다,전시회,전체적,전통문화,전통적,전하다,전해지다,전화기,전화번호,전화하다,전환하다,절대로,절대적,절약하다,젊은이,점심때,점심시간,점잖다,접근하다,접하다,젓가락,정거장,정기적,정류장,정리되다,정리하다,정말로,정반대,정보화,정상적,정신과,정신없이,정신적,정직하다,정치권,정치인,정치적,정치학,정하다,정해지다,정확하다,정확히,제거하다,제공하다,제과점,제대로,제대하다,제도적,제삿날,제시되다,제시하다,제안하다,제외되다,제외하다,제의하다,제자리,제작하다,제주도,제출하다,제한되다,제한하다,조그마하다,조그맣다,조금씩,조르다,조미료,조사하다,조심스럽다,조심하다,조용하다,조용히,조절하다,조정하다,조화되다,존경하다,존댓말,존재하다,존중하다,졸리다,졸업생,졸업하다,좁히다,종교적,종소리,종업원,종이컵,종합하다,좋아지다,좋아하다,죄송하다,주고받다,주관적,주름살,주머니,주무시다,주문하다,주어지다,주요하다,주의하다,주인공,주장하다,주저앉다,주전자,주차장,주차하다,죽이다,준비되다,준비물,준비하다,줄거리,줄무늬,줄어들다,줄이다,중계방송,중국어,중국집,중단되다,중단하다,중대하다,중소기업,중심지,중얼거리다,중요성,중요시하다,중요하다,중학교,중학생,즐거움,즐거워하다,즐겁다,즐기다,증가하다,증권사,증명하다,지겹다,지극히,지금껏,지급하다,지나가다,지나다,지나치다,지나치다,지난날,지난달,지난번,지난주,지난해,지내다,지니다,지도자,지도하다,지루하다,지르다,지름길,지리산,지배하다,지불하다,지속되다,지속적,지시하다,지식인,지우개,지우다,지우다,지워지다,지원하다,지저분하다,지적되다,지적하다,지치다,지켜보다,지키다,지하도,지하철,직장인,직접적,진단하다,진달래,진실로,진실하다,진지하다,진출하다,진하다,진행되다,진행자,진행하다,질문하다,짐작하다,집단적,집안일,집어넣다,집중되다,집중적,집중하다,짜증스럽다,짧아지다,쩔쩔매다,쫓겨나다,쫓기다,찌꺼기,찌르다,찍히다,찢어지다,차갑다,차라리,차리다,차이점,착각하다,착하다,찬성하다,참가하다,참고하다,참기름,참되다,참석자,참석하다,참여하다,참으로,창조적,창조하다,창피하다,찾아가다,찾아내다,찾아다니다,찾아보다,찾아오다,채우다,책가방,책임감,책임자,책임지다,챔피언,챙기다,척하다,천천히,철저하다,철저히,철학자,철학적,청바지,청소기,청소년,청소하다,청하다,체계적,체육관,체하다,체험하다,쳐다보다,초대하다,초등학교,초등학생,초록색,초보자,초상화,초여름,초저녁,초조하다,초청장,초청하다,초콜릿,촌스럽다,최고급,최대한,최소한,추가되다,추가하다,추진하다,추천하다,축구공,축구장,축하하다,출근하다,출발점,출발하다,출석하다,출연하다,출입국,출입문,출퇴근,출판사,출현하다,춤추다,충격적,충돌하다,충분하다,충분히,충청도,취소하다,취하다,취하다,치료법,치료하다,치르다,치우다,치우다,친절하다,친하다,친해지다,칠하다,침착하다,칭찬하다,카메라,카운터,칼국수,캄캄하다,캐나다,캐릭터,캠퍼스,캠페인,커다랗다,커지다,컨디션,컴퓨터,켜지다,코끼리,코미디,코스모스,콘서트,콤플렉스,콩나물,쿠데타,크리스마스,큰소리,큰아들,큰아버지,큰어머니,클래식,키우다,킬로그램,킬로미터,타고나다,타오르다,타자기,탁월하다,탄생하다,탈출하다,태권도,태어나다,태우다,태우다,택하다,탤런트,터뜨리다,터미널,터지다,테니스,테스트,테이블,테이프,텍스트,텔레비전,토론자,토론하다,토론회,토마토,토요일,토하다,통과하다,통일하다,통하다,퇴근하다,퇴원하다,퇴직금,투명하다,튀기다,튀어나오다,트이다,특별하다,특별히,특수성,특이하다,특정하다,튼튼하다,튼튼히,틀리다,틀림없다,틀림없이,티브이,티셔츠,파괴하다,파란색,파랗다,파악하다,파출소,판단하다,판매되다,판매하다,팔리다,팩시밀리,퍼센트,퍼지다,페인트,펴내다,편리하다,편안하다,편의점,편하다,펼쳐지다,평가되다,평가하다,평범하다,평상시,평화롭다,포근하다,포기하다,포도주,포스터,포인트,포장마차,포함되다,포함하다,폭넓다,표시하다,표시하다,표현되다,표현하다,푸르다,풀리다,풀어지다,풍부하다,프랑스,프로그램,프린터,플라스틱,피곤하다,피로하다,피아노,피우다,피하다,피해자,필수적,필연적,필요성,필요하다,하나님,하나하나,하나하나,하느님,하드웨어,하룻밤,하반기,하숙집,하얀색,하얗다,하여튼,하지만,학교생활,학부모,학생증,학용품,한가운데,한가하다,한겨울,한구석,한국말,한국어,한국적,한글날,한꺼번에,한동안,한라산,한마디,한반도,한밤중,한순간,한여름,한잔하다,한정되다,한정하다,한평생,한하다,할머니,할아버지,함께하다,함부로,합격하다,합리적,합치다,합하다,항공기,해결되다,해결하다,해내다,해당되다,해당하다,해롭다,해마다,해석하다,해소하다,해수욕장,해외여행,핸드백,핸드폰,햄버거,행동하다,행복하다,행하다,행해지다,향상되다,향하다,허락하다,허용되다,허용하다,헤매다,헤아리다,헤어지다,현관문,현대인,현대적,현실적,형성되다,형성하다,형식적,호기심,호랑이,호주머니,혼나다,혼잣말,홈페이지,화나다,화려하다,화요일,화장실,화장지,화장품,확대되다,확대하다,확립하다,확산되다,확신하다,확실하다,확실히,확인되다,확인하다,환경오염,환영하다,환하다,활동하다,활발하다,활발해지다,활발히,활용하다,회복되다,회복하다,횡단보도,효과적,효도하다,효율적,후춧가루,후회하다,훌륭하다,훔치다,휴지통,흐려지다,흐르다,흐리다,흐리다,흔들다,흔들리다,흔하다,흘러가다,흘러나오다,흘러내리다,흘리다,흥미롭다,흥분하다,흩어지다,희망하다,희생하다,힘겹다,힘들다,힘들어하다,힘쓰다,힘없이,힘차다 \ No newline at end of file diff --git a/teahyuk/Ssansungvy/target/classes/board.fxml b/teahyuk/Ssansungvy/target/classes/board.fxml index 844d03f..f716c64 100644 --- a/teahyuk/Ssansungvy/target/classes/board.fxml +++ b/teahyuk/Ssansungvy/target/classes/board.fxml @@ -1,5 +1,54 @@ + + + + + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/teahyuk/Ssansungvy/target/classes/controller/BoardController.class b/teahyuk/Ssansungvy/target/classes/controller/BoardController.class index 422b8b4eaec7d2ae9655bb8fd5f1532fdb72800c..6c72ba6b24d5058251eb760bdd4ca88454e88938 100644 GIT binary patch literal 10072 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 literal 8351 zcmbVR34B#&mH(fFrq<6$`%>!Wl!c^RW@xX%lFC}n zRaN5_359S}sx7grWR}bhVWZT{l(4pQW=gHLbM-S%!LHy2#c0bS#dBpXW)TT{AxoB! zcUc<35xJ^z^H2NCUr3h8^2#j_Z84e&VYjTXnjrwJF%!KFK#q|>jU3nzf)RtP;a;q5nRp_?2`*N3$NQ5` zCYz#2HC=rC3nr6h@~>+BxBxCPAs25mzm>gNHw<0jrR{^@(>9p z*&o^FWvLhCLLm;uW0?U;GDP8X5_e~N)6rCXShXgY)1EpJDV|c&8{^4%W|N@2zTp6^ z(@LIH(0J0_n;q(PQ#}r8C|xh=Bn~*KxQ>I#8JU4Njj^OX>LoKNFOhIlk*%JSinZp) z%D+;GJBj#R#M4yoYbohwBKy1AeT@VHyJ;_*in?2~$r!~_c4j6>)n|To={^db3gF4X zl|`!WDn%o((-|j~>2kyizkccYDRqD%jr`v zzkUj{8dh^oC73$}2-T1sjyV~6vwNH%ff|e}wa3#LBW_g=2So}OiDUpsyVM3JhjVsV zIRSPm*Hb^MpGb9TKqF4SGvs!TXlz&sufN}@Zeg(Bcwf&z$~&&kU|1L0_6nbk39EwH zDR;;l$vY(hi}7@4QbgX|@TOAd4yH-o-yNfM0zBDh)J;=G!Y#A9Gfs4n!Dw94lC@@o zu{a$*;SBZ0oVuJWbvM%d4!x9tw8Su*Pe6eOM_P21s+t>YEf}qCJ*fq=$!sD~cLReh z7*BAMy6YK9NfSxakZISPqTx5>q^MiUvW;6#?DHsAj&vbx>edPN_&OuQy{?l?N9eU# zH`3XgRtKgP4(K=tCu0FWe5aUE^M<_qMnPRp6_>-zVDu6(L#5PE0UfR<-Q&Uf6e7?t zp>7l3JK~y9=1oWxYxF#@k;Mo#Fh$Usznz}H*%SjK=A#5DOpp9Nc zEm>#F^+J1vw|ZVCok=;v9d2g8i=}HSWqnv~tg+;#FrKsJX1T?Z4Yu4W&9-cm8@O;A z1Fw{y+~Htj0C8J3$!1Ho*wP|fEorrB$?aj;!JRw9_<$|Dq>cUEVVn+QguOjF)ox3N z?6sv+_HpX=FizRhCEd34$o`rNIiN5H73PqQG%|!aY}4KEu;k6QyhV<1;;2sCX^CS? zuR$EuiI^p>Eq&5&$$%|!IcCYAEeVX+G9*b`JQ=p+S8Pd1+LDYdS>Z}n(zYCz6PBE` zRFAGq}7J(nJT`r`AaFFi^+kH|5>Qh$26 z&Y!vG;=_+$dhFDt`$jL`f9m4>Pp`4%LrV0tJZj?;7zxWrO_h8&ERWgpxIAIYN93ba z*2e-5$@8ISuZ>|)6(5%;nKx|tggj}>C*`T>ST-?h%ctbi$}biBv@M^J&)V_~HzK8| zJ||Dv@_AM17v$NTvlgAzL_PgcSpwhLd(4e8O)UzvXX>1`+(D`VPl2?AQQ$`%ux+|v~739mbTECmg)ePxfUZ#+yX*KGbby#7FtS(hn{j5g+h-OnMmaLH; z7Qg#xa+WY1ZLM9M-P>C`_ipPJEHeh17M=)al~CY0)0^$<)5CmS{qEPwxryjo6OL9ibAwpqeTenF znWU2D$O{^#(_K*v#>r9(Hc!LC)cTk#xe7JPn?Wke0%iMU4Ln7~>j$YX32$;qQz{A; z2T|z^4=3V&aUa>2a58;fiWi`nq}9$UnV!0!xJb++@N>nOVC&`iDFl=$o~L1^hW=7) zY-WLMGVf6;|5?HHm!&ifX1`7`X6!!6ltkIey)6AAD3aq|WFPC^49i^C8KNW4H5`{t zGb0WwP=fj|3Bp{>%u3GRX9(phavr5-pQ(*|Qcje?Q9bMp=TegKPD9UUFsQ(%Fe3M< zcMil8F{UKJ%EDn0)%#u$(1m1Xw9Wie(7(AkmlI1qsro*VOC)|eGK>UMf)%=*XZ7?n z^wMl@6%#a*!^*2c<)C}ATght1E%3uBO^_uM1ZGu8L(o4-b#$>Nrx_ThCx=W zOTA~%!FjwcE5Vlw)5wk>8IqL+1y)MP(PM`6)!~*P5X@b1GJ;~+O7;`A2{!+n2$ouX zt9dDAo63x*=3>!M!sA3p;;{llm^3tr-8{|`O$3(EAbOFs9A4UnNvrvdL{q7#d`(Da zhs>F7F->fDqI~CAKBZRjpn5ddDX000FDShH8(y8c=k@Rk%_F3!Z?`2`Jeb7mQbW~k zdv|npb+q)fb?&A68auxpLaM7FUp)8^J=2i(pE%NPrYD}!dXDc`nO&^8_~>Gekm~e+ zcf2JTJLqT)Fu%k|o#su)Ni^#d+xT?v5{!Zw8COjlDOMLlGH0q%P47#&F-^+)s8rb( zPnbl!p?GWF{|cbfJD}SB9JLrT4^_e4kPl6~>sB!#x7%^*LN_I;e$>nNlp6oD+hTxhq%sikKbX<$+-wCPC`X7oy#ec zrz|;d%S-Zg8)tZX#IyRjpO-#-2&Zj4!dn;a)vMhFe()Lnd|FpOsSA(caa+E@y8@oZ zDZ$l+91>5Cc!O@F-8^3KqU!WH(Tta3GN~Raj4b&U#clVz!7P)+_X8st5dsAM9d{Ss z5fg5@&W9{6zq|dsUnEw^MvabQ@Hf8blf3-i;-nd1Ze=Ce9XHNr(>gixYaD6>@c}Qr z$31DuD?EoLX=^HBgX@rg-juK(C{{THWF;c;w58P z%9X2hZkcX8Jci{5&ylNO!x*j}#We-?ucp<2HDo`6g;523*ia1(Ny$5U`QIacncF=bLeL9(6U| zkNb$IO!EN0YPtPvb(cZ7Dvz)nYJ4BzPPTidLHGb3B*KRX>pMp^9>Bw#@qO@vM9oAK z@P0c->P(BNzH7#Dt*GYe4aqZTsBIiWQ$ZH}Sqs?9-=;cIivu*tLBoPiW^o`>nI^LU z{cUVjl8UA=tS%t(Wq1?O-BBb%MP4ZtcoZMzR?(yvpn8_BqU4*^&_s7#$LjCEn(+)~ zly6%41XgmIPP~RqX!STEWf;fWG8_!X>)2iT9Jl*Q^!@khV#0jQBoI_}M6b4Rb6!xkX;XDwUZ}O9A6|6Gm0M zL0K6GpL)k}gWw$2gS{Ke=r1>o_KiHiqVc-mca;+%dnflwX=xq%Dj12(!=TV zB+H{QAbXhmRa$k75J}S`E?_qYd&bZ{4;_OPw{vhF_IYFIDv+WgDm{=tl9?b!n zml%j@l&tGM+a&uc95FM>)~6%$WxLo{8uieo^$4({yPNVmg+ zVv&Nwl46;xqR5H>#VT2cl46Z@hq7XWO~n@5iV8bAYE6W9+0)ZjAog|Hy0Q)gfqt@l zJ!H?_-Pn^Na;P}sRDVTA#ktNoAL2qMqA#LRe?}8-i4b8kt6#Uesj+)x-Ix%)Mw_w! z)T7N@f-aKu(Migr$$yA68RHDj0E3vprl{)Xy&fFX(PVz(Wb~Um!7rffIwb%A delta 333 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 literal 2140 zcmb7FYf~Fl7=BI&Y+05&0i`!vP!phCYU?$W%B9#~05udv>*Zu~2uqS(X0u`1&rbh{ zU;L_m0H&Ss2RQyF^*NgWfzaB{&Ybt0_kQ2M{(1H%fIIL_3}C{*q=^`&28esl#BJQs z$NL68F!3Qi(#OXpK0(@qff-G^tNCa3ajz4fVou}c4J;T~6zG_7JvW>cXiKIx1mX*R zK?(F`T~DpnDtQ&G%Y2!bfvoSy@`emt{ca%R;kH{9NMtLND%&~bh01f(iY%!hEnpQ@ zc!VR{U^0_QWrN4|TE41+J*|gKT^0E_LpdVK0wSX^u6KgD;2skvvpaH6+O^Ov+m7!! zwIHBHTZVqcb?mtaXu)D+y))+)JsH*ldY^1HJ=1V{&p-A%JxhNQWm(A=R>GlVn`tM%7JTvC4s(q z-w&%{Aa_?(xa}9Jy&d?h4-W`3eOR{eIkNP@!U|R`tYKN8zh1Ht`!k75ULJsQ& z9$MJI*V@207B=y%h41jl!uNP&;0Fso;wK9dc^3MdcA!g93}xvR*#JAr2?e@OH3PdZ znMrM!a8M8!N~Y@hZjxY6_k-o^C+(Cd>lSBwvVrDbzf4;-&k0@MtJ+JvO;cBUL2ao( z;O(R~bC%v}yCYD$N;05P$FJB$H{7n}Z5{5Go&z?*78s>SB&zoj-L) z{Pk*;smyJ?pB0Eel1IER11X;QC32y562&Qg$}l1sow((h2>5R=O%DF9Q{B z(5&y5YP)ni<9RArD9dV9aozphoU4Yu`Y=9_UZJe2<8{GwYsQ-}rv%rZ?5bw=S0~m@ zzFf9>-Wr-0*nc@URA~bq$Dt)Z=f%VBemNhmafnOc#|&<9WIhXD=1N6oN(khVw)Ea(6)N%#xspMMEgEEej}-_ zav)+GKqsvaQt5DX0uy!dhH5IpC0vet8o?FbVwC8?RlG$**CK7#`%K+D z)N>e{hq$nh&V85%=sJWoI=PSTU(iL+^YmA=k3Rhaz5D3XUbRJm_7H;ENbs8^)WHtd z^+neC#8hORwctI0m}B6be`!1>47`gNUvVl)k{Ck@JA@{w+bF|jwr=ok@qLp#Hl}gw EKeB~3HUIzs diff --git a/teahyuk/Ssansungvy/target/classes/model/SentencesManager.class b/teahyuk/Ssansungvy/target/classes/model/SentencesManager.class index af9deaf61f430f477d2b68b058c6a7a9b7a76398..6ef193ab7dbcba2eda0377dbc49aacf21fef2b6d 100644 GIT binary patch literal 6522 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 diff --git a/teahyuk/Ssansungvy/target/classes/model/vo/GameLevel.class b/teahyuk/Ssansungvy/target/classes/model/vo/GameLevel.class new file mode 100644 index 0000000000000000000000000000000000000000..d77ce954adb63b5a02a410e707033f3244643e39 GIT binary patch literal 1971 zcmZ`(TTc^F5dKcPH_Fm37ePfuK&327v7n$LU_h{1^Z_N&ClU8Xj3X%f-s2X4BqEt$Mg|==%i$n>Isg z7wsM3D)0!! zFD)$@Ie||&32AE0D|r+-OH1cCL1}L}GH?tZ$(Gh51D}>71E;Xblm+{6DA1oCS6@kD zqk3H1@mGs{rOAuSnmq6to{cN$x6y^9jT8%qMK_Bc7QHO`kTfxG<2e>=EQ0FR^Z(ro zI82x+d6m7)yX^yir%tC`n$|t;ggA8uby+%>8>iaDsV^{0ooG|vnuu{6^cUk$(A0#Uxh>ORf|dttkjjgX92db;1i;C*5xluGU1%?KXcm5qG=ApC&Zd$u^<8PNE6J zwVE(pqY3M)HPwcT+nl+^)LeR$Ynr%b+HmoxFjrd5Wkk7ViEFM67mpirjjOrLDAzOMns39! zBgwX~BlY8!?SGV(yoVnGPO{WqL7J=;3&Y eELQOXYj}fK_=MLeATM(W9*f