提交 e65111f1 编写于 作者: G Gabriele Cirulli

add win condition

上级 4b3055fc
...@@ -8,6 +8,7 @@ function GameManager(size, InputManager, Actuator) { ...@@ -8,6 +8,7 @@ function GameManager(size, InputManager, Actuator) {
this.score = 0; this.score = 0;
this.over = false; this.over = false;
this.won = false;
this.inputManager.on("move", this.move.bind(this)); this.inputManager.on("move", this.move.bind(this));
...@@ -43,7 +44,8 @@ GameManager.prototype.addRandomTile = function () { ...@@ -43,7 +44,8 @@ GameManager.prototype.addRandomTile = function () {
GameManager.prototype.actuate = function () { GameManager.prototype.actuate = function () {
this.actuator.actuate(this.grid, { this.actuator.actuate(this.grid, {
score: this.score, score: this.score,
over: this.over over: this.over,
won: this.won
}); });
}; };
...@@ -69,7 +71,7 @@ GameManager.prototype.move = function (direction) { ...@@ -69,7 +71,7 @@ GameManager.prototype.move = function (direction) {
// 0: up, 1: right, 2:down, 3: left // 0: up, 1: right, 2:down, 3: left
var self = this; var self = this;
if (this.over) return; // Don't do anything if the game's over if (this.over || this.won) return; // Don't do anything if the game's over
var cell, tile; var cell, tile;
...@@ -104,7 +106,8 @@ GameManager.prototype.move = function (direction) { ...@@ -104,7 +106,8 @@ GameManager.prototype.move = function (direction) {
// Update the score // Update the score
self.score += merged.value; self.score += merged.value;
// Something's moved for sure // The mighty 2048 tile
if (merged.value === 2048) self.won = true;
} else { } else {
self.moveTile(tile, positions.farthest); self.moveTile(tile, positions.farthest);
} }
......
...@@ -22,9 +22,8 @@ HTMLActuator.prototype.actuate = function (grid, metadata) { ...@@ -22,9 +22,8 @@ HTMLActuator.prototype.actuate = function (grid, metadata) {
self.updateScore(metadata.score); self.updateScore(metadata.score);
if (metadata.over) { if (metadata.over) self.message(false); // You lose
self.gameOver(); if (metadata.won) self.message(true); // You win!
}
}); });
}; };
...@@ -87,6 +86,7 @@ HTMLActuator.prototype.updateScore = function (score) { ...@@ -87,6 +86,7 @@ HTMLActuator.prototype.updateScore = function (score) {
} }
}; };
HTMLActuator.prototype.gameOver = function () { HTMLActuator.prototype.message = function (won) {
this.gameContainer.classList.add("game-over"); var type = won ? "game-won" : "game-over";
this.gameContainer.classList.add(type);
}; };
...@@ -53,7 +53,7 @@ h1.title { ...@@ -53,7 +53,7 @@ h1.title {
position: relative; position: relative;
float: right; float: right;
background: #bbada0; background: #bbada0;
padding: 15px 30px; padding: 15px 20px;
font-size: 25px; font-size: 25px;
height: 25px; height: 25px;
line-height: 47px; line-height: 47px;
...@@ -143,13 +143,12 @@ hr { ...@@ -143,13 +143,12 @@ hr {
width: 500px; width: 500px;
height: 500px; height: 500px;
box-sizing: border-box; } box-sizing: border-box; }
.game-container.game-over:after { .game-container.game-over:after, .game-container.game-won:after {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
content: "Game over!";
display: block; display: block;
background: rgba(238, 228, 218, 0.5); background: rgba(238, 228, 218, 0.5);
text-align: center; text-align: center;
...@@ -162,6 +161,12 @@ hr { ...@@ -162,6 +161,12 @@ hr {
-moz-animation: fade-in 800ms ease 1200ms; -moz-animation: fade-in 800ms ease 1200ms;
-webkit-animation-fill-mode: both; -webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both; } -moz-animation-fill-mode: both; }
.game-container.game-over:after {
content: "Game over!"; }
.game-container.game-won:after {
content: "You win!";
background: rgba(237, 194, 46, 0.5);
color: #f9f6f2; }
.grid-container { .grid-container {
position: absolute; position: absolute;
......
...@@ -64,7 +64,7 @@ h1.title { ...@@ -64,7 +64,7 @@ h1.title {
position: relative; position: relative;
float: right; float: right;
background: $game-container-background; background: $game-container-background;
padding: 15px 30px; padding: 15px 20px;
font-size: $height; font-size: $height;
height: $height; height: $height;
line-height: $height + 22px; line-height: $height + 22px;
...@@ -156,24 +156,35 @@ hr { ...@@ -156,24 +156,35 @@ hr {
height: $field-width; height: $field-width;
box-sizing: border-box; box-sizing: border-box;
&.game-over, &.game-won {
&:after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: block;
background: rgba($tile-color, .5);
text-align: center;
height: $field-width;
line-height: $field-width;
z-index: 100;
font-size: 60px;
font-weight: bold;
@include animation(fade-in 800ms ease $transition-speed * 12);
@include animation-fill-mode(both);
}
}
&.game-over:after { &.game-over:after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "Game over!"; content: "Game over!";
display: block; }
background: rgba($tile-color, .5);
text-align: center;
height: $field-width;
line-height: $field-width;
z-index: 100;
font-size: 60px;
font-weight: bold;
@include animation(fade-in 800ms ease $transition-speed * 12); &.game-won:after {
@include animation-fill-mode(both); content: "You win!";
background: rgba($tile-gold-color, .5);
color: $bright-text-color;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册