-
Notifications
You must be signed in to change notification settings - Fork 95
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
referring to alexwhen's idea, make image much smaller
- Loading branch information
Showing
32 changed files
with
4,390 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Contributing | ||
Changes and improvements are more than welcome! Feel free to fork and open a pull request. | ||
|
||
Please follow the house rules to have a bigger chance of your contribution being merged. | ||
|
||
## House rules | ||
|
||
### How to make changes | ||
- To make changes, create a new branch based on `master` (do not create one from `gh-pages` unless strictly necessary) and make them there, then create a Pull Request to master. | ||
`gh-pages` is different from master in that it contains sharing features, analytics and other things that have no direct bearing with the game. `master` is the "pure" version of the game. | ||
- If you want to modify the CSS, please edit the SCSS files present in `style/`: `main.scss` and others. Don't edit the `main.css`, because it's supposed to be generated. | ||
In order to compile your SCSS modifications, you need to use the `sass` gem (install it by running `gem install sass` once Ruby is installed). | ||
To run SASS, simply use the following command: | ||
`sass --unix-newlines --watch style/main.scss` | ||
SASS will automatically recompile your css when changed. | ||
- `Rakefile` contains some tasks that help during development. Feel free to add useful tasks if needed. | ||
- Please use 2-space indentation when editing the JavaScript. A `.jshintrc` file is present, which will help your code to follow the guidelines if you install and run `jshint`. | ||
- Please test your modification thoroughly before submitting your Pull Request. | ||
|
||
### Changes that might not be accepted | ||
We have to be conservative with the core game. This means that some modifications won't be merged, or will have to be evaluated carefully before being merged: | ||
|
||
- Undo/redo features | ||
- Save/reload features | ||
- Changes to how the tiles look or their contents | ||
- Changes to the layout | ||
- Changes to the grid size | ||
|
||
### Changes that are welcome | ||
- Bug fixes | ||
- Compatibility improvements | ||
- "Under the hood" enhancements | ||
- Small changes that don't have an impact on the core gameplay |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,15 @@ | ||
FROM ubuntu:12.04 | ||
# Using a compact OS | ||
FROM alpine:latest | ||
|
||
RUN apt-get update | ||
RUN apt-get install -y nginx zip curl | ||
MAINTAINER Golfen Guo <[email protected]> | ||
|
||
RUN echo "daemon off;" >> /etc/nginx/nginx.conf | ||
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master | ||
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip | ||
# Install Nginx | ||
RUN apk --update add nginx | ||
|
||
# Add 2048 stuff into Nginx server | ||
COPY . /usr/share/nginx/html | ||
|
||
EXPOSE 80 | ||
|
||
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"] | ||
# Start Nginx and keep it from running background | ||
CMD ["nginx", "-g", "daemon off;"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
The MIT License (MIT) | ||
|
||
Copyright (c) 2014 Gabriele Cirulli | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in | ||
all copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>2048</title> | ||
|
||
<link href="style/main.css" rel="stylesheet" type="text/css"> | ||
<link rel="shortcut icon" href="favicon.ico"> | ||
<link rel="apple-touch-icon" href="meta/apple-touch-icon.png"> | ||
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x1096.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone 5+ --> | ||
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x920.png" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone, retina --> | ||
<meta name="apple-mobile-web-app-capable" content="yes"> | ||
<meta name="apple-mobile-web-app-status-bar-style" content="black"> | ||
|
||
<meta name="HandheldFriendly" content="True"> | ||
<meta name="MobileOptimized" content="320"> | ||
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1, user-scalable=no, minimal-ui"> | ||
</head> | ||
<body> | ||
<div class="container"> | ||
<div class="heading"> | ||
<h1 class="title">2048</h1> | ||
<div class="scores-container"> | ||
<div class="score-container">0</div> | ||
<div class="best-container">0</div> | ||
</div> | ||
</div> | ||
|
||
<div class="above-game"> | ||
<p class="game-intro">Join the numbers and get to the <strong>2048 tile!</strong></p> | ||
<a class="restart-button">New Game</a> | ||
</div> | ||
|
||
<div class="game-container"> | ||
<div class="game-message"> | ||
<p></p> | ||
<div class="lower"> | ||
<a class="keep-playing-button">Keep going</a> | ||
<a class="retry-button">Try again</a> | ||
</div> | ||
</div> | ||
|
||
<div class="grid-container"> | ||
<div class="grid-row"> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
</div> | ||
<div class="grid-row"> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
</div> | ||
<div class="grid-row"> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
</div> | ||
<div class="grid-row"> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
<div class="grid-cell"></div> | ||
</div> | ||
</div> | ||
|
||
<div class="tile-container"> | ||
|
||
</div> | ||
</div> | ||
|
||
<p class="game-explanation"> | ||
<strong class="important">How to play:</strong> Use your <strong>arrow keys</strong> to move the tiles. When two tiles with the same number touch, they <strong>merge into one!</strong> | ||
</p> | ||
<hr> | ||
<p> | ||
<strong class="important">Note:</strong> This site is the official version of 2048. You can play it on your phone via <a href="http://git.io/2048">http://git.io/2048.</a> All other apps or sites are derivatives or fakes, and should be used with caution. | ||
</p> | ||
<hr> | ||
<p> | ||
Created by <a href="http://gabrielecirulli.com" target="_blank">Gabriele Cirulli.</a> Based on <a href="https://itunes.apple.com/us/app/1024!/id823499224" target="_blank">1024 by Veewo Studio</a> and conceptually similar to <a href="http://asherv.com/threes/" target="_blank">Threes by Asher Vollmer.</a> | ||
</p> | ||
</div> | ||
|
||
<script src="js/bind_polyfill.js"></script> | ||
<script src="js/classlist_polyfill.js"></script> | ||
<script src="js/animframe_polyfill.js"></script> | ||
<script src="js/keyboard_input_manager.js"></script> | ||
<script src="js/html_actuator.js"></script> | ||
<script src="js/grid.js"></script> | ||
<script src="js/tile.js"></script> | ||
<script src="js/local_storage_manager.js"></script> | ||
<script src="js/game_manager.js"></script> | ||
<script src="js/application.js"></script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
(function () { | ||
var lastTime = 0; | ||
var vendors = ['webkit', 'moz']; | ||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { | ||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; | ||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || | ||
window[vendors[x] + 'CancelRequestAnimationFrame']; | ||
} | ||
|
||
if (!window.requestAnimationFrame) { | ||
window.requestAnimationFrame = function (callback) { | ||
var currTime = new Date().getTime(); | ||
var timeToCall = Math.max(0, 16 - (currTime - lastTime)); | ||
var id = window.setTimeout(function () { | ||
callback(currTime + timeToCall); | ||
}, | ||
timeToCall); | ||
lastTime = currTime + timeToCall; | ||
return id; | ||
}; | ||
} | ||
|
||
if (!window.cancelAnimationFrame) { | ||
window.cancelAnimationFrame = function (id) { | ||
clearTimeout(id); | ||
}; | ||
} | ||
}()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
// Wait till the browser is ready to render the game (avoids glitches) | ||
window.requestAnimationFrame(function () { | ||
new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Function.prototype.bind = Function.prototype.bind || function (target) { | ||
var self = this; | ||
return function (args) { | ||
if (!(args instanceof Array)) { | ||
args = [args]; | ||
} | ||
self.apply(target, args); | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
(function () { | ||
if (typeof window.Element === "undefined" || | ||
"classList" in document.documentElement) { | ||
return; | ||
} | ||
|
||
var prototype = Array.prototype, | ||
push = prototype.push, | ||
splice = prototype.splice, | ||
join = prototype.join; | ||
|
||
function DOMTokenList(el) { | ||
this.el = el; | ||
// The className needs to be trimmed and split on whitespace | ||
// to retrieve a list of classes. | ||
var classes = el.className.replace(/^\s+|\s+$/g, '').split(/\s+/); | ||
for (var i = 0; i < classes.length; i++) { | ||
push.call(this, classes[i]); | ||
} | ||
} | ||
|
||
DOMTokenList.prototype = { | ||
add: function (token) { | ||
if (this.contains(token)) return; | ||
push.call(this, token); | ||
this.el.className = this.toString(); | ||
}, | ||
contains: function (token) { | ||
return this.el.className.indexOf(token) != -1; | ||
}, | ||
item: function (index) { | ||
return this[index] || null; | ||
}, | ||
remove: function (token) { | ||
if (!this.contains(token)) return; | ||
for (var i = 0; i < this.length; i++) { | ||
if (this[i] == token) break; | ||
} | ||
splice.call(this, i, 1); | ||
this.el.className = this.toString(); | ||
}, | ||
toString: function () { | ||
return join.call(this, ' '); | ||
}, | ||
toggle: function (token) { | ||
if (!this.contains(token)) { | ||
this.add(token); | ||
} else { | ||
this.remove(token); | ||
} | ||
|
||
return this.contains(token); | ||
} | ||
}; | ||
|
||
window.DOMTokenList = DOMTokenList; | ||
|
||
function defineElementGetter(obj, prop, getter) { | ||
if (Object.defineProperty) { | ||
Object.defineProperty(obj, prop, { | ||
get: getter | ||
}); | ||
} else { | ||
obj.__defineGetter__(prop, getter); | ||
} | ||
} | ||
|
||
defineElementGetter(HTMLElement.prototype, 'classList', function () { | ||
return new DOMTokenList(this); | ||
}); | ||
})(); |
Oops, something went wrong.