enchant(); window.focus(); var _DIR_ = SwitchApps.scriptDir(); /* * 定数 */ // パラメータ var SCREEN_W = 640; //スクリーンの幅 var SCREEN_H = 427; //スクリーンの高さ var BALLOON_SCALE_X = 0.2; //風船のXスケール var BALLOON_SCALE_Y = 0.4; //風船のYスケール var TIME = 0; //var COUNT_MAX = 6; //この回数クリックすると風船爆発 /* 画像 var BALLOON_RED= "images/balloon.png"; var BALLOON_YELLOW = "images/balloon_yelow.png"; var BALLOON_GRAY = "images/balloon_glay.png"; var BALLON_BLUE = "images/balloon_blue.png";*/ //var BALLOON = "images/balloon_green.png" var BALLOON = _DIR_ + "/images/sprites.png"; var BACK_GROUND_IMAGE=_DIR_ + "/images/sky.jpg"; // SE var BALLOON_SE = _DIR_ + "/sounds/balloon.mp3"; var BALLOON_BURST_SE = _DIR_ + "/sounds/burst.mp3"; // アセットリスト var ASSETS = [ BALLOON,BACK_GROUND_IMAGE,BALLOON_SE,BALLOON_BURST_SE ]; /* * グローバル変数 */ var game = null; var logger = null; /* *回数フラグ */ var count_fl = 0; /* * オプション項目の設定 */ $(document).ready(function(){ logger = new SwitchApps.Logger(SwitchApps.app.id, null); /*ログの設定*/ LOG_switch = logger.addHeader('スイッチ入力'); LOG_fukura = logger.addHeader('風船を膨らます'); LOG_waru = logger.addHeader('風船を割る'); LOG_rebuild = logger.addHeader('新しい風船を出す'); /*必要なオプションの状態はオブジェクトで宣言*/ HIT_COUNT={set:1};//必要なクリック数 BAL_COLOR={set:1}; BACK = {set:1}; COLOR = {set:1}; color_chose = new Array(); color_chose = ["red","blue","green","yellow","black","white","lime","beige"]; //TEST = {set:4}; // var setting_background = $('#setting-background'); /*createSettingBox("背景","そら","しろ","くろ","back_ground",BACK,12);//12:背景の有り無しのログ createSettingBox("必要なクリック数","2回","4回","6回","hit_count",HIT_COUNT,13);//13:クリック数のログ createSettingBox("風船の色","赤","黄色","グレー","balloon_color",BAL_COLOR,14);//14:風船の色*/ createSettingBox("背景","back_ground",BACK,12,"そら","しろ","くろ"); createSettingBox("必要なクリック数","hit_count",HIT_COUNT,13,"2回","4回","6回"); createSettingBox("風船の色","balloon_color",BAL_COLOR,14,"赤","黄色","グレー","みどり","むらさき"); //createColor("色の変更","chose_color",COLOR,color_chose,13); /*wrapButton("balbal","hit_count","balloon_color"); wrapButton("balbal2","balloon_color"); changeMode("balloon_color","balbal",1)*/ }); /* * 汎用処理 */ //ランダム値生成 var randfloat = function(min, max) { return Math.random()*(max-min)+min; }; enchant.Surface.prototype.setPixel = function(x,y,r,g,b,a){ var p = this.context.createImageData(1,1); p.data[0] = r; p.data[1] = g; p.data[2] = b; p.data[3] = a; this.context.putImageData(p,x,y,0,0,1,1);//描画状態をcanvasに再現 } //キーバインド設定 var keyset = function(key){ game.keybind(key, 'a'); //aボタン(「z」キー)を押した時のイベント処理 game.currentScene.onabuttondown = function() { var ev = new Event('touchstart'); // 発火! game.currentScene.dispatchEvent(ev); }; }; /* * メイン処理 */ window.onload = function() { //ゲームオブジェクトの生成 game = new Game(SCREEN_W, SCREEN_H); // SE、画像の読み込み game.preload(ASSETS); //タイマー初期化 game.time = 0;//タイマーの初期化 //ゲーム開始時の処理 game.onload = function() { var scene = game.rootScene; scene.backgroundColor = "white"; // BGMの再生 //game.assets[BGM1].play(); //キーバインドの設定 keyset(49); //1キー keyset(51); //3キー keyset(32); //spaceキー keyset(10); //Enter1 keyset(13); //Enter windows keyset(123); //F12キー var scene_now = BACK.set;//背景ありの状態を保存 // 背景を生成、表示 var bg = new Sprite(SCREEN_W, SCREEN_H); bg.image = game.assets[BACK_GROUND_IMAGE]; scene.addChild(bg); /*初期状態の取得*/ if(BACK.set==1){ scene.addChild(bg); scene_now = BACK.set }else if(BACK.set==2){ scene.removeChild(bg); scene.backgroundColor = "white"; scene_now = BACK.set; }else if(BACK.set == 3){ scene.removeChild(bg); scene.backgroundColor = "black"; scene_now = BACK.set; } // 風船の生成、表示 var balloon = new Balloon(); // balloon.frame = 5; balloon.moveTo(SCREEN_W/2-234/2, SCREEN_H/2-300/2); scene.addChild(balloon); //風船のスケール倍率の一時的な上限(初期値) var scale_max = 0.3; var scale_plus = 1.5; var hit_count = 2; var scale_save = scale_plus; //膨らませた(クリックした)回数を数える var cnt = 0; //風船の状態フラグ(割れたら1になる) var flg = 0; //風船が膨らんでいる途中かどうか(膨らんでいる途中なら1 var bal_fg = 0; scene.onenterframe = function() { TIME += 1/game.fps; /*if(game.frame % game.fps == 0){*/ // game.time+=0.033; //console.log(game.frame); // }*/ if(BACK.set != scene_now){ if(BACK.set==1){ scene.removeChild(balloon); scene.addChild(bg); scene.addChild(balloon); scene_now = BACK.set; }else if(BACK.set==2){ scene.removeChild(balloon); scene.removeChild(bg); scene.backgroundColor = "white"; scene.addChild(balloon); scene_now = BACK.set; }else if(BACK.set == 3){ scene.removeChild(balloon); scene.removeChild(bg); scene.backgroundColor = "black"; scene.addChild(balloon); scene_now = BACK.set; } } // 風船の色 if(BAL_COLOR.set == 1) balloon.frame = 5; else if(BAL_COLOR.set == 2) balloon.frame = 1; else if(BAL_COLOR.set == 3) balloon.frame = 0; else if(BAL_COLOR.set == 4) balloon.frame = 4; else if(BAL_COLOR.set == 5) balloon.frame = 3; //風船の膨張率 if(HIT_COUNT.set == 3){ scale_plus = 0.3; hit_count = 6; } else if(HIT_COUNT.set == 2){ scale_plus = 0.5; hit_count = 4; } else if(HIT_COUNT.set == 1){ scale_plus = 1.5; hit_count = 2; } } // click時の処理 scene.ontouchstart = function() { LOG_switch(); // if() // console.log(balloon.scaleX+","+balloon.scaleY); // console.log(scale_plus); //console.log(scale_max); if(bal_fg == 0){//膨らんでいる途中はタッチを受け付けない(要相談) if(flg != 1 && cnt != hit_count-1){ LOG_fukura(); game.assets[BALLOON_SE].clone().play(); } balloon.onenterframe = function() { //風船のスケール増加 if(balloon.scaleX <= scale_max && cnt !== 0){ bal_fg = 1; balloon.scaleX += 0.03; balloon.scaleY += 0.02; }else bal_fg = 0;//膨らみ終わっている }; scale_max += scale_plus; scale_plus += 0.15; cnt++; //風船が割れていたら再配置 if(flg == 1){ scale_max = 0.3; scale_plus = scale_save; cnt = 0; flg = 0; balloon.scaleX = BALLOON_SCALE_X; balloon.scaleY = BALLOON_SCALE_Y; balloon.moveTo(SCREEN_W/2-234/2, SCREEN_H/2-300/2); scene.addChild(balloon); LOG_rebuild(); } //クリック回数が一定値を超えたら風船破裂 if(cnt >= hit_count){ balloon.onenterframe = function() { if(balloon.scaleX > 0) { balloon.scaleX -= 0.3*5; balloon.scaleY -= 0.3*5; } }; window.setTimeout( function() { game.assets[BALLOON_BURST_SE].clone().play(); LOG_waru(); //scene.removeChild(balloon); balloon.parentNode.removeChild(balloon); var rect1 = new Rect(0); scene.addChild(rect1); var rect2 = new Rect(45); scene.addChild(rect2); var rect3 = new Rect(90); scene.addChild(rect3); var rect4 = new Rect(135); scene.addChild(rect4); var rect5 = new Rect(180); scene.addChild(rect5); var rect6 = new Rect(225); scene.addChild(rect6); var rect7 = new Rect(270); scene.addChild(rect7); var rect8 = new Rect(315); scene.addChild(rect8); }, 30 ); flg = 1; } } }; }; game.start(); }; /* * 風船クラス */ var Balloon = Class.create(Sprite, { // 初期化処理 initialize: function() { Sprite.call(this,234,555); this.image = game.assets[BALLOON]; //画像処理プログラム /* var surface = new Surface(234,555);//サーフェイス生成 surface.draw(game.assets[BALLOON],0,0,234,555)//surfaceのどこまでの領域を描画するのかを指定 for(var i=0; i<555;++i){ for(var j=0; j<234;++j){ var p = surface.getPixel(j,i);//ピクセルのしきい値の取得 //グレースケールを求める //var grayscale = p[0]*0 + p[1]*2.0 + p[2]*2.0; p[0] = p[0]*0.5;//r値 p[1] = p[1]*2.0;//g値 p[2] = p[2]*0.2;//b値 //ピクセルのセット surface.setPixel(j, i, p[0], p[1], p[2], p[3]); } } this.image = surface;//ここまで*/ this.scale(BALLOON_SCALE_X,BALLOON_SCALE_Y); }, }); /* *四角形クラス */ var Rect = Class.create(Sprite, { // 初期化処理 initialize: function(rot) { Sprite.call(this,25,50); this.rot = rot; var surf = new Surface(25, 50); surf.context.beginPath(); /* if(BAL_COLOR.set == 1) surf.context.fillStyle = 'rgba(255,25,25,0.8)';//赤 else if(BAL_COLOR.set == 2) surf.context.fillStyle = 'rgba(256,256,0,0.8)';//黄色 else if(BAL_COLOR.set == 3) surf.context.fillStyle = 'rgba(128,128,128,0.8)';//グレースケール*/ switch(BAL_COLOR.set){ case 1:surf.context.fillStyle = 'rgba(255,25,25,0.8)';//赤 break; case 2:surf.context.fillStyle = 'rgba(256,256,0,0.8)';//黄色 break; case 3:surf.context.fillStyle = 'rgba(128,128,128,0.8)';//グレースケール break; case 4: surf.context.fillStyle = 'rgba(0,256,0,0.8)';//緑 break; case 5: surf.context.fillStyle = 'rgba(128,100,162,0.8)';//緑 default: break; } /*surf.context.fillStyle = 'rgba(256,256,0,0.8)';//黄色 surf.context.fillStyle = 'rgba(0,0,256,0.8)';//青 surf.context.fillStyle = 'rgba(0,256,0,0.8)';//緑 surf.context.fillStyle = 'rgba(128,128,128,0.8)';//グレースケール*/ surf.context.fillRect(0, 0, 25, 50); this.image = surf; this.moveTo(SCREEN_W/2-25/2, SCREEN_H/2-50/2); }, onenterframe: function() { /* var length = 0; var length_max = 200; var length_start_x = SCREEN_W/2-25/2; var length_start_y = SCREEN_H/2-25/2; */ this.rotation = this.rot; var angle = (this.rotation+270)*Math.PI/180; this.x += Math.cos(angle)*50; this.y += Math.sin(angle)*50; /* var x = this.x-length_start_x; var y = this.y-length_start_y; length = Math.sqrt(x*x + y*y); if(length >= length_max){ this.v = 0; this.v = 0; } */ }, });