Those Other Screens

2007/07/22 – alpha release
The code needs some cleanup, but everything is here.
Suggestions welcome in the forum.

Pause. Game Over. Level Clear. The Title Screen.

A Game is a Collection of Programs

There’s the fun, interactive part, and then there’s the rest of the infrastructure, like the title, high score, and pause screens.

Allow Swapping Between Two Screens

swap : function (toScreen) {
        this.screen = toScreen;
        this.screen.show();
    },
    show : function () {
        $(this.id).style.display = 'block';
    },
    
    hide : function () {
        $(this.id).style.display = 'none';
    }

Setup Transparent Overlay Effect

.overlay {
  height: 300px;
  text-align: center;
  background-color: transparent;
  background-image:url(../../sprites/dimgray.png);
  padding: 0px;
  padding-top:50px;
  color:#666666;
  display: none;
}

Show the Title Screen on Load

var TITLE_SCREEN = Object.extend(new Screen('title'), {
    show : function () {
	Screen.prototype.show.call(this);
    },
    
    keyUp : function(e) {
	if (e.keyCode == Event.KEY_RETURN) {
	    this.hide();
	    gameconsole.swap(GAME_SCREEN);
	}
    }
});
        this.screen.show();
    gameconsole = new Console(GAME_SCREEN);
    gameconsole.start();
    gameconsole = new Console(TITLE_SCREEN);
    gameconsole.start();
  <!-- title screen -->
  <div id="title" class="overlay screen">
    <img src="../sprites/brickslayerlogo.png" alt="brickslayer" />
    <p>use <strong>arrow keys</strong> to move paddle</p>
    <p>press <strong>up arrow</strong> to launch ball</p>
    <p>press <strong>p</strong> to pause game</p>
    <p class="pressenter">press <strong>enter</strong> to start</p>
  </div>

Pause the Game on Pressing P

var KEY_P = "P".charCodeAt(0)

var PAUSE_SCREEN = Object.extend(new Screen('pause'), {
    keyDown : function(e) {
        if (e.keyCode == KEY_P) {
            this.hide();
            gameconsole.swap(GAME_SCREEN);
        }
    }
});
        case KEY_P:
            gameconsole.swap(PAUSE_SCREEN);
            break;
  <!-- pause screen -->
  <div id="pause" class="overlay screen">
    <img src="../sprites/paused.png" alt="paused"/>
    <p>press <strong>p</strong> again to unpause</p>
  </div>

Congratulate Player after Clearing a Level

// milliseconds to show level clear / game over screen
var CLEARED_SPEED = 2000; 
var LEVEL_CLEAR_SCREEN = Object.extend(new Screen('clear'), {
    show : function () {
        Screen.prototype.show.call(this);
        window.setTimeout(function () { level_init(current_level+1); }, CLEARED_SPEED);
        gameconsole.scheduleSwap(GAME_SCREEN, CLEARED_SPEED);
    }
})
  <!-- level clear screen -->
  <div id="clear" class="overlay screen">
    <img src="../sprites/levelclear.png" alt="level clear!"/>
  </div>
                gameconsole.swap(LEVEL_CLEAR_SCREEN);

Swap Back to Game after Level Clear Screen

scheduleSwap : function (next, speed) {
        _old = this.screen;
        _con = this;
        window.setTimeout(
            function () {
                if (_con.screen == _old) {
                    _old.hide();
                    _con.swap(next);
                }
            }, speed || SWAP_SPEED);
    }

Show Game Over and Swap Back to Title

var SWAP_SPEED = 3500; // milliseconds to show game over/title/high scores

var GAME_OVER_SCREEN = Object.extend(new Screen('gameover'), {
    show : function () {        
        Screen.prototype.show.call(this);
	gameconsole.scheduleSwap(TITLE_SCREEN);
        //$('player_score').value = score;
        //$('player_level').value = current_level;
        //if (score > low_high_score) {
        //gameconsole.scheduleSwap(ENTER_NAME_SCREEN);
    //} else {
        //gameconsole.scheduleSwap(SCORES_SCREEN);
    //}
        window.setTimeout(function () { game_reset(); }, SWAP_SPEED);
    }
});
        gameconsole.swap(GAME_OVER_SCREEN);
  <!-- game over screen -->
  <div id="gameover" class="overlay screen">
    <img src="../sprites/gameover.png" alt="game over"/>
  </div>
Scroll to Top