diff --git a/src/game/global/global_variables.js b/src/game/global/global_variables.js index 0901d69..c25871d 100644 --- a/src/game/global/global_variables.js +++ b/src/game/global/global_variables.js @@ -1,7 +1,7 @@ var LANGUAGE_KOREAN = "korean"; -var LANGUAGE_ENGLISH = "english"; +var LANGUAGE_ENGLISH = "english"; -var MODE_RELEASE = "release"; +var MODE_RELEASE = "release"; var MODE_DEBUG = "debug"; var runMode = MODE_DEBUG; @@ -163,4 +163,4 @@ function getGameAppName() { } -let textStyleBasic = { font: "bold 32px Arial", fill: "#fff", align: "center", boundsAlignH: "center", boundsAlignV: "middle" }; +var textStyleBasic = { font: "bold 32px Arial", fill: "#fff", align: "center", boundsAlignH: "center", boundsAlignV: "middle" }; diff --git a/src/game/lib/animal.js b/src/game/lib/animal.js index 5695365..046269b 100644 --- a/src/game/lib/animal.js +++ b/src/game/lib/animal.js @@ -5,7 +5,6 @@ function Animal(type, index, x, y) { this.posX = x; this.posY = y; - // this.sprite = game.add.sprite(this.posX, this.posY); //, "snail_run1"); // this.spriteFrameNames.run1); this.sprite = game.add.sprite(this.posX, this.posY, "animals"); this.sprite.anchor.set(0.5); this.sprite.animations.add("stand", [index * 2]); @@ -20,10 +19,6 @@ Animal.prototype.setScale = function(value) { this.sprite.scale.set(value); } -// Animal.prototype.setIconSprite = function(species) { -// this.setSpecies(species); -// } - Animal.prototype.setSpecies = function(species) { console.log(species); this.species = species; @@ -51,10 +46,6 @@ Animal.prototype.tweenAnimation = function(animationType) { } } -// Animal.prototype.setupAnimation = function() { -// this.stopAnimation(); -// } - Animal.prototype.startAnimation = function(species) { this.sprite.animations.play("run", this.species.fps, true); } @@ -86,8 +77,6 @@ Animal.typingCount = function(speciesData, gameType) { Animal.loadResources = function() { game.load.spritesheet('animals', '../../../resources/image/character/animal/animals.png', 50, 50); - - // game.load.image('snail_shadow', '../../../resources/image/character/animal/snail/shadow.png'); } diff --git a/src/game/lib/score_text.js b/src/game/lib/score_text.js index 5ff2ffc..5c553d9 100644 --- a/src/game/lib/score_text.js +++ b/src/game/lib/score_text.js @@ -3,14 +3,23 @@ ScoreText.constructor = ScoreText; function ScoreText(x, y, score) { // super(game, x, y, "+" + NumberUtil.numberWithCommas(score), ScoreText.DEFAULT_TEXT_FONT); - Phaser.Text.call(this, game, x, y, "+" + NumberUtil.numberWithCommas(score), ScoreText.DEFAULT_TEXT_FONT); + var scoreValue = Number(score); + if(scoreValue > 0) + Phaser.Text.call(this, game, x, y, "+" + NumberUtil.numberWithCommas(score), ScoreText.DEFAULT_TEXT_FONT); + else if(scoreValue < 0) + Phaser.Text.call(this, game, x, y, NumberUtil.numberWithCommas(score), ScoreText.DEFAULT_TEXT_FONT); this.anchor.set(0.5); this.inputEnabled = false; var grd = this.context.createLinearGradient(0, 0, 0, this.height); - grd.addColorStop(0, '#8ED6FF'); - grd.addColorStop(1, '#004CB3'); + if(scoreValue < 0) { + grd.addColorStop(0, ScoreText.COLOR_MINUS_SCORE_GRADATION_1); + grd.addColorStop(1, ScoreText.COLOR_MINUS_SCORE_GRADATION_2); + } else { + grd.addColorStop(0, ScoreText.COLOR_PLUS_SCORE_GRADATION_1); + grd.addColorStop(1, ScoreText.COLOR_PLUS_SCORE_GRADATION_2); + } this.fill = grd; // this.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); this.stroke = '#fff'; @@ -39,4 +48,10 @@ ScoreText.DEFAULT_TEXT_FONT = { fill: "#fff" }; -ScoreText.MOVE_UP_AMOUNT_PX = 50; \ No newline at end of file +ScoreText.MOVE_UP_AMOUNT_PX = 50; + +ScoreText.COLOR_PLUS_SCORE_GRADATION_1 = "#8ED6FF"; +ScoreText.COLOR_PLUS_SCORE_GRADATION_2 = "#004CB3"; + +ScoreText.COLOR_MINUS_SCORE_GRADATION_1 = "#FFD68E"; +ScoreText.COLOR_MINUS_SCORE_GRADATION_2 = "#B34C00"; \ No newline at end of file diff --git a/src/game/result/result.js b/src/game/result/result.js index 4d1b10a..c5d8c6a 100644 --- a/src/game/result/result.js +++ b/src/game/result/result.js @@ -93,7 +93,7 @@ var Result = { var animalLevelID = 0; if(isTypingPracticeApp()) animalLevelID = Animal.animalLevelIDByRecord(sessionStorageManager.getRecord(), Animal.TYPE_PRACTICE); - else + else // Typing Test App animalLevelID = Animal.animalLevelIDByRecord(sessionStorageManager.getRecord(), Animal.TYPE_TEST); var leftAnimal = new Animal(Animal.TYPE_ANIMATION, animalLevelID, game.world.centerX - 200, 150); diff --git a/src/game/typing/lib/typing_content_bg.js b/src/game/typing/lib/typing_content_bg.js index b45da36..047ebc2 100644 --- a/src/game/typing/lib/typing_content_bg.js +++ b/src/game/typing/lib/typing_content_bg.js @@ -2,65 +2,69 @@ function TypingContentBG() { } TypingContentBG.prototype.makePracticeContentBG = function() { - var CONTENT_Y = 140; + var contentY = TypingContentBG.POS_Y_CONTENT_BOX_TYPING_PRACTICE; var bar = game.add.graphics(); if(isKoreanTypingApp()) { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 120); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 120); } else { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 40); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 40); bar.beginFill(TypingContentBG.COLOR_CONTENT_ALPHABET_BG, 1); - bar.drawRect(0, CONTENT_Y + 40, GAME_SCREEN_SIZE.x, 50); + bar.drawRect(0, contentY + 40, GAME_SCREEN_SIZE.x, 50); bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y + 90, GAME_SCREEN_SIZE.x, 30); + bar.drawRect(0, contentY + 90, GAME_SCREEN_SIZE.x, 30); } } TypingContentBG.prototype.makeTestContentBG = function() { - var CONTENT_Y = 260; + var contentY = TypingContentBG.POS_Y_CONTENT_BOX_TYPING_TEST; var bar = game.add.graphics(); if(isKoreanTypingApp()) { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 120); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 120); } else { if(isTypingSentenceApp()) { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 46); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 46); bar.beginFill(TypingContentBG.COLOR_CONTENT_ALPHABET_BG, 1); - bar.drawRect(0, CONTENT_Y + 46, GAME_SCREEN_SIZE.x, 30); + bar.drawRect(0, contentY + 46, GAME_SCREEN_SIZE.x, 30); bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y + 76, GAME_SCREEN_SIZE.x, 44); + bar.drawRect(0, contentY + 76, GAME_SCREEN_SIZE.x, 44); } else { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 40); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 40); bar.beginFill(TypingContentBG.COLOR_CONTENT_ALPHABET_BG, 1); - bar.drawRect(0, CONTENT_Y + 40, GAME_SCREEN_SIZE.x, 50); + bar.drawRect(0, contentY + 40, GAME_SCREEN_SIZE.x, 50); bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y + 90, GAME_SCREEN_SIZE.x, 30); + bar.drawRect(0, contentY + 90, GAME_SCREEN_SIZE.x, 30); } } } TypingContentBG.prototype.makeWhacAMoleContentBG = function() { - var CONTENT_Y = 200; + var contentY = TypingContentBG.POS_Y_CONTENT_BOX_TYPING_WHACAMOLE; var bar = game.add.graphics(); if(isKoreanTypingApp()) { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 120); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 120); } else { bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y, GAME_SCREEN_SIZE.x, 40); + bar.drawRect(0, contentY, GAME_SCREEN_SIZE.x, 40); bar.beginFill(TypingContentBG.COLOR_CONTENT_ALPHABET_BG, 1); - bar.drawRect(0, CONTENT_Y + 40, GAME_SCREEN_SIZE.x, 50); + bar.drawRect(0, contentY + 40, GAME_SCREEN_SIZE.x, 50); bar.beginFill(TypingContentBG.COLOR_CONTENT_BG, 1); - bar.drawRect(0, CONTENT_Y + 90, GAME_SCREEN_SIZE.x, 30); + bar.drawRect(0, contentY + 90, GAME_SCREEN_SIZE.x, 30); } } TypingContentBG.COLOR_CONTENT_BG = 0x444444; -TypingContentBG.COLOR_CONTENT_ALPHABET_BG = 0x3d3d3d; \ No newline at end of file +TypingContentBG.COLOR_CONTENT_ALPHABET_BG = 0x3d3d3d; + +TypingContentBG.POS_Y_CONTENT_BOX_TYPING_PRACTICE = 140; +TypingContentBG.POS_Y_CONTENT_BOX_TYPING_TEST = 260; +TypingContentBG.POS_Y_CONTENT_BOX_TYPING_WHACAMOLE = 200; diff --git a/src/game/typing/practice/game.js b/src/game/typing/practice/game.js index d642a2d..7543aec 100644 --- a/src/game/typing/practice/game.js +++ b/src/game/typing/practice/game.js @@ -157,7 +157,7 @@ var TypingPractice = { }, goResult: function() { - sessionStorageManager.setRecord(this.typingScore.score()); + sessionStorageManager.setRecord(this.typingScore.getScore()); location.href = '../../web/client/result.html'; }, @@ -365,8 +365,15 @@ var TypingPractice = { var typingContent = this.typingRandomContents[this.typingIndex]; if(this.isKeyPressed(inputContent, typingContent)) { - this.typingScore.increase(); - var animalLevelID = Animal.animalLevelIDByRecord(this.typingScore.score(), Animal.TYPE_PRACTICE); + var plusScore = 1; + this.typingScore.add(plusScore); + var scoreText = new ScoreText( + game.world.centerX, + TypingContentBG.POS_Y_CONTENT_BOX_TYPING_PRACTICE, + plusScore + ); + + var animalLevelID = Animal.animalLevelIDByRecord(this.typingScore.getScore(), Animal.TYPE_PRACTICE); // console.log(animalLevelID); // console.log(this.playingAnimalIndex); if(animalLevelID > this.playingAnimalIndex) { @@ -382,7 +389,17 @@ var TypingPractice = { } else { if(this.playingAnimalIndex > 0) this.playingAnimalIndex--; + var prevScore = this.typingScore.getScore(); this.typingScore.set(Animal.getAnimalPracticeTypingCount(this.playingAnimalIndex)); + var presentScore = this.typingScore.getScore(); + + if(presentScore - prevScore < 0) { + var scoreText = new ScoreText( + game.world.centerX, + TypingContentBG.POS_Y_CONTENT_BOX_TYPING_PRACTICE, + presentScore - prevScore + ); + } this.animalList.activate(this.playingAnimalIndex); this.animalList.tweenAnimation(Animal.ANIMATION_TYPE_DAMAGE); diff --git a/src/game/typing/practice/typing_score.js b/src/game/typing/practice/typing_score.js index ac2b23e..78b28fd 100644 --- a/src/game/typing/practice/typing_score.js +++ b/src/game/typing/practice/typing_score.js @@ -1,5 +1,5 @@ function TypingScore() { - this.typingCount = 0; + this.score = 0; var fontStyle = TypingScore.DEFAULT_TEXT_FONT; @@ -24,36 +24,36 @@ function TypingScore() { // this.scoreText.strokeThickness = 3; }; -TypingScore.prototype.score = function() { - return this.typingCount; +TypingScore.prototype.getScore = function() { + return this.score; } -TypingScore.prototype.increase = function() { - this.typingCount++; - this.print(this.typingCount); +TypingScore.prototype.add = function(value) { + this.score += value; + this.print(this.score); } TypingScore.prototype.reset = function() { - this.typingCount = 0; - this.print(this.typingCount); + this.score = 0; + this.print(this.score); } TypingScore.prototype.set = function(score) { - this.typingCount = score; - this.print(this.typingCount); + this.score = score; + this.print(this.score); } -TypingScore.prototype.print = function(typingCount) { - this.scoreText.text = typingCount; +TypingScore.prototype.print = function(score) { + this.scoreText.text = score; } 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" + 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/word_list/english_sentence.js b/src/game/typing/word_list/english_sentence.js index 6bae891..8bb7b63 100644 --- a/src/game/typing/word_list/english_sentence.js +++ b/src/game/typing/word_list/english_sentence.js @@ -35,7 +35,6 @@ var englishSentenceList = [ "Nobody's perfect.", "Negligence is a crime.", "Nothing is impossible to a willing heart.", - "Never put off till tomorrow what you can do today.", "Never shoot, never hit.", "Never judge by appearance.", "Of a compliment only a third is meant.", diff --git a/src/game/typing/word_list/korean_sentence.js b/src/game/typing/word_list/korean_sentence.js index 98689b6..18252c6 100644 --- a/src/game/typing/word_list/korean_sentence.js +++ b/src/game/typing/word_list/korean_sentence.js @@ -16,7 +16,6 @@ var koreanSentenceList = [ "구르는 돌에는 이끼가 끼지 않는다.", "구슬이 서 말이라도 꿰어야 보배", "굴러 온 돌이 박힌 돌 뺀다.", - "길이 아니면 가지 말고 말이 아니면 듣지 말라.", "까마귀 날자 배 떨어진다.", "낮 말은 새가 듣고 밤 말은 쥐가 듣는다.", "늦게 배운 도둑질이 날 새는 줄 모른다.", @@ -27,7 +26,6 @@ var koreanSentenceList = [ "도둑을 맞으려면 개도 안 짖는다.", "도둑이 제 발 저린다.", "돌다리도 두들겨 보고 건너라.", - "떡 줄 사람은 생각도 않는데 김칫국부터 마신다.", "똥 묻은 개가 겨 묻은 개 나무란다.", "똥이 무서워서 피하나 더러워서 피하지.", "뛰는 놈 위에 나는 놈 있다.", @@ -35,7 +33,7 @@ var koreanSentenceList = [ "못된 송아지 엉덩이에 뿔난다.", "못 먹는 감 찔러나 본다.", "미꾸라지 한 마리가 온 웅덩이를 흐린다.", - "믿는 도끼에 발등 찍히다.", + "믿는 도끼에 발등 찍힌다.", "밑 빠진 독에 물 붓기.", "바늘 도둑이 소 도둑 된다.", "방귀 뀐 놈이 성낸다.", @@ -44,7 +42,7 @@ var koreanSentenceList = [ "번데기 앞에서 주름잡기", "부뚜막의 소금도 집어 넣어야 짜다.", "비온 뒤 땅이 굳는다.", - "빈 수레가 더 요란하다.", + "빈 수레가 요란하다.", "빈대 잡다 초가삼간 태운다.", "사공이 많으면 배가 산으로 간다.", "서당개 삼년이면 풍월을 읊는다.", @@ -59,7 +57,6 @@ var koreanSentenceList = [ "얌전한 고양이 부뚜막에 먼저 오른다.", "안 되는 놈은 뒤로 자빠져도 코가 깨진다.", "어물전 망신은 꼴뚜기가 시킨다.", - "열길 물 속은 알아도 한길 사람 속은 모른다.", "열 번 찍어 안 넘어가는 나무 없다.", "오르지 못할 나무는 쳐다보지도 마라.", "오얏나무 아래에서 갓을 고쳐 쓰지 마라.", @@ -78,10 +75,9 @@ var koreanSentenceList = [ "털어서 먼지 안 나는 사람 없다.", "팔은 안으로 굽는다.", "피는 물보다 진하다.", - "하늘이 무너저도 솟아날 구멍은 있다.", + "하늘이 무너져도 솟아날 구멍은 있다.", "하룻강아지 범 무서운줄 모른다.", "호랑이도 제 말 하면 온다.", - "호랑이에게 물려가도 정신만 차리면 살 수 있다.", "호랑이를 잡으려면 호랑이굴로 가야 한다.", "호미로 막을걸 가래로 막는다.", "호박에 줄 긋는다고 수박되나.", diff --git a/src/web/client/typing_practice.html b/src/web/client/typing_practice.html index d7bec48..d9c8b5f 100644 --- a/src/web/client/typing_practice.html +++ b/src/web/client/typing_practice.html @@ -32,6 +32,7 @@ +