Lucas Kent e39465ad2f Changes to be committed:
new file:   Files/flashplayer_32_sa.exe
	new file:   favicon.ico
	new file:   globe.gif
	new file:   imgs/download.png
	new file:   imgs/zuck.jpg
	new file:   index.html
	new file:   other.ico
	new file:   script.js
	new file:   site.webmanifest
	new file:   sitemap.html
	new file:   styles/backround.css
	new file:   styles/border.css
	new file:   styles/fonts/Titillium_Web/OFL.txt
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf
	new file:   styles/fonts/webfontkit-20221027-163353/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2
	new file:   styles/fonts/webfontkit-20221027-165950/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2
	new file:   styles/style.css
	new file:   tools/2048/.gitignore
	new file:   tools/2048/.jshintrc
	new file:   tools/2048/CONTRIBUTING.md
	new file:   tools/2048/LICENSE.txt
	new file:   tools/2048/README.md
	new file:   tools/2048/Rakefile
	new file:   tools/2048/favicon.ico
	new file:   tools/2048/index.html
	new file:   tools/2048/js/animframe_polyfill.js
	new file:   tools/2048/js/application.js
	new file:   tools/2048/js/bind_polyfill.js
	new file:   tools/2048/js/classlist_polyfill.js
	new file:   tools/2048/js/game_manager.js
	new file:   tools/2048/js/grid.js
	new file:   tools/2048/js/html_actuator.js
	new file:   tools/2048/js/keyboard_input_manager.js
	new file:   tools/2048/js/local_storage_manager.js
	new file:   tools/2048/js/tile.js
    new file:   tools/2048/meta/apple-touch-icon.png
	new file:   tools/webretro/cores/neocd_libretro.js
	new file:   tools/webretro/cores/neocd_libretro.wasm
	new file:   tools/webretro/cores/nestopia_libretro.js
	new file:   tools/webretro/cores/nestopia_libretro.wasm
	new file:   tools/webretro/cores/o2em_libretro.js
	new file:   tools/webretro/cores/o2em_libretro.wasm
	new file:   tools/webretro/cores/opera_libretro.js
	new file:   tools/webretro/cores/opera_libretro.wasm
2022-11-02 08:40:01 -04:00

5 lines
1.8 KiB
JavaScript

function Grid(size,previousState){this.size=size;this.cells=previousState?this.fromState(previousState):this.empty();}
Grid.prototype.empty=function(){var cells=[];for(var x=0;x<this.size;x++){var row=cells[x]=[];for(var y=0;y<this.size;y++){row.push(null);}}
return cells;};Grid.prototype.fromState=function(state){var cells=[];for(var x=0;x<this.size;x++){var row=cells[x]=[];for(var y=0;y<this.size;y++){var tile=state[x][y];row.push(tile?new Tile(tile.position,tile.value):null);}}
return cells;};Grid.prototype.randomAvailableCell=function(){var cells=this.availableCells();if(cells.length){return cells[Math.floor(Math.random()*cells.length)];}};Grid.prototype.availableCells=function(){var cells=[];this.eachCell(function(x,y,tile){if(!tile){cells.push({x:x,y:y});}});return cells;};Grid.prototype.eachCell=function(callback){for(var x=0;x<this.size;x++){for(var y=0;y<this.size;y++){callback(x,y,this.cells[x][y]);}}};Grid.prototype.cellsAvailable=function(){return!!this.availableCells().length;};Grid.prototype.cellAvailable=function(cell){return!this.cellOccupied(cell);};Grid.prototype.cellOccupied=function(cell){return!!this.cellContent(cell);};Grid.prototype.cellContent=function(cell){if(this.withinBounds(cell)){return this.cells[cell.x][cell.y];}else{return null;}};Grid.prototype.insertTile=function(tile){this.cells[tile.x][tile.y]=tile;};Grid.prototype.removeTile=function(tile){this.cells[tile.x][tile.y]=null;};Grid.prototype.withinBounds=function(position){return position.x>=0&&position.x<this.size&&position.y>=0&&position.y<this.size;};Grid.prototype.serialize=function(){var cellState=[];for(var x=0;x<this.size;x++){var row=cellState[x]=[];for(var y=0;y<this.size;y++){row.push(this.cells[x][y]?this.cells[x][y].serialize():null);}}
return{size:this.size,cells:cellState};};