Skip to content

Commit

Permalink
adsdssa
Browse files Browse the repository at this point in the history
  • Loading branch information
enterheadlines authored Sep 8, 2024
1 parent 605054d commit 7c607a4
Show file tree
Hide file tree
Showing 24 changed files with 2,366 additions and 3 deletions.
6 changes: 4 additions & 2 deletions infamyOS/infamyos.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,14 @@
}

.content {
margin-left: 20px;
margin-left: 10px;
padding: 20px; /* Added padding */
flex-grow: 1; /* Allow content to occupy remaining space */
transition: margin-left 0.3s ease; /* Animation */
}

#toggeButton{
font-size: 50px;
}
button {
padding: 10px 20px;
cursor: pointer;
Expand Down
Binary file added local-stuff/1/favicon.ico
Binary file not shown.
87 changes: 87 additions & 0 deletions local-stuff/1/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>1 | 3kh0</title>
<link href="style/main.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<link rel="apple-touch-icon" href="meta/apple-touch-icon.png" />
<meta name="apple-mobile-web-app-capable" content="yes" />

<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>
<script src="/js/main.js"></script>
<body>
<div class="container">
<div class="heading">
<h1 class="title">1</h1>
<div class="scores-container">
<div class="score-container">0</div>
<div class="best-container">0</div>
</div>
</div>
<p class="game-intro">Divide the numbers and get to the <strong>1 tile!</strong></p>

<div class="game-container">
<div class="game-message">
<p></p>
<div class="lower">
<a style="display: none;" 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>divide!</strong> You win when you reach a tile with 1.
</p>
<hr />
<p>
<strong class="important">Note:</strong> This site is a derivative of <a href="http://git.io/2048">http://git.io/2048</a>, 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>
<hr />
<p>Created by <a href="/" target="_blank">3kh0</a>.</p>
</div>
<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_score_manager.js"></script>
<script src="js/game_manager.js"></script>
<script src="js/application.js"></script>
</body>
</html>
27 changes: 27 additions & 0 deletions local-stuff/1/js/animframe_polyfill.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(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, element) {
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);
};
}
}());

4 changes: 4 additions & 0 deletions local-stuff/1/js/application.js
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, LocalScoreManager);
});
245 changes: 245 additions & 0 deletions local-stuff/1/js/game_manager.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
function GameManager(size, InputManager, Actuator, ScoreManager) {
this.size = size; // Size of the grid
this.inputManager = new InputManager;
this.scoreManager = new ScoreManager;
this.actuator = new Actuator;

this.startTiles = 2;

this.inputManager.on("move", this.move.bind(this));
this.inputManager.on("restart", this.restart.bind(this));
this.inputManager.on("keepPlaying", this.keepPlaying.bind(this));

this.setup();
}

// Restart the game
GameManager.prototype.restart = function () {
this.actuator.continue();
this.setup();
};

// Keep playing after winning
GameManager.prototype.keepPlaying = function () {
this.keepPlaying = true;
this.actuator.continue();
};

GameManager.prototype.isGameTerminated = function () {
if (this.over || (this.won && !this.keepPlaying)) {
return true;
} else {
return false;
}
};

// Set up the game
GameManager.prototype.setup = function () {
this.grid = new Grid(this.size);

this.score = 0;
this.over = false;
this.won = false;
this.keepPlaying = false;

// Add the initial tiles
this.addStartTiles();

// Update the actuator
this.actuate();
};

// Set up the initial tiles to start the game with
GameManager.prototype.addStartTiles = function () {
for (var i = 0; i < this.startTiles; i++) {
this.addRandomTile();
}
};

// Adds a tile in a random position
GameManager.prototype.addRandomTile = function () {
if (this.grid.cellsAvailable()) {
var value = Math.random() < 0.9 ? 2048 : 1024;
var tile = new Tile(this.grid.randomAvailableCell(), value);

this.grid.insertTile(tile);
}
};

// Sends the updated grid to the actuator
GameManager.prototype.actuate = function () {
if (this.scoreManager.get() < this.score) {
this.scoreManager.set(this.score);
}

this.actuator.actuate(this.grid, {
score: this.score,
over: this.over,
won: this.won,
bestScore: this.scoreManager.get(),
terminated: this.isGameTerminated()
});

};

