         if lastBlock.text == block.text {
             lastBlock.state = CardNodeState.Finished
             block.state = CardNodeState.Finished
+            score = score + 1
+        }
+    }
+    
+    func revealBlocks(){
+        for b in blocks! {
+            b.state = CardNodeState.Selected
+        }
+    }
+    
+    func hideBlocks() {
+        for b in blocks! {
+            b.state = CardNodeState.Normal
         }
     }
     
     func btnTouched(touch:UITouch){
         let location = touch.locationInNode(self)
         guard btn!.containsPoint(location) else { return }
+        guard state != .Reveal else { return }
+        state = .Reveal
         resetBlocks()
+        score = 0
+        let seq = SKAction.sequence([
+            SKAction.runBlock{self.revealBlocks()},
+            SKAction.waitForDuration(1),
+            SKAction.runBlock{
+                self.hideBlocks()
+                self.state = .Play
+            },
+            ])
+        runAction(seq)
     }
     
-    func hiddenbtnTouched(touch:UITouch){
-        let location = touch.locationInNode(self)
-        guard hiddenbtn!.containsPoint(location) else { return }
+    func showHiddenText(){
         let text = "Stela"+"Will "+"you  "+"marry"+"me?❤️ "
         let actions:[SKAction] = blocks!.enumerate().map {
             let c = String(text[text.startIndex.advancedBy($0)])

    }
    
    func blockTouched(touch: UITouch){
        let location = touch.locationInNode(self)
        let idx = blocks?.indexOf{
            return $0.containsPoint(location)

import SpriteKit
import GameplayKit

enum GameState {
    case Init
    case Reveal
    case Play
    case Show
}

class GameScene: SKScene {
    
    var blocks:[CardNode]? = nil
    var btn:SKLabelNode? = nil
    var hiddenbtn:SKLabelNode? = nil
    var state = GameState.Init
    var score = 0
    
    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
