From de26c72441d7299b151663fa3a2371bf49f37f9c 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, 5 Oct 2018 15:32:34 +0900 Subject: [PATCH] Add: BigMole, KeyboardMole --- resources/image/character/mole.afdesign | Bin 0 -> 27680 bytes resources/image/character/mole.png | Bin 0 -> 4694 bytes src/game/typing/lib/keyboard.js | 53 +++-- src/game/typing/lib/typing_content_bg.js | 17 ++ src/game/typing/practice/game.js | 4 +- src/game/typing/whac_a_mole/game.js | 63 +++--- src/game/typing/whac_a_mole/hand.js | 263 ----------------------- src/game/typing/whac_a_mole/loading.js | 7 +- src/game/typing/whac_a_mole/main.js | 4 +- src/game/typing/whac_a_mole/mole.js | 95 ++++++++ src/web/client/whac_a_mole.html | 4 +- 11 files changed, 193 insertions(+), 317 deletions(-) create mode 100644 resources/image/character/mole.afdesign create mode 100644 resources/image/character/mole.png delete mode 100644 src/game/typing/whac_a_mole/hand.js create mode 100644 src/game/typing/whac_a_mole/mole.js diff --git a/resources/image/character/mole.afdesign b/resources/image/character/mole.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..e907f46c451910c8ea8ee0147f38765df3af2952 GIT binary patch literal 27680 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 0) - this.keyboard = new Keyboard(this.keyMapper, Keyboard.KOREAN); + this.keyboard = new Keyboard(this.keyMapper, Keyboard.KOREAN, Keyboard.NO_OFFSET_POS_Y); else - this.keyboard = new Keyboard(this.keyMapper, Keyboard.ENGLISH); + this.keyboard = new Keyboard(this.keyMapper, Keyboard.ENGLISH, Keyboard.NO_OFFSET_POS_Y); game.input.keyboard.processKeyPress = (function() { if(self.isOnStage === false) diff --git a/src/game/typing/whac_a_mole/game.js b/src/game/typing/whac_a_mole/game.js index 25ccb6f..d2b51db 100644 --- a/src/game/typing/whac_a_mole/game.js +++ b/src/game/typing/whac_a_mole/game.js @@ -1,4 +1,4 @@ -var TypingPractice = { +var WhacAMole = { create: function() { var self = this; @@ -44,7 +44,7 @@ var TypingPractice = { // var heartManager = new HeartManager(); - this.stageTimer = new StageTimer( TypingPractice.STAGE_TIMER_SEC, (function() { + this.stageTimer = new StageTimer( WhacAMole.STAGE_TIMER_SEC, (function() { self.isOnStage = false; // self.goResult(); @@ -52,21 +52,23 @@ var TypingPractice = { })); + this.bigMole = new BigMole(game.world.centerX, BigMole.START_POS_Y); + // typing content var typingContentBG = new TypingContentBG(); - typingContentBG.makePracticeContentBG(); + typingContentBG.makeWhacAMoleContentBG(); - var TYPING_CONTENT_Y = 200; + var TYPING_CONTENT_Y = 260; textStyleBasic.font = "bold 84px Times New Roman"; this.textTypingContent = game.add.text(game.world.centerX, TYPING_CONTENT_Y, "", textStyleBasic) .setShadow(3, 3, 'rgba(0, 0, 0, 1)', 2) - .addColor(TypingPractice.COLOR_CONTENT_INPUT, 0); + .addColor(WhacAMole.COLOR_CONTENT_INPUT, 0); this.textTypingContent.anchor.set(0.5); this.textTypingBracket = game.add.text(game.world.centerX, TYPING_CONTENT_Y, "[ ]", textStyleBasic) .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2) - .addColor(TypingPractice.COLOR_BRACKET, 0); + .addColor(WhacAMole.COLOR_BRACKET, 0); this.textTypingBracket.anchor.set(0.5); @@ -75,7 +77,7 @@ var TypingPractice = { var textDoneColor = [ '#99994d', '#77774d', '#66664d' ]; this.textTypingContentsDone = []; - for(var i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) { + for(var i = 0; i < WhacAMole.TYPING_CONTENT_DONE_COUNT; i++) { this.textTypingContentsDone[i] = game.add.text( game.world.centerX - 200 - i * OFFSET_WORD_X, TYPING_CONTENT_Y, "", textStyleBasic @@ -86,7 +88,7 @@ var TypingPractice = { var textPreviewColor = [ '#666666', '#888888', '#777777' ]; this.textTypingContentPreview = []; - for(var i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) { + for(var i = 0; i < WhacAMole.TYPING_CONTENT_PREVIEW_COUNT; i++) { this.textTypingContentPreview[i] = game.add.text( game.world.centerX + 200 + i * OFFSET_WORD_X, TYPING_CONTENT_Y, "", textStyleBasic @@ -99,9 +101,9 @@ var TypingPractice = { this.keyMapper = new KeyMapper(); this.keyboard = null; if(sessionStorageManager.getPlayingAppName().indexOf("korean") > 0) - this.keyboard = new Keyboard(this.keyMapper, Keyboard.KOREAN); + this.keyboard = new Keyboard(this.keyMapper, Keyboard.KOREAN, Keyboard.WHAC_A_MOLE_OFFSET_POS_Y); else - this.keyboard = new Keyboard(this.keyMapper, Keyboard.ENGLISH); + this.keyboard = new Keyboard(this.keyMapper, Keyboard.ENGLISH, Keyboard.WHAC_A_MOLE_OFFSET_POS_Y); game.input.keyboard.processKeyPress = (function() { if(self.isOnStage === false) @@ -112,6 +114,8 @@ var TypingPractice = { this.shiftKey = game.input.keyboard.addKey(Phaser.Keyboard.SHIFT); + this.keyboardMole = new KeyboardMole(this.keyboard); + // bottom ui this.screenBottomUI = new ScreenBottomUI(); // screenBottomUI.printBottomUILeftText(""); @@ -127,24 +131,24 @@ var TypingPractice = { this.isOnStage = true; this.stageTimer.start(); - this.showTypingPracticeContents(); + this.showWhacAMoleContents(); this.showHighlightKey(); }, gameOver: function() { this.isOnStage = false; - for(var i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) { + for(var i = 0; i < WhacAMole.TYPING_CONTENT_DONE_COUNT; i++) { this.textTypingContentsDone[i].text = ""; } this.textTypingBracket.text = ""; this.textTypingContent.clearColors(); - this.textTypingContent.addColor(TypingPractice.COLOR_CONTENT_RIGHT, 0); + this.textTypingContent.addColor(WhacAMole.COLOR_CONTENT_RIGHT, 0); this.textTypingContent.text = "= 연습 끝 ="; - for(var i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) { + for(var i = 0; i < WhacAMole.TYPING_CONTENT_PREVIEW_COUNT; i++) { this.textTypingContentPreview[i].text = ""; } @@ -317,8 +321,8 @@ var TypingPractice = { return letters; }, - showTypingPracticeContents: function() { - for(var i = 0; i < TypingPractice.TYPING_CONTENT_DONE_COUNT; i++) { + showWhacAMoleContents: function() { + for(var i = 0; i < WhacAMole.TYPING_CONTENT_DONE_COUNT; i++) { var doneIndex = this.typingIndex - i - 1; if(doneIndex < 0) { this.textTypingContentsDone[i].text = ""; @@ -333,8 +337,15 @@ var TypingPractice = { } this.textTypingContent.text = this.typingRandomLetters[this.typingIndex]; + // var keyID = this.keyboard.keyMapper.getKeyIDOfText(this.typingRandomLetters[this.typingIndex]); - for(var i = 0; i < TypingPractice.TYPING_CONTENT_PREVIEW_COUNT; i++) { + this.bigMole.showUp(); + + this.keyboardMole.show(); + this.keyboardMole.moveToKey(this.typingRandomLetters[this.typingIndex]); + + + for(var i = 0; i < WhacAMole.TYPING_CONTENT_PREVIEW_COUNT; i++) { var previewIndex = this.typingIndex + i + 1; if(previewIndex < this.typingRandomLetters.length) this.textTypingContentPreview[i].text = this.typingRandomLetters[previewIndex]; @@ -401,20 +412,20 @@ var TypingPractice = { this.hideHighlightKey(); this.typingIndex++; - this.showTypingPracticeContents(); + this.showWhacAMoleContents(); this.showHighlightKey(); } } -TypingPractice.TYPING_CONTENT_PREVIEW_COUNT = 3; -TypingPractice.TYPING_CONTENT_DONE_COUNT = 3; -// TypingPractice.TYPING_COUNT_PLUS_ENTER = 1; +WhacAMole.TYPING_CONTENT_PREVIEW_COUNT = 3; +WhacAMole.TYPING_CONTENT_DONE_COUNT = 3; +// WhacAMole.TYPING_COUNT_PLUS_ENTER = 1; -// TypingPractice.OFFSET_RIGHT_ALIGN = 10; +// WhacAMole.OFFSET_RIGHT_ALIGN = 10; -TypingPractice.STAGE_TIMER_SEC = 60; +WhacAMole.STAGE_TIMER_SEC = 60; -TypingPractice.COLOR_CONTENT_INPUT = "#dddddd"; -TypingPractice.COLOR_BRACKET = "#dddd70"; -TypingPractice.COLOR_CONTENT_RIGHT = "#ffff4d"; \ No newline at end of file +WhacAMole.COLOR_CONTENT_INPUT = "#dddddd"; +WhacAMole.COLOR_BRACKET = "#dddd70"; +WhacAMole.COLOR_CONTENT_RIGHT = "#ffff4d"; \ No newline at end of file diff --git a/src/game/typing/whac_a_mole/hand.js b/src/game/typing/whac_a_mole/hand.js deleted file mode 100644 index f61a190..0000000 --- a/src/game/typing/whac_a_mole/hand.js +++ /dev/null @@ -1,263 +0,0 @@ -function Hand(keyMapper) { - this.keyMapper = keyMapper; - this.pressingFinger = KeyButton.NONE_FINGER; - this.prevFingerSprite = null; - - this.hand = game.add.image(0, Hand.DEFAULT_Y_PX, "hand_palm"); - this.hand.anchor.set(0.5); - this.hand.scale.set(2); - - this.thumb = game.add.image(0, 0, "hand_thumb"); - this.thumb.alpha = 0.5; - this.hand.addChild(this.thumb); - - this.index_finger = game.add.image(0, 0, "hand_index_finger"); - this.index_finger.alpha = 0.5; - this.hand.addChild(this.index_finger); - - this.middle_finger = game.add.image(0, 0, "hand_middle_finger"); - this.middle_finger.alpha = 0.5; - this.hand.addChild(this.middle_finger); - - this.ring_filger = game.add.image(0, 0, "hand_little_finger"); - this.ring_filger.alpha = 0.5; - this.hand.addChild(this.ring_filger); - - this.little_finger = game.add.image(0, 0, "hand_ring_finger"); - this.little_finger.alpha = 0.5; - this.hand.addChild(this.little_finger); - - var mask = game.add.graphics(); - mask.beginFill(0xffffff); - mask.drawRect(100, 300, 1028, 360); - this.hand.mask = mask; -} - -Hand.prototype.move = function(sprite, x, y) { - sprite.x = x; - sprite.y = y; -} - -Hand.prototype.moveTo = function(key) { -} - -Hand.prototype.moveToDefaultPosition = function() { - this.moveRow(3, null); - this.unhighlightOffFinger(KeyButton.NONE_FINGER); -} - - -Hand.prototype.moveRow = function(rowNo, key) { - var rowIndex = rowNo - 1; - this.hand.y = Hand.DEFAULT_Y_PX + Keyboard.DEFAULT_KEY_SIZE_PX * rowIndex; - - this.moveColumn(rowNo, key); -} - -Hand.prototype.moveColumn = function(rowNo, key) { -} - - -Hand.prototype.getFingerSprite = function(fingerNo) { - var fingerSprite = null; - switch(fingerNo) { - case KeyButton.THUMB: - fingerSprite = this.thumb; - break; - case KeyButton.INDEX_FINGER: - case KeyButton.INDEX_FINGER_BASELINE: - fingerSprite = this.index_finger; - break; - case KeyButton.MIDDLE_FINGER: - fingerSprite = this.middle_finger; - break; - case KeyButton.RING_FINGER: - fingerSprite = this.ring_filger; - break; - case KeyButton.LITTLE_FINGER: - fingerSprite = this.little_finger; - break; - } - return fingerSprite; -} - -Hand.prototype.highlightOnFinger = function(fingerNo) { - // console.log(fingerNo); - var pressingFingerSprite = this.getFingerSprite(fingerNo); - if(pressingFingerSprite === this.prevFingerSprite) - return; - - if(this.prevFingerSprite !== null) - this.unhighlightOffFinger(); - - if(pressingFingerSprite !== null) { - // console.log(pressingFingerSprite); - pressingFingerSprite.tint = 0xffff00; - pressingFingerSprite.alpha = 1; - } - - this.prevFingerSprite = pressingFingerSprite; -} - -Hand.prototype.unhighlightOffFinger = function() { - if(this.prevFingerSprite === null) - return; - this.prevFingerSprite.tint = 0xffffff; - this.prevFingerSprite.alpha = 0.5; - - this.prevFingerSprite = null; -} - - -Hand.DEFAULT_Y_PX = 540; // 680; - - - -LeftHand.prototype = Object.create(Hand.prototype); -LeftHand.constructor = LeftHand; - -function LeftHand(keyMapper) { - Hand.call(this, keyMapper); - - this.move(this.thumb, 126, -50); - this.move(this.index_finger, 96, -102); - this.move(this.middle_finger, 58, -116); - this.move(this.ring_filger, 32, -110); - this.move(this.little_finger, 4, -106); - this.moveToDefaultPosition(); -} - -LeftHand.prototype.moveTo = function(key) { - if(key === undefined) - return; - - // console.log(key); - var keyCode = this.keyMapper.getKeyIDOfText(key.normalText); - - if(keyCode != "Space") - this.moveRow(key.row, key); - else - this.moveRow(3, key); - - switch(key.keyCode) { - case "Key5": - case "KeyT": - case "KeyG": - case "KeyB": - this.moveColumn(5, key); - break; - } - - this.highlightOnFinger(key.fingerType); -} - -LeftHand.prototype.moveColumn = function(rowNo, key) { - var rowIndex = rowNo - 1; - this.hand.x = LeftHand.DEFAULT_X_PX + (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * rowIndex; - - if(key === null) - return; - - var keyCode = this.keyMapper.getKeyIDOfText(key.normalText); - switch(keyCode) { - case "Key5": - case "KeyT": - case "KeyG": - case "KeyB": - this.hand.x += Keyboard.DEFAULT_KEY_SIZE_PX; - break; - - case "ShiftLeft": - this.hand.x = LeftHand.DEFAULT_X_PX; - break; - } -} - - -LeftHand.DEFAULT_X_PX = 100; - - - -RightHand.prototype = Object.create(Hand.prototype); -RightHand.constructor = RightHand; - -function RightHand(keyMapper) { - Hand.call(this, keyMapper); - - this.hand.scale.x *= -1; - - this.move(this.thumb, 126, -50); - this.move(this.index_finger, 96, -102); - this.move(this.middle_finger, 58, -116); - this.move(this.ring_filger, 32, -110); - this.move(this.little_finger, 4, -106); - this.moveToDefaultPosition(); -} - -RightHand.prototype.moveTo = function(key) { - if(key === undefined) - return; - - // console.log(key); - var keyCode = this.keyMapper.getKeyIDOfText(key.normalText); - - if(keyCode != "Space") - this.moveRow(key.row, key); - else - this.moveRow(3, key); - - switch(key.keyCode) { - case "Key5": - case "KeyT": - case "KeyG": - case "KeyB": - this.moveColumn(5, key); - break; - } - - this.highlightOnFinger(key.fingerType); -} - -RightHand.prototype.moveColumn = function(rowNo, key) { - var rowIndex = rowNo - 1; - this.hand.x = RightHand.DEFAULT_X_PX + (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * rowIndex; - - if(key === null) - return; - - var keyCode = this.keyMapper.getKeyIDOfText(key.normalText); - switch(keyCode) { - case "Key6": - case "KeyY": - case "KeyH": - case "KeyN": - this.hand.x -= Keyboard.DEFAULT_KEY_SIZE_PX; - break; - - case "Minus": - case "BracketLeft": - case "Quote": - this.hand.x += (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * 3; - break; - - case "Equal": - case "BracketRight": - this.hand.x += (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * 5; - break; - - case "Backslash": - this.hand.x += (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * 7; - break; - - case "Enter": - this.hand.x = RightHand.DEFAULT_X_PX + (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * 6; - break; - - case "ShiftRight": - this.hand.x = RightHand.DEFAULT_X_PX + (Keyboard.DEFAULT_KEY_SIZE_PX / 2) * 6; - break; - } -} - - -RightHand.DEFAULT_X_PX = 810; \ No newline at end of file diff --git a/src/game/typing/whac_a_mole/loading.js b/src/game/typing/whac_a_mole/loading.js index 16ace8a..d98138a 100644 --- a/src/game/typing/whac_a_mole/loading.js +++ b/src/game/typing/whac_a_mole/loading.js @@ -29,8 +29,7 @@ var Loading = { startLoading: function() { game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); - // Hand.loadResources(); - // Animal.loadResources(); + game.load.image('mole', '../../../resources/image/character/mole.png'); // game.load.image('hand_left', '../../../resources/image/ui/hand_left.png'); @@ -82,11 +81,11 @@ var Loading = { // this.preloadBar.alpha = 1; if(isDebugMode()) { - this.state.start('TypingPractice'); + this.state.start('WhacAMole'); return; } - this.state.start('TypingPractice'); + this.state.start('WhacAMole'); // this.startMenu(); // this.startTypingTestStage(); // this.startTypingTestResult(); diff --git a/src/game/typing/whac_a_mole/main.js b/src/game/typing/whac_a_mole/main.js index ebed1d4..c30d4c5 100644 --- a/src/game/typing/whac_a_mole/main.js +++ b/src/game/typing/whac_a_mole/main.js @@ -1,7 +1,7 @@ ///////////////////////////// // Main game -const CONTENT_ID = "Typing Practice"; +const CONTENT_ID = "WhacAMole"; let game = new Phaser.Game( GAME_SCREEN_SIZE.x, GAME_SCREEN_SIZE.y, @@ -12,5 +12,5 @@ let game = new Phaser.Game( game.state.add('Loading', Loading); game.state.start('Loading'); -game.state.add('TypingPractice', TypingPractice); +game.state.add('WhacAMole', WhacAMole); // game.state.add('Menu', Menu); diff --git a/src/game/typing/whac_a_mole/mole.js b/src/game/typing/whac_a_mole/mole.js new file mode 100644 index 0000000..d403e12 --- /dev/null +++ b/src/game/typing/whac_a_mole/mole.js @@ -0,0 +1,95 @@ +function Mole(x, y, scale) { + this.mole = game.add.image(x, y, "mole"); + this.mole.scale.set(scale); + // this.move(x, y); + + // return this.mole; +} + +Mole.prototype.alpha = function(value) { + this.mole.alpha = value; +} + +Mole.prototype.move = function(x, y) { + this.mole.x = x; + this.mole.y = y; + + this.posY = y; +} + +Mole.prototype.anchor = function(x, y) { + this.mole.anchor.x = x; + this.mole.anchor.y = y; +} + +Mole.prototype.showUpTween = function(showUpHeight) { + // if(this.tween != undefined && this.tween.isRunning) { + // this.tween.stop(); + // // this.tween.pendingDelete = false; + // // this.mole.y = BigMole.START_POS_Y; + // } + // console.log(this.mole); + // console.log("this.posY : " + this.posY); + this.tween = game.add.tween(this.mole) + .from( { y: BigMole.START_POS_Y }, 10 ) + .to( { y: BigMole.SHOW_UP_POS_Y }, BigMole.SHOW_UP_TIME_MS, "Quart.easeOut"); + // .from( { y: this.posY }, 10 ) + // .to( { y: (this.posY + showUpHeight) }, BigMole.SHOW_UP_TIME_MS, "Quart.easeOut"); + this.tween.start(); +} + + + + +// big mole + +BigMole.prototype = Object.create(Mole.prototype); +BigMole.constructor = BigMole; + +function BigMole(x, y) { + Mole.call(this, x, y, BigMole.SCALE); + this.anchor(0.5, 0); +} + +BigMole.prototype.showUp = function() { + this.showUpTween(100); +} + + +BigMole.SCALE = 1; +BigMole.START_POS_Y = 200; +BigMole.SHOW_UP_POS_Y = 100; +BigMole.SHOW_UP_TIME_MS = 200; + + + + +// keyboard mole + +KeyboardMole.prototype = Object.create(Mole.prototype); +KeyboardMole.constructor = KeyboardMole; + +function KeyboardMole(keyboard) { + this.keyboard = keyboard; + + Mole.call(this, 0, 0, KeyboardMole.SCALE); + this.anchor(0, 0); + this.hide(); +} + +KeyboardMole.prototype.show = function() { + this.alpha(1); +} + +KeyboardMole.prototype.hide = function() { + this.alpha(0); +} + +KeyboardMole.prototype.moveToKey = function(text) { + var x = this.keyboard.getKeyPosX(text); + var y = this.keyboard.getKeyPosY(text); + this.move(x, y); +} + + +KeyboardMole.SCALE = 0.5; \ No newline at end of file diff --git a/src/web/client/whac_a_mole.html b/src/web/client/whac_a_mole.html index ffdb367..732ed28 100644 --- a/src/web/client/whac_a_mole.html +++ b/src/web/client/whac_a_mole.html @@ -61,12 +61,12 @@ - + @@ -85,6 +85,6 @@ -
+
\ No newline at end of file