【Wonderfl移植計画】砂ゲー【5作目】
wonderflのFavoriteTop100にランクインしている作品をCreateJSを使って移植しようという計画。
ライセンスはMITなのを確認していますが、
制作者様の方から何かアクションがあった場合は削除させていただきます。
60位 砂ゲー
ソースコードは次回から解説をします。
今回はソースコードを掲載するだけにします。
// EaselJS 0.7 // BitmapData 1.0.0 // -- http://kudox.jp/java-script/createjs-easeljs-bitmapdata window.onload = init; var W; var H; var stage; var ERASE_COLOR = 0x000000; var WALL_COLOR = 0x836034; var SAND_COLOR = 0xF7E779; var WATER_COLOR = 0x80A2F0; var _CANVAS; var _B0; var _B1; var _B2; var _B3; var _CLICK = false; var _COLOR; var _BX = 0; var _BY = 0; function init() { stage = new createjs.Stage("canvas"); W = stage.canvas.width; H = stage.canvas.height; _CANVAS = new createjs.BitmapData(null, W, H, 0x000000); var bm = new createjs.Bitmap(_CANVAS.canvas); stage.addChild(bm); _B0 = document.getElementById("erase_btn"); _B1 = document.getElementById("wall_btn" ); _B2 = document.getElementById("sand_btn" ); _B3 = document.getElementById("water_btn"); _COLOR = WALL_COLOR; _B1.disabled = true; _B0.onclick = function(){_COLOR = ERASE_COLOR; _B0.disabled = true ; _B1.disabled = false ; _B2.disabled = false ;_B3.disabled = false ;}; _B1.onclick = function(){_COLOR = WALL_COLOR ; _B0.disabled = false ; _B1.disabled = true ; _B2.disabled = false ;_B3.disabled = false ;}; _B2.onclick = function(){_COLOR = SAND_COLOR ; _B0.disabled = false ; _B1.disabled = false ; _B2.disabled = true ;_B3.disabled = false ;}; _B3.onclick = function(){_COLOR = WATER_COLOR; _B0.disabled = false ; _B1.disabled = false ; _B2.disabled = false ;_B3.disabled = true ;}; stage.addEventListener('stagemousedown', function(){_CLICK = true ;}); stage.addEventListener('stagemouseup' , function(){_CLICK = false;}); createjs.Ticker.addEventListener('tick', RUN); createjs.Ticker.setFPS(60); } function RUN() { for(var I = 200; I < 250; ++I) { if(Math.random() < .1) { _CANVAS.setPixel(I, 0, SAND_COLOR); } } if(_CLICK) { for(var J = 0; J < 20; ++J) { var R = J / 20; _CANVAS.fillRect(new createjs.Rectangle(Math.floor(_BX * R + stage.mouseX * (1 - R)), Math.floor(_BY * R + stage.mouseY * (1 - R)), 5, 5), _COLOR); } } _BX = stage.mouseX; _BY = stage.mouseY; for(var X = 0; X < _CANVAS.width; ++X) { for(var Y = _CANVAS.height - 1; Y >= 0; --Y) { var C =_CANVAS.getPixel(X, Y); if(C == ERASE_COLOR) { continue; } // SAND if(C == SAND_COLOR) { var T; var TX; {//[落下] T = _CANVAS.getPixel(X, Y + 1); if(T == ERASE_COLOR) { _CANVAS.setPixel(X, Y , T); _CANVAS.setPixel(X, Y + 1, C); continue; } // [水より砂の方が重い、適当な確率で場所の置換を許す。] if(T == WATER_COLOR && Math.random() < .5) { _CANVAS.setPixel(X, Y , T); _CANVAS.setPixel(X, Y + 1, C); continue; } } {//[左右移動] TX = X + Math.floor(Math.random() * 7) - 3; T = _CANVAS.getPixel(TX, Y); if(T == ERASE_COLOR) { _CANVAS.setPixel(X , Y, T); _CANVAS.setPixel(TX, Y, C); continue; } // [水より砂の方が重い、適当な確率で場所の置換を許す。] if(T == WATER_COLOR && Math.random() < .8) { _CANVAS.setPixel(X , Y, T); _CANVAS.setPixel(TX, Y, C); continue; } } } // WATER if(C == WATER_COLOR) { {//[落下] T = _CANVAS.getPixel(X, Y + 1); if(T == ERASE_COLOR) { _CANVAS.setPixel(X, Y , T); _CANVAS.setPixel(X, Y + 1, C); continue; } } {//[左右移動] TX = X + Math.floor(Math.random() * 7) - 3; T = _CANVAS.getPixel(TX, Y); if(T == ERASE_COLOR) { _CANVAS.setPixel(X , Y, T); _CANVAS.setPixel(TX, Y, C); continue; } } } } } _CANVAS.updateContext(); stage.update(); }