// Save all tile positions and remove merger info
GameManager.prototype.prepareTiles = function () {
this.grid.eachCell(function (x, y, tile) {
if (tile) {
tile.mergedFrom = null;
tile.savePosition();
}
});
};

// Move a tile and its representation
GameManager.prototype.moveTile = function (tile, cell) {
this.grid.cells[tile.x][tile.y] = null;
this.grid.cells[cell.x][cell.y] = tile;
tile.updatePosition(cell);
};

// Move tiles on the grid in the specified direction
GameManager.prototype.move = function (direction) {
// 0: up, 1: right, 2:down, 3: left
var self = this;

if (this.isGameTerminated()) return; // Don't do anything if the game's over

var cell, tile;

var vector = this.getVector(direction);
var traversals = this.buildTraversals(vector);
var moved = false;

// Save the current tile positions and remove merger information
this.prepareTiles();

// Traverse the grid in the right direction and move tiles
traversals.x.forEach(function (x) {
traversals.y.forEach(function (y) {
cell = { x: x, y: y };
tile = self.grid.cellContent(cell);

if (tile) {
var positions = self.findFarthestPosition(cell, vector);
var next = self.grid.cellContent(positions.next);

// Only one merger per row traversal?
if (next && next.value === tile.value && !next.mergedFrom) {
var merged = new Tile(positions.next, tile.value / 2);
merged.mergedFrom = [tile, next];

self.grid.insertTile(merged);
self.grid.removeTile(tile);

// Converge the two tiles' positions
tile.updatePosition(positions.next);

// Update the score
self.score += merged.value;

// The mighty 2048 tile
if (merged.value === 1) self.won = true;
} else {
self.moveTile(tile, positions.farthest);
}

if (!self.positionsEqual(cell, tile)) {
moved = true; // The tile moved from its original cell!
}
}
});
});

if (moved) {
this.addRandomTile();

if (!this.movesAvailable()) {
this.over = true; // Game over!
}

this.actuate();
}
};

// Get the vector representing the chosen direction
GameManager.prototype.getVector = function (direction) {
// Vectors representing tile movement
var map = {
0: { x: 0, y: -1 }, // up
1: { x: 1, y: 0 }, // right
2: { x: 0, y: 1 }, // down
3: { x: -1, y: 0 } // left
};

return map[direction];
};

// Build a list of positions to traverse in the right order
GameManager.prototype.buildTraversals = function (vector) {
var traversals = { x: [], y: [] };

for (var pos = 0; pos < this.size; pos++) {
traversals.x.push(pos);
traversals.y.push(pos);
}

// Always traverse from the farthest cell in the chosen direction
if (vector.x === 1) traversals.x = traversals.x.reverse();
if (vector.y === 1) traversals.y = traversals.y.reverse();

return traversals;
};

GameManager.prototype.findFarthestPosition = function (cell, vector) {
var previous;

// Progress towards the vector direction until an obstacle is found
do {
previous = cell;
cell = { x: previous.x + vector.x, y: previous.y + vector.y };
} while (this.grid.withinBounds(cell) &&
this.grid.cellAvailable(cell));

return {
farthest: previous,
next: cell // Used to check if a merge is required
};
};

GameManager.prototype.movesAvailable = function () {
return this.grid.cellsAvailable() || this.tileMatchesAvailable();
};

// Check for available matches between tiles (more expensive check)
GameManager.prototype.tileMatchesAvailable = function () {
var self = this;

var tile;

for (var x = 0; x < this.size; x++) {
for (var y = 0; y < this.size; y++) {
tile = this.grid.cellContent({ x: x, y: y });

if (tile) {
for (var direction = 0; direction < 4; direction++) {
var vector = self.getVector(direction);
var cell = { x: x + vector.x, y: y + vector.y };

var other = self.grid.cellContent(cell);

if (other && other.value === tile.value) {
return true; // These two tiles can be merged
}
}
}
}
}

return false;
};

GameManager.prototype.positionsEqual = function (first, second) {
return first.x === second.x && first.y === second.y;
};
Loading

0 comments on commit 7c607a4

Please sign in to comment.