From 48ae12ed1108cb39cb84c09f23d7226396f16dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Fri, 24 Aug 2018 15:19:26 +0900 Subject: [PATCH] Fix: change runMode as release Add: apply start, result to typing practice, score text, stage timer Fix: ranking board text postion --- src/game/global/global_variables.js | 2 +- src/game/global/global_variables_debug.js | 108 ++++++++++++++++++ src/game/global/global_variables_release.js | 108 ++++++++++++++++++ src/game/lib/chart.js | 2 +- src/game/lib/string_util.js | 6 + src/game/menu/menu_typing_practice.js | 4 +- src/game/result/ranking_board.js | 27 +++-- src/game/result/result.js | 24 ++-- src/game/typing/practice/game.js | 71 +++++++----- src/game/typing/practice/miss_typing_score.js | 48 -------- src/game/typing/practice/stage_timer.js | 73 ++++++++++++ src/game/typing/practice/typing_score.js | 57 +++++++++ src/web/client/typing_practice.html | 4 +- 13 files changed, 430 insertions(+), 104 deletions(-) create mode 100644 src/game/global/global_variables_debug.js create mode 100644 src/game/global/global_variables_release.js delete mode 100644 src/game/typing/practice/miss_typing_score.js create mode 100644 src/game/typing/practice/stage_timer.js create mode 100644 src/game/typing/practice/typing_score.js diff --git a/src/game/global/global_variables.js b/src/game/global/global_variables.js index fcc6c55..d5e2fba 100644 --- a/src/game/global/global_variables.js +++ b/src/game/global/global_variables.js @@ -3,7 +3,7 @@ const LANGUAGE_ENGLISH = "english"; const MODE_RELEASE = "release"; const MODE_DEBUG = "debug"; -const runMode = MODE_DEBUG; +const runMode = MODE_RELEASE; function isDebugMode() { // console.log("debug mode ? " + runMode); diff --git a/src/game/global/global_variables_debug.js b/src/game/global/global_variables_debug.js new file mode 100644 index 0000000..fcc6c55 --- /dev/null +++ b/src/game/global/global_variables_debug.js @@ -0,0 +1,108 @@ +const LANGUAGE_KOREAN = "korean"; +const LANGUAGE_ENGLISH = "english"; + +const MODE_RELEASE = "release"; +const MODE_DEBUG = "debug"; +const runMode = MODE_DEBUG; + +function isDebugMode() { + // console.log("debug mode ? " + runMode); + return runMode == MODE_DEBUG ? true : false; +} + +function isReleaseMode() { + // console.log("release mode ? " + runMode); + return runMode == MODE_RELEASE ? true : false; +} + + +const GAME_SCREEN_SIZE = { x: 1024, y: 768 } + + + +let sessionStorageManager = new SessionStorageManager(); +{ + // if(isDebugMode()) { + // sessionStorageManager.playerName = "부현율"; + // sessionStorageManager.playerID = 8; + // sessionStorageManager.playingAppID = 101; + // sessionStorageManager.playingAppName = "space_invaders"; + // sessionStorageManager.score = 1000; + // sessionStorageManager.highScore = 2000; + // } + + console.log("maestroID : " + sessionStorageManager.maestroID); + console.log("maestroAccountType : " + sessionStorageManager.maestroAccountType); + console.log("playerName : " + sessionStorageManager.playerName); + console.log("playerID : " + sessionStorageManager.playerID); + console.log("playerAccountType : " + sessionStorageManager.playerAccountType); + console.log("playingAppID : " + sessionStorageManager.playingAppID); + console.log("playingAppName : " + sessionStorageManager.playingAppName); + console.log("playingAppKoreanName : " + sessionStorageManager.playingAppKoreanName); + console.log("record : " + sessionStorageManager.record); + console.log("bestRecord : " + sessionStorageManager.bestRecord); + + if(sessionStorageManager.maestroID === null && !isLogin()) { + goLogin(); + } +} + +function isLogin() { + let filename = location.pathname.substring(location.pathname.lastIndexOf("/") + 1); + // console.log(filename); + + return filename === "login.html" ? true : false; +} + +function goLogin() { + location.href = "login.html"; +} + +function isTypingGame() { + if(sessionStorageManager.playingAppName === null) + return false; + + if(sessionStorageManager.playingAppName.indexOf("typing") < 0) + return false; + + return true; +} + +function isTypingPracticeStage() { + let appName = sessionStorageManager.playingAppName; + + if(appName.indexOf("practice_") > -1) + return true; + + return false; +} + +function isTypingTestStage() { + let appName = sessionStorageManager.playingAppName; + + if(appName.indexOf("test_") > -1) + return true; + + return false; +} + +function isTypingWordStage() { + let appName = sessionStorageManager.playingAppName; + + if((isTypingPracticeStage() || isTypingTestStage()) && appName.indexOf("_word") > -1) + return true; + + return false; +} + +function isTypingSentenceStage() { + let appName = sessionStorageManager.playingAppName; + + if((isTypingPracticeStage() || isTypingTestStage()) && appName.indexOf("_sentence") > -1) + return true; + + return false; +} + + +let textStyleBasic = { font: "bold 32px Arial", fill: "#fff", align: "center", boundsAlignH: "center", boundsAlignV: "middle" }; diff --git a/src/game/global/global_variables_release.js b/src/game/global/global_variables_release.js new file mode 100644 index 0000000..d5e2fba --- /dev/null +++ b/src/game/global/global_variables_release.js @@ -0,0 +1,108 @@ +const LANGUAGE_KOREAN = "korean"; +const LANGUAGE_ENGLISH = "english"; + +const MODE_RELEASE = "release"; +const MODE_DEBUG = "debug"; +const runMode = MODE_RELEASE; + +function isDebugMode() { + // console.log("debug mode ? " + runMode); + return runMode == MODE_DEBUG ? true : false; +} + +function isReleaseMode() { + // console.log("release mode ? " + runMode); + return runMode == MODE_RELEASE ? true : false; +} + + +const GAME_SCREEN_SIZE = { x: 1024, y: 768 } + + + +let sessionStorageManager = new SessionStorageManager(); +{ + // if(isDebugMode()) { + // sessionStorageManager.playerName = "부현율"; + // sessionStorageManager.playerID = 8; + // sessionStorageManager.playingAppID = 101; + // sessionStorageManager.playingAppName = "space_invaders"; + // sessionStorageManager.score = 1000; + // sessionStorageManager.highScore = 2000; + // } + + console.log("maestroID : " + sessionStorageManager.maestroID); + console.log("maestroAccountType : " + sessionStorageManager.maestroAccountType); + console.log("playerName : " + sessionStorageManager.playerName); + console.log("playerID : " + sessionStorageManager.playerID); + console.log("playerAccountType : " + sessionStorageManager.playerAccountType); + console.log("playingAppID : " + sessionStorageManager.playingAppID); + console.log("playingAppName : " + sessionStorageManager.playingAppName); + console.log("playingAppKoreanName : " + sessionStorageManager.playingAppKoreanName); + console.log("record : " + sessionStorageManager.record); + console.log("bestRecord : " + sessionStorageManager.bestRecord); + + if(sessionStorageManager.maestroID === null && !isLogin()) { + goLogin(); + } +} + +function isLogin() { + let filename = location.pathname.substring(location.pathname.lastIndexOf("/") + 1); + // console.log(filename); + + return filename === "login.html" ? true : false; +} + +function goLogin() { + location.href = "login.html"; +} + +function isTypingGame() { + if(sessionStorageManager.playingAppName === null) + return false; + + if(sessionStorageManager.playingAppName.indexOf("typing") < 0) + return false; + + return true; +} + +function isTypingPracticeStage() { + let appName = sessionStorageManager.playingAppName; + + if(appName.indexOf("practice_") > -1) + return true; + + return false; +} + +function isTypingTestStage() { + let appName = sessionStorageManager.playingAppName; + + if(appName.indexOf("test_") > -1) + return true; + + return false; +} + +function isTypingWordStage() { + let appName = sessionStorageManager.playingAppName; + + if((isTypingPracticeStage() || isTypingTestStage()) && appName.indexOf("_word") > -1) + return true; + + return false; +} + +function isTypingSentenceStage() { + let appName = sessionStorageManager.playingAppName; + + if((isTypingPracticeStage() || isTypingTestStage()) && appName.indexOf("_sentence") > -1) + return true; + + return false; +} + + +let textStyleBasic = { font: "bold 32px Arial", fill: "#fff", align: "center", boundsAlignH: "center", boundsAlignV: "middle" }; diff --git a/src/game/lib/chart.js b/src/game/lib/chart.js index d291153..4f2c241 100644 --- a/src/game/lib/chart.js +++ b/src/game/lib/chart.js @@ -28,7 +28,7 @@ class Chart { this.drawText( posX, posY - Chart.CHART_HEIGHT - Chart.CHART_RECORD_OFFSET_Y, - StringUtil.getRecordTextWithUnit(bestRecord) + StringUtil.getRecordTextWithoutUnit(bestRecord) + StringUtil.getScoreUnit(sessionStorageManager.playingAppID), ); // chart diff --git a/src/game/lib/string_util.js b/src/game/lib/string_util.js index 5add855..70a118c 100644 --- a/src/game/lib/string_util.js +++ b/src/game/lib/string_util.js @@ -86,5 +86,11 @@ class StringUtil { return alphabetCount; }; + static getScoreUnit(playingAppID) { + if(playingAppID < 100) + return " 타"; + else + return " 점"; + } } \ No newline at end of file diff --git a/src/game/menu/menu_typing_practice.js b/src/game/menu/menu_typing_practice.js index b99ff7b..3b58785 100644 --- a/src/game/menu/menu_typing_practice.js +++ b/src/game/menu/menu_typing_practice.js @@ -65,7 +65,7 @@ class MenuTypingPractice { sessionStorageManager.playingAppID = activeApp.AppID; sessionStorageManager.playingAppName = activeApp.AppName; sessionStorageManager.playingAppKoreanName = activeApp.KoreanName; - location.href = '../../web/client/typing_practice.html'; + location.href = '../../web/client/start.html'; } ); } @@ -86,7 +86,7 @@ class MenuTypingPractice { sessionStorageManager.playingAppID = activeApp.AppID; sessionStorageManager.playingAppName = activeApp.AppName; sessionStorageManager.playingAppKoreanName = activeApp.KoreanName; - location.href = '../../web/client/typing_practice.html'; + location.href = '../../web/client/start.html'; } ); } diff --git a/src/game/result/ranking_board.js b/src/game/result/ranking_board.js index 89ab14f..8859380 100644 --- a/src/game/result/ranking_board.js +++ b/src/game/result/ranking_board.js @@ -110,21 +110,24 @@ class RankingBoard { // rank style.boundsAlignH = "right"; - game.add.text(this.getPosX(type), this.getPosY(index), data.rank, style) - .setTextBounds(0, 0, 40, 40) - .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + let rankText = game.add.text(this.getPosX(type), this.getPosY(index), data.rank, style); + // .setTextBounds(0, 0, 40, 40) + rankText.anchor.set(1, 0); + rankText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); // player name - game.add.text(this.getPosX(type) + 60, this.getPosY(index), data.playerName, style) - .setTextBounds(0, 0, 60, 60) - .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + let playerNameText = game.add.text(this.getPosX(type) + 20, this.getPosY(index), data.playerName, style); + // .setTextBounds(0, 0, 60, 60) + playerNameText.anchor.set(0, 0); + playerNameText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); // bestRecord let bestRecord = StringUtil.getRecordTextWithoutUnit(data.bestRecord); style.boundsAlignH = "right"; - game.add.text(this.getPosX(type) + 120, this.getPosY(index), bestRecord, style) - .setTextBounds(0, 0, 80, 60) - .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + let recordText = game.add.text(this.getPosX(type) + 180, this.getPosY(index), bestRecord, style); + // .setTextBounds(0, 0, 80, 60) + recordText.anchor.set(1, 0); + recordText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); } getPosX(type) { @@ -133,17 +136,17 @@ class RankingBoard { switch(type) { case DBConnectManager.TYPE_MY_RANKING_HOUR: case DBConnectManager.TYPE_ALL_RANKING_HOUR: - posX = 320; + posX = 330; break; case DBConnectManager.TYPE_MY_RANKING_DAY: case DBConnectManager.TYPE_ALL_RANKING_DAY: - posX = 540; + posX = 560; break; case DBConnectManager.TYPE_MY_RANKING_MONTH: case DBConnectManager.TYPE_ALL_RANKING_MONTH: - posX = 760; + posX = 790; } return posX; diff --git a/src/game/result/result.js b/src/game/result/result.js index dadb284..8aa1cb3 100644 --- a/src/game/result/result.js +++ b/src/game/result/result.js @@ -52,26 +52,30 @@ class Result { } printRecord() { - const style = { font: "64px Arial", fill: "#fff", align: "left", boundsAlignH: "center", boundsAlignV: "middle" }; - game.add.text(0, 0, "결과", style) - .setTextBounds(0, 0, game.world.width, 100) - .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + const style = { font: "bold 38px Arial", fill: "#fff", align: "left", boundsAlignH: "center", boundsAlignV: "middle" }; + let titleText = game.add.text(game.world.width / 2, 35, "결과", style); + titleText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + titleText.anchor.set(0.5); let posY = 120; if(sessionStorageManager.record === null) sessionStorageManager.record = 0; let record = NumberUtil.numberWithCommas(Math.floor(sessionStorageManager.record)); - style.font = "bold 80px Arial"; - game.add.text(0, 0, record, style) - .setTextBounds(0, posY, game.world.width, 60) - .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + style.font = "80px Arial"; + let scoreText = game.add.text( + game.world.width / 2, 150, + record + StringUtil.getScoreUnit(sessionStorageManager.playingAppID), + style + ); + scoreText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + scoreText.anchor.set(0.5); if(sessionStorageManager.isNewBestRecrd === true) { style.font = "32px Arial"; - let bestRecordText = game.add.text(0, 0, "!!! 새로운 최고 기록 !!!", style) - .setTextBounds(0, posY + 80, game.world.width, 40); + let bestRecordText = game.add.text(game.world.width / 2, 110, "!!! 새로운 최고 기록 !!!", style); // .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + bestRecordText.anchor.set(0.5); bestRecordText.stroke = "#333"; bestRecordText.strokeThickness = 5; } diff --git a/src/game/typing/practice/game.js b/src/game/typing/practice/game.js index 3959083..312732b 100644 --- a/src/game/typing/practice/game.js +++ b/src/game/typing/practice/game.js @@ -6,6 +6,8 @@ class TypingPractice { create() { self = this; + this.isOnStage = false; + this.initTypingData(); sessionStorageManager.isNewBestRecrd = false; @@ -18,8 +20,15 @@ class TypingPractice { location.href = '../../web/client/menu_typing_practice.html'; }); - this.missTypingScoreText = new MissTypingScore(); - this.contentProgressText = new ContentProgress(); + this.typingScore = new TypingScore(); + + let STAGE_TIMER_SEC = 5; + this.stageTimer = new StageTimer( STAGE_TIMER_SEC, () => { + self.isOnStage = false; + + // self.goResult(); + self.gameOver(); + }); let fullscreenButton = new FullscreenButton(game); @@ -48,16 +57,22 @@ class TypingPractice { let textDoneColor = [ '#99994d', '#77774d', '#66664d' ]; this.textTypingContentsDone = []; for(let i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) { - this.textTypingContentsDone[i] = game.add.text(game.world.centerX - 200 - i * OFFSET_WORD_X, TYPING_CONTENT_Y, "", textStyleBasic) - .addColor(textDoneColor[0], 0); + this.textTypingContentsDone[i] = game.add.text( + game.world.centerX - 200 - i * OFFSET_WORD_X, TYPING_CONTENT_Y, + "", textStyleBasic + ); + this.textTypingContentsDone[i].addColor(textDoneColor[0], 0); this.textTypingContentsDone[i].anchor.set(0.5); } let textPreviewColor = [ '#666666', '#888888', '#777777' ]; this.textTypingContentPreview = []; for(let i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) { - this.textTypingContentPreview[i] = game.add.text(game.world.centerX + 200 + i * OFFSET_WORD_X, TYPING_CONTENT_Y, "", textStyleBasic) - .addColor(textPreviewColor[0], 0); + this.textTypingContentPreview[i] = game.add.text( + game.world.centerX + 200 + i * OFFSET_WORD_X, + TYPING_CONTENT_Y, "", textStyleBasic + ); + this.textTypingContentPreview[i].addColor(textPreviewColor[0], 0); this.textTypingContentPreview[i].anchor.set(0.5); } @@ -70,6 +85,9 @@ class TypingPractice { this.keyboard = new Keyboard(this.keyMapper, Keyboard.ENGLISH); game.input.keyboard.processKeyPress = () => { + if(self.isOnStage === false) + return; + self.checkTypingContents(event); } this.shiftKey = game.input.keyboard.addKey(Phaser.Keyboard.SHIFT); @@ -93,19 +111,17 @@ class TypingPractice { } startGame() { + this.isOnStage = true; + this.stageTimer.start(); + this.showTypingPracticeContents(); this.showHighlightKey(); this.moveHands(); - this.showPlayingWordNumber(); } gameOver() { - let gameOverText = new GameOverText(); + this.isOnStage = false; - game.time.events.add(Phaser.Timer.SECOND * 2, this.goResult, this); - } - - goResult() { for(let i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) { this.textTypingContentsDone[i].text = ""; } @@ -116,15 +132,23 @@ class TypingPractice { this.textTypingContent.addColor(TypingPractice.COLOR_CONTENT_RIGHT, 0); this.textTypingContent.text = "= 연습 끝 ="; + for(let i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) { + this.textTypingContentPreview[i].text = ""; + } + this.leftHand.moveToDefaultPosition(); this.rightHand.moveToDefaultPosition(); - /* - sessionStorageManager.record = this.typingRecordTotal; + + let gameOverText = new GameOverText(); + game.time.events.add(Phaser.Timer.SECOND * 2, this.goResult, this); + } + + goResult() { + sessionStorageManager.record = this.typingScore.score(); if(sessionStorageManager.record > sessionStorageManager.bestRecord) sessionStorageManager.bestRecord = sessionStorageManager.record; location.href = '../../web/client/result.html'; - */ } initTypingData() { @@ -132,16 +156,11 @@ class TypingPractice { let typingPracticeContents = this.loadPracticeContent(); // console.log(typingPracticeContents); - typingTextMan.makePracticeContents(typingPracticeContents, 1); + typingTextMan.makePracticeContents(typingPracticeContents, 30); this.typingRandomContents = typingTextMan.getContents(); // console.log(this.typingRandomContents); this.typingContentLength = this.typingRandomContents.length; this.typingIndex = 0; - - this.isTyping = false; - - this.typingLetterCountTotal = 0; - this.typingRecordTotal = 0; } @@ -328,13 +347,14 @@ class TypingPractice { let typingContent = this.typingRandomContents[this.typingIndex]; if(this.isKeyPressed(inputContent, typingContent)) { + this.typingScore.increase(); this.playNextContent(); if(this.typingIndex === this.typingContentLength) { - this.goResult(); + // this.goResult(); } } else { - this.missTypingScoreText.increase(); + this.typingScore.reset(); } } @@ -346,11 +366,6 @@ class TypingPractice { this.showTypingPracticeContents(); this.showHighlightKey(); this.moveHands(); - this.showPlayingWordNumber(); - } - - showPlayingWordNumber() { - this.contentProgressText.print(this.typingIndex + 1, this.typingContentLength); } } diff --git a/src/game/typing/practice/miss_typing_score.js b/src/game/typing/practice/miss_typing_score.js deleted file mode 100644 index bc9e0cc..0000000 --- a/src/game/typing/practice/miss_typing_score.js +++ /dev/null @@ -1,48 +0,0 @@ -class MissTypingScore { - - constructor() { - this.missTypingCount = 0; - - let fontStyle = MissTypingScore.DEFAULT_TEXT_FONT; - - fontStyle.align = "right"; - fontStyle.boundsAlignH = "right"; - this.label = game.add.text(0, 0, "오타수 : ", fontStyle) - .setTextBounds(0, 0, game.world.width / 2, MissTypingScore.FONT_HEIGHT_PX); - - fontStyle.align = "left"; - fontStyle.boundsAlignH = "left"; - this.missTypingText = game.add.text(game.world.width / 2, 0, "0", fontStyle) - .setTextBounds(0, 0, game.world.width / 2, MissTypingScore.FONT_HEIGHT_PX); - - // var grd = this.label.context.createLinearGradient(0, 0, 0, MissTypingScore.FONT_HEIGHT_PX); - // grd.addColorStop(0, '#8ED6FF'); - // grd.addColorStop(1, '#004CB3'); - // this.label.fill = grd; - // this.scoreText.fill = grd; - - // this.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); - // this.label.stroke = '#000'; - // this.label.strokeThickness = 3; - }; - - increase() { - this.missTypingCount++; - this.print(this.missTypingCount); - } - - print(missTypingCount) { - this.missTypingText.text = missTypingCount; - } - -} - -MissTypingScore.FONT_HEIGHT_PX = 70; - -MissTypingScore.DEFAULT_TEXT_FONT = { - font: "38px Arial", - align: "center", - boundsAlignH: "center", // left, center. right - boundsAlignV: "middle", // top, middle, bottom - fill: "#fff" -}; \ No newline at end of file diff --git a/src/game/typing/practice/stage_timer.js b/src/game/typing/practice/stage_timer.js new file mode 100644 index 0000000..b9f1147 --- /dev/null +++ b/src/game/typing/practice/stage_timer.js @@ -0,0 +1,73 @@ +class StageTimer { + + constructor(stageTimerSec, onTimeOver) { + + this.stageTimerSec = stageTimerSec; + this.onTimeOver = onTimeOver; + + let fontStyle = StageTimer.DEFAULT_TEXT_FONT; + + fontStyle.align = "right"; + fontStyle.boundsAlignH = "right"; + this.timerText = game.add.text(game.world.width - 300, 0, "", fontStyle) + .setTextBounds(0, 0, 200, StageTimer.FONT_HEIGHT_PX); + + // var grd = this.label.context.createLinearGradient(0, 0, 0, StageTimer.FONT_HEIGHT_PX); + // grd.addColorStop(0, '#8ED6FF'); + // grd.addColorStop(1, '#004CB3'); + // this.label.fill = grd; + // this.scoreText.fill = grd; + + // this.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + // this.label.stroke = '#000'; + // this.label.strokeThickness = 3; + + this.timerEvent = null; + }; + + start() { + this.timeLeft = this.stageTimerSec; + this.printTime(); + if(this.timerEvent === null) + this.timerEvent = game.time.events.loop(Phaser.Timer.SECOND, this.updateTimer, this); + } + + pause() { + } + + stop() { + if(this.timerEvent) + this.removeTimer(); + this.timerText.text = "시간 끝"; + } + + updateTimer() { + this.timeLeft--; + if(this.timeLeft === 0) { + this.stop(); + this.onTimeOver(); + } else { + this.printTime(); + } + } + + printTime() { + this.timerText.text = this.timeLeft.toString() + "초"; + } + + removeTimer() { + game.time.events.remove(this.timerEvent); + this.timerEvent = null; + } + +} + +StageTimer.FONT_HEIGHT_PX = 70; + +StageTimer.DEFAULT_TEXT_FONT = { + font: "38px Arial", + align: "center", + boundsAlignH: "center", // left, center. right + boundsAlignV: "middle", // top, middle, bottom + fill: "#fff" +}; \ No newline at end of file diff --git a/src/game/typing/practice/typing_score.js b/src/game/typing/practice/typing_score.js new file mode 100644 index 0000000..30c4525 --- /dev/null +++ b/src/game/typing/practice/typing_score.js @@ -0,0 +1,57 @@ +class TypingScore { + + constructor() { + this.typingCount = 0; + + let fontStyle = TypingScore.DEFAULT_TEXT_FONT; + + fontStyle.align = "right"; + fontStyle.boundsAlignH = "right"; + this.scoreTitleText = game.add.text(game.world.width / 2 - 40, TypingScore.SCORE_POS_Y, "연속 성공 타수 : ", fontStyle) + this.scoreTitleText.anchor.set(0.5); + + fontStyle.align = "left"; + fontStyle.boundsAlignH = "left"; + this.scoreText = game.add.text(game.world.width / 2 + 100, TypingScore.SCORE_POS_Y, "0", fontStyle) + this.scoreText.anchor.set(0.5); + + // var grd = this.scoreText.context.createLinearGradient(0, 0, 0, TypingScore.SCORE_POS_Y); + // grd.addColorStop(0, '#8ED6FF'); + // grd.addColorStop(1, '#004CB3'); + // this.scoreText.fill = grd; + // this.scoreText.fill = grd; + + // this.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); + // this.scoreText.stroke = '#000'; + // this.scoreText.strokeThickness = 3; + }; + + score() { + return this.typingCount; + } + + increase() { + this.typingCount++; + this.print(this.typingCount); + } + + reset() { + this.typingCount = 0; + this.print(this.typingCount); + } + + print(typingCount) { + this.scoreText.text = typingCount; + } + +} + +TypingScore.SCORE_POS_Y = 35; + +TypingScore.DEFAULT_TEXT_FONT = { + font: "38px Arial", + align: "center", + boundsAlignH: "center", // left, center. right + boundsAlignV: "middle", // top, middle, bottom + fill: "#fff" +}; \ No newline at end of file diff --git a/src/web/client/typing_practice.html b/src/web/client/typing_practice.html index 895b075..6b17996 100644 --- a/src/web/client/typing_practice.html +++ b/src/web/client/typing_practice.html @@ -49,12 +49,12 @@ - - + +