提交 39ebf51c 编写于 作者: G Gabriele Cirulli

fix merge conflict

...@@ -15,7 +15,10 @@ ...@@ -15,7 +15,10 @@
<div class="container"> <div class="container">
<div class="heading"> <div class="heading">
<h1 class="title">2048</h1> <h1 class="title">2048</h1>
<div class="score-container">0</div> <div class="scores-container">
<div class="score-container">0</div>
<div class="best-container">0</div>
</div>
</div> </div>
<p class="game-intro">Join the numbers and get to the <strong>2048 tile!</strong></p> <p class="game-intro">Join the numbers and get to the <strong>2048 tile!</strong></p>
...@@ -73,6 +76,7 @@ ...@@ -73,6 +76,7 @@
<script src="js/html_actuator.js"></script> <script src="js/html_actuator.js"></script>
<script src="js/grid.js"></script> <script src="js/grid.js"></script>
<script src="js/tile.js"></script> <script src="js/tile.js"></script>
<script src="js/local_score_manager.js"></script>
<script src="js/game_manager.js"></script> <script src="js/game_manager.js"></script>
<script src="js/application.js"></script> <script src="js/application.js"></script>
</body> </body>
......
// Wait till the browser is ready to render the game (avoids glitches) // Wait till the browser is ready to render the game (avoids glitches)
window.requestAnimationFrame(function () { window.requestAnimationFrame(function () {
var manager = new GameManager(4, KeyboardInputManager, HTMLActuator); new GameManager(4, KeyboardInputManager, HTMLActuator, LocalScoreManager);
}); });
function GameManager(size, InputManager, Actuator) { function GameManager(size, InputManager, Actuator, ScoreManager) {
this.size = size; // Size of the grid this.size = size; // Size of the grid
this.inputManager = new InputManager; this.inputManager = new InputManager;
this.scoreManager = new ScoreManager;
this.actuator = new Actuator; this.actuator = new Actuator;
this.startTiles = 2; this.startTiles = 2;
...@@ -51,11 +52,17 @@ GameManager.prototype.addRandomTile = function () { ...@@ -51,11 +52,17 @@ GameManager.prototype.addRandomTile = function () {
// Sends the updated grid to the actuator // Sends the updated grid to the actuator
GameManager.prototype.actuate = function () { GameManager.prototype.actuate = function () {
if (this.scoreManager.get() < this.score) {
this.scoreManager.set(this.score);
}
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 won: this.won,
bestScore: this.scoreManager.get()
}); });
}; };
// Save all tile positions and remove merger info // Save all tile positions and remove merger info
......
function HTMLActuator() { function HTMLActuator() {
this.tileContainer = document.querySelector(".tile-container"); this.tileContainer = document.querySelector(".tile-container");
this.scoreContainer = document.querySelector(".score-container"); this.scoreContainer = document.querySelector(".score-container");
this.bestContainer = document.querySelector(".best-container");
this.messageContainer = document.querySelector(".game-message"); this.messageContainer = document.querySelector(".game-message");
this.score = 0; this.score = 0;
...@@ -21,6 +22,7 @@ HTMLActuator.prototype.actuate = function (grid, metadata) { ...@@ -21,6 +22,7 @@ HTMLActuator.prototype.actuate = function (grid, metadata) {
}); });
self.updateScore(metadata.score); self.updateScore(metadata.score);
self.updateBestScore(metadata.bestScore);
if (metadata.over) self.message(false); // You lose if (metadata.over) self.message(false); // You lose
if (metadata.won) self.message(true); // You win! if (metadata.won) self.message(true); // You win!
...@@ -103,11 +105,17 @@ HTMLActuator.prototype.updateScore = function (score) { ...@@ -103,11 +105,17 @@ HTMLActuator.prototype.updateScore = function (score) {
} }
}; };
HTMLActuator.prototype.updateBestScore = function (bestScore) {
this.bestContainer.textContent = bestScore;
};
HTMLActuator.prototype.message = function (won) { HTMLActuator.prototype.message = function (won) {
var type = won ? "game-won" : "game-over"; var type = won ? "game-won" : "game-over";
var message = won ? "You win!" : "Game over!" var message = won ? "You win!" : "Game over!";
// if (ga) ga("send", "event", "game", "end", type, this.score); if (typeof ga !== "undefined") {
ga("send", "event", "game", "end", type, this.score);
}
this.messageContainer.classList.add(type); this.messageContainer.classList.add(type);
this.messageContainer.getElementsByTagName("p")[0].textContent = message; this.messageContainer.getElementsByTagName("p")[0].textContent = message;
......
window.fakeStorage = {
_data : {},
setItem : function (id, val) {
console.log('set');
return this._data[id] = String(val);
},
getItem : function (id) {
return this._data.hasOwnProperty(id) ? this._data[id] : undefined;
},
removeItem : function (id) { return delete this._data[id]; },
clear : function () { return this._data = {}; }
};
function LocalScoreManager() {
var localSupported = !!window.localStorage;
this.key = 'bestScore';
this.storage = localSupported ? window.localStorage : window.fakeStorage;
}
LocalScoreManager.prototype.get = function () {
var score = this.storage.getItem(this.key);
if (typeof score === "undefined" || score === null) {
score = 0;
}
return score;
};
LocalScoreManager.prototype.set = function (score) {
this.storage.setItem(this.key, score);
};
...@@ -49,9 +49,12 @@ h1.title { ...@@ -49,9 +49,12 @@ h1.title {
top: -50px; top: -50px;
opacity: 0; } } opacity: 0; } }
.score-container { .scores-container {
float: right; }
.score-container, .best-container {
position: relative; position: relative;
float: right; display: inline-block;
background: #bbada0; background: #bbada0;
padding: 15px 25px; padding: 15px 25px;
font-size: 25px; font-size: 25px;
...@@ -60,19 +63,19 @@ h1.title { ...@@ -60,19 +63,19 @@ h1.title {
font-weight: bold; font-weight: bold;
border-radius: 3px; border-radius: 3px;
color: white; color: white;
margin-top: 8px; } margin-top: 8px;
.score-container:after { text-align: center; }
.score-container:after, .best-container:after {
position: absolute; position: absolute;
width: 100%; width: 100%;
top: 10px; top: 10px;
left: 0; left: 0;
content: "Score";
text-transform: uppercase; text-transform: uppercase;
font-size: 13px; font-size: 13px;
line-height: 13px; line-height: 13px;
text-align: center; text-align: center;
color: #eee4da; } color: #eee4da; }
.score-container .score-addition { .score-container .score-addition, .best-container .score-addition {
position: absolute; position: absolute;
right: 30px; right: 30px;
color: red; color: red;
...@@ -86,6 +89,12 @@ h1.title { ...@@ -86,6 +89,12 @@ h1.title {
-webkit-animation-fill-mode: both; -webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both; } -moz-animation-fill-mode: both; }
.score-container:after {
content: "Score"; }
.best-container:after {
content: "Best"; }
p { p {
margin-top: 0; margin-top: 0;
margin-bottom: 10px; margin-bottom: 10px;
......
...@@ -58,11 +58,15 @@ h1.title { ...@@ -58,11 +58,15 @@ h1.title {
} }
} }
.score-container { .scores-container {
float: right;
}
.score-container, .best-container {
$height: 25px; $height: 25px;
position: relative; position: relative;
float: right; display: inline-block;
background: $game-container-background; background: $game-container-background;
padding: 15px 25px; padding: 15px 25px;
font-size: $height; font-size: $height;
...@@ -72,13 +76,13 @@ h1.title { ...@@ -72,13 +76,13 @@ h1.title {
border-radius: 3px; border-radius: 3px;
color: white; color: white;
margin-top: 8px; margin-top: 8px;
text-align: center;
&:after { &:after {
position: absolute; position: absolute;
width: 100%; width: 100%;
top: 10px; top: 10px;
left: 0; left: 0;
content: "Score";
text-transform: uppercase; text-transform: uppercase;
font-size: 13px; font-size: 13px;
line-height: 13px; line-height: 13px;
...@@ -100,6 +104,14 @@ h1.title { ...@@ -100,6 +104,14 @@ h1.title {
} }
} }
.score-container:after {
content: "Score";
}
.best-container:after {
content: "Best"
}
p { p {
margin-top: 0; margin-top: 0;
margin-bottom: 10px; margin-bottom: 10px;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册