enchant(); var _DIR_ = SwitchApps.scriptDir(); var SCREEN_W = 800; var SCREEN_H = 600; var BUTTON_SIZE = 130; var BUTTON_SCALE = 0.95; var BUTTON_NUM = 8; var FISH_SIZE = 130; var FISH_SCALE = SCREEN_W / FISH_SIZE / 10; var TANK_W = SCREEN_W * 4 / 5; var TANK_H = SCREEN_H * 2 / 3; var TANK_X = 0; var TANK_Y = SCREEN_H / 3; var CAT_SPEED = 50; var MOGURA_WIDTH = 129; var MOGURA_HEIGHT = 129; var MOGURA_SPEED = 15; var LEFTA_SIZE = 50; var LEFTB_SIZE = 35; var TANK_IMG = _DIR_ + '/image/bg3.png'; var FISH_IMGS = _DIR_ + '/image/mogura14.png'; var OK_IMG = _DIR_ + '/image/ok6.png'; var HATAKE_IMG = _DIR_ + '/image/bg4.png'; var LEFTA_IMG = _DIR_ + '/image/mogura15.png'; var LEFTB_IMG = _DIR_ + '/image/mogura16.png'; var FISH_SE = _DIR_ + '/sound/mogura1.mp3'; var KANSEI_SE = _DIR_ + '/sound/mogura3.mp3'; var BGM = _DIR_ + '/sound/bgm1.mp3'; var COUNTDOWN1_SE = _DIR_ + '/sound/countdown.mp3'; var COUNTDOWN2_SE = _DIR_ + '/sound/countdown.mp3'; var FLYER_SE = _DIR_ + '/sound/DreamFlyer.mp3'; //ゲームオブジェクトとなる変数を宣言 var game = null; //オートスキャン用オブジェクト var scanner = null; var selected_cor = false; var selectCount = 0; // ボタンを押した回数 var correctCount = 0; // 正解を押した回数 var correctCountA = 0; //左上のもぐら表示に使う var correctCountB = 0; //イベントキャラクター var fishes = []; // 魚を追加したときのSE //var fish_se = Sound.load('sound/water_volup.mp3'); //var cat_se = Sound.load('sound/cat1a.mp3'); // スキャンの設定 function initScanner(scanner) { scanner.scanSE = 1; scanner.selectSE = 1; scanner.firstWait = 2; scanner.scanInterval = 1.0; scanner.selectWait = 0.0; scanner.frameWidth = 10; scanner.selectFrameWidth = 15; scanner.scanRepaet = -1; //-1 scanner.focusType = 'frame'; scanner.focusColor = '#ff0000'; scanner.scanType = 'auto'; scanner.resumeFromNextTarget = true; } // 配列をシャッフル function shuffle(array) { for (var i = array.length - 1; i >= 0; i--) { let rand = Math.floor(Math.random() * (i + 1)); // 配列の数値を入れ替える [array[i], array[rand]] = [array[rand], array[i]] } return array; } // 範囲を指定して乱数を生成 function randRangeInt(min, max) { return Math.floor(Math.random() * (max + 1 - min) + min); } // 範囲を指定して乱数を生成 function randRangeDec(min, max) { return Math.random() * (max + 1 - min) + min; } // ボタンの画像をランダムに入れ替える function buttonPlace(buttons, fishImage, flag) { var correctButtonNum = Math.floor(Math.random() * (BUTTON_NUM - 4)); var correctButtonNum2 = Math.floor(Math.random() * (BUTTON_NUM)); if (correctButtonNum2 <= 4) { correctButtonNum2 += 4; } for (var i = 0; i < BUTTON_NUM; i++) { if (i == correctButtonNum || i == correctButtonNum2) { buttons[i].image = null;//game.assets[FISH_IMGS];// fishImage buttons[i].flag = 1; //正解の画像かどうか buttons[i].flag2 = i; } else { buttons[i].image = null; buttons[i].flag = 0; buttons[i].flag2 = i; } } for (var i = 0; i < BUTTON_NUM; i++) { if (i <= 3) { buttons[i].flagx = ((i) * SCREEN_W / (BUTTON_NUM - 4)) + ((SCREEN_W / (BUTTON_NUM - 4)) - (BUTTON_SIZE * BUTTON_SCALE)) / 2; buttons[i].flagy = SCREEN_H / 8; } else if (3 < i <= 7) { buttons[i].flagx = ((i - 4) * SCREEN_W / (BUTTON_NUM - 4)) + ((SCREEN_W / (BUTTON_NUM - 4)) - (BUTTON_SIZE * BUTTON_SCALE)) / 2; buttons[i].flagy = (SCREEN_H / 8 + 175); } } } window.onload = function () { //ゲームオブジェクトの生成 game = new Core(SCREEN_W, SCREEN_H); config = new Group(SCREEN_W, SCREEN_H / 20); //FPSの指定 game.fps = 16; //画像読み込み game.preload( TANK_IMG, OK_IMG, HATAKE_IMG, LEFTA_IMG, LEFTB_IMG, _DIR_ + '/image/mogura14.png', FISH_SE, KANSEI_SE, BGM, COUNTDOWN1_SE, COUNTDOWN2_SE, FLYER_SE, ); //オートスキャン用オブジェクトの作成 scanner = new SpriteScanner(); initScanner(scanner); var buttons = []; // ボタンのインスタンスを格納する配列 var flag = []; var flagx = []; var flagy = []; // 猫画像の上げ下げに使うフラグ var catUp = false; var catDown = false; var nextFish; // 次に生成する魚の画 var moguraList = null; //ロード時に呼ばれる処理 game.onload = function () { var bgm = game.assets[BGM]; //game.rootScene.onenterframe = function () { bgm.play(); //} //背景色の設定 game.rootScene.backgroundColor = "#ddddff"; //e1f4f0 // 背景画像 var tank = new Sprite(SCREEN_W, SCREEN_H); tank.image = game.assets[TANK_IMG]; tank.originY = 120; //背景 たて(-なら上にずれる) 120 tank.scaleY = 1.85; //背景 たて長さ 1.7 tank.opacity = 1.0; //背景 鮮度 tank.moveTo(0, TANK_Y); //背景の位置 // game.rootScene.addChild(tank); // 背景画像 var hatake = new Sprite(SCREEN_W, SCREEN_H); hatake.image = game.assets[HATAKE_IMG]; hatake.originY = 120; //背景 たて(-なら上にずれる) 120 hatake.scaleY = 1.85; //背景 たて長さ 1.7 hatake.opacity = 1.0; //背景 鮮度 hatake.moveTo(0, TANK_Y); //背景の位置 game.rootScene.addChild(hatake); // 待機するもぐらの画像 var waitA = new Sprite(BUTTON_SIZE, BUTTON_SIZE); waitA.image = game.assets[FISH_IMGS]; waitA.originY = 0; //背景 たて(-なら上にずれる) 120 waitA.scaleY = 1.0; //背景 たて長さ 1.7 waitA.opacity = 1.0; //背景 鮮度 waitA.x = 420; waitA.y = 170; // waitA.moveTo(0, 0); //背景の位置 // 待機するもぐらの画像 var waitB = new Sprite(BUTTON_SIZE, BUTTON_SIZE); waitB.image = game.assets[FISH_IMGS]; waitB.originY = 0; //背景 たて(-なら上にずれる) 120 waitB.scaleY = 1.0; //背景 たて長さ 1.7 waitB.opacity = 1.0; //背景 鮮度 waitB.x = 420; waitB.y = 340; // waitB.moveTo(0, 0); //背景の位置 // 左上のもぐら(大)の画像 var leftA1 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA1.image = game.assets[LEFTA_IMG]; leftA1.originY = 0; //背景 たて(-なら上にずれる) 120 leftA1.opacity = 1.0; //背景 鮮度 leftA1.x = 30; leftA1.y = 40; //game.rootScene.addChild(leftA1); var leftA2 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA2.image = game.assets[LEFTA_IMG]; leftA2.originY = 0; //背景 たて(-なら上にずれる) 120 leftA2.opacity = 1.0; //背景 鮮度 leftA2.x = 80; leftA2.y = 40; //game.rootScene.addChild(leftA2); var leftA3 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA3.image = game.assets[LEFTA_IMG]; leftA3.originY = 0; //背景 たて(-なら上にずれる) 120 leftA3.opacity = 1.0; //背景 鮮度 leftA3.x = 130; leftA3.y = 40; //game.rootScene.addChild(leftA3); var leftA4 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA4.image = game.assets[LEFTA_IMG]; leftA4.originY = 0; //背景 たて(-なら上にずれる) 120 leftA4.opacity = 1.0; //背景 鮮度 leftA4.x = 180; leftA4.y = 40; //game.rootScene.addChild(leftA4); var leftA5 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA5.image = game.assets[LEFTA_IMG]; leftA5.originY = 0; //背景 たて(-なら上にずれる) 120 leftA5.opacity = 1.0; //背景 鮮度 leftA5.x = 230; leftA5.y = 40; //game.rootScene.addChild(leftA5); var leftA6 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA6.image = game.assets[LEFTA_IMG]; leftA6.originY = 0; //背景 たて(-なら上にずれる) 120 leftA6.opacity = 1.0; //背景 鮮度 leftA6.x = 280; leftA6.y = 40; //game.rootScene.addChild(leftA6); var leftA7 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA7.image = game.assets[LEFTA_IMG]; leftA7.originY = 0; //背景 たて(-なら上にずれる) 120 leftA7.opacity = 1.0; //背景 鮮度 leftA7.x = 330; leftA7.y = 40; //game.rootScene.addChild(leftA7); var leftA8 = new Sprite(LEFTA_SIZE, LEFTA_SIZE); leftA8.image = game.assets[LEFTA_IMG]; leftA8.originY = 0; //背景 たて(-なら上にずれる) 120 leftA8.opacity = 1.0; //背景 鮮度 leftA8.x = 380; leftA8.y = 40; //game.rootScene.addChild(leftA8); // 左上のもぐら(小)の画像 var leftB1 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB1.image = game.assets[LEFTB_IMG]; leftB1.originY = 0; //背景 たて(-なら上にずれる) 120 leftB1.opacity = 1.0; //背景 鮮度 leftB1.x = 430; leftB1.y = 54; //game.rootScene.addChild(leftB1); var leftB2 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB2.image = game.assets[LEFTB_IMG]; leftB2.originY = 0; //背景 たて(-なら上にずれる) 120 leftB2.opacity = 1.0; //背景 鮮度 leftB2.x = 465; leftB2.y = 54; //game.rootScene.addChild(leftB2); var leftB3 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB3.image = game.assets[LEFTB_IMG]; leftB3.originY = 0; //背景 たて(-なら上にずれる) 120 leftB3.opacity = 1.0; //背景 鮮度 leftB3.x = 500; leftB3.y = 54; //game.rootScene.addChild(leftB3); var leftB4 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB4.image = game.assets[LEFTB_IMG]; leftB4.originY = 0; //背景 たて(-なら上にずれる) 120 leftB4.opacity = 1.0; //背景 鮮度 leftB4.x = 535; leftB4.y = 54; //game.rootScene.addChild(leftB4); var leftB5 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB5.image = game.assets[LEFTB_IMG]; leftB5.originY = 0; //背景 たて(-なら上にずれる) 120 leftB5.opacity = 1.0; //背景 鮮度 leftB5.x = 570; leftB5.y = 54; //game.rootScene.addChild(leftB5); var leftB6 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB6.image = game.assets[LEFTB_IMG]; leftB6.originY = 0; //背景 たて(-なら上にずれる) 120 leftB6.opacity = 1.0; //背景 鮮度 leftB6.x = 605; leftB6.y = 54; //game.rootScene.addChild(leftB6); var leftB7 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB7.image = game.assets[LEFTB_IMG]; leftB7.originY = 0; //背景 たて(-なら上にずれる) 120 leftB7.opacity = 1.0; //背景 鮮度 leftB7.x = 640; leftB7.y = 54; //game.rootScene.addChild(leftB7); var leftB8 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB8.image = game.assets[LEFTB_IMG]; leftB8.originY = 0; //背景 たて(-なら上にずれる) 120 leftB8.opacity = 1.0; //背景 鮮度 leftB8.x = 675; leftB8.y = 54; //game.rootScene.addChild(leftB8); var leftB9 = new Sprite(LEFTB_SIZE, LEFTB_SIZE); leftB9.image = game.assets[LEFTB_IMG]; leftB9.originY = 0; //背景 たて(-なら上にずれる) 120 leftB9.opacity = 1.0; //背景 鮮度 leftB9.x = 710; leftB9.y = 54; //game.rootScene.addChild(leftB9); // スコア表示 var scoreLabel = new Label(); scoreLabel.font = "15px Palatino"; scoreLabel.x = 15; scoreLabel.y = 105; // ボタンを画面上に配置 for (var i = 0; i < BUTTON_NUM; i++) { if (i <= 3) { buttons[i] = new Button(((i) * SCREEN_W / (BUTTON_NUM - 4)) + ((SCREEN_W / (BUTTON_NUM - 4)) - (BUTTON_SIZE * BUTTON_SCALE)) / 2, SCREEN_H / 8); } else if (3 < i <= 7) { buttons[i] = new Button(((i - 4) * SCREEN_W / (BUTTON_NUM - 4)) + ((SCREEN_W / (BUTTON_NUM - 4)) - (BUTTON_SIZE * BUTTON_SCALE)) / 2, (SCREEN_H / 8 + 175)); } //ボタン選択時処理 buttons[i].addEventListener("scanselect", function () { selectCount += 1; //正解のボタンが選択されたとき if (this.flag === 1) { //魚を水槽に追加する correctCount += 1; correctCountB += 1; this.image = null; game.assets[FISH_SE].play(); game.assets[KANSEI_SE].play(); setTimeout(function () { game.assets[FLYER_SE].play(); }, 800); setTimeout(function () { this.image = null; nextFish = FISH_IMGS[randRangeInt(0, FISH_IMGS.length - 1)]; //次の魚を決める buttonPlace(buttons, nextFish, flag); //ボタンを並べ直す for (var i = 0; i < BUTTON_NUM - 4; i++) { if (buttons[i].flag == 1) { waitA.moveTo(buttons[i].flagx - 5, buttons[i].flagy + 105); game.rootScene.addChild(waitA); } } for (var i = 4; i < BUTTON_NUM; i++) { if (buttons[i].flag == 1) { waitB.moveTo(buttons[i].flagx - 5, buttons[i].flagy + 105); game.rootScene.addChild(waitB); } } }, 1500); if (this.flag2 < 4) { game.rootScene.removeChild(waitA); setTimeout(function () { game.rootScene.addChild(waitA); }, 1500); } else { game.rootScene.removeChild(waitB); setTimeout(function () { game.rootScene.addChild(waitB); }, 1500); } var mogura = new Mogura(); mogura.x = this.flagx; mogura.y = this.flagy + 115; game.rootScene.addChild(mogura); setTimeout(function () { mogura.tl.moveTo(100, -200, 20); mogura.tl.and(); mogura.tl.rotateTo(2160, 60); }, 800); setTimeout(function () { game.rootScene.removeChild(mogura); }, 5000); } //左上に何匹たたいたかを表示 if (correctCountB == 1) { game.rootScene.addChild(leftB1); } if (correctCountB == 2) { game.rootScene.addChild(leftB2); } if (correctCountB == 3) { game.rootScene.addChild(leftB3); } if (correctCountB == 4) { game.rootScene.addChild(leftB4); } if (correctCountB == 5) { game.rootScene.addChild(leftB5); } if (correctCountB == 6) { game.rootScene.addChild(leftB6); } if (correctCountB == 7) { game.rootScene.addChild(leftB7); } if (correctCountB == 8) { game.rootScene.addChild(leftB8); } if (correctCountB == 9) { game.rootScene.addChild(leftB9); } if (correctCountB == 10) { correctCountB = 0; correctCountA += 1; game.rootScene.removeChild(leftB1); game.rootScene.removeChild(leftB2); game.rootScene.removeChild(leftB3); game.rootScene.removeChild(leftB4); game.rootScene.removeChild(leftB5); game.rootScene.removeChild(leftB6); game.rootScene.removeChild(leftB7); game.rootScene.removeChild(leftB8); game.rootScene.removeChild(leftB9); } if (correctCountA == 1) { game.rootScene.addChild(leftA1); } if (correctCountA == 2) { game.rootScene.addChild(leftA2); } if (correctCountA == 3) { game.rootScene.addChild(leftA3); } if (correctCountA == 4) { game.rootScene.addChild(leftA4); } if (correctCountA == 5) { game.rootScene.addChild(leftA5); } if (correctCountA == 6) { game.rootScene.addChild(leftA6); } if (correctCountA == 7) { game.rootScene.addChild(leftA7); } if (correctCountA == 8) { game.rootScene.addChild(leftA8); } setTimeout(function () { scanner.scanStart(2); }, 1500); }); //オブジェクトを表示 game.rootScene.addChild(buttons[i]); } nextFish = FISH_IMGS[randRangeInt(0, FISH_IMGS.length - 1)]; // ボタン画像を設定 buttonPlace(buttons, nextFish, flag); //もぐらを表示 for (var i = 0; i < BUTTON_NUM - 4; i++) { if (buttons[i].flag == 1) { waitA.moveTo(buttons[i].flagx - 5, buttons[i].flagy + 100); game.rootScene.addChild(waitA); } } for (var i = 4; i < BUTTON_NUM; i++) { if (buttons[i].flag == 1) { waitB.moveTo(buttons[i].flagx, buttons[i].flagy + 100); game.rootScene.addChild(waitB); } } for (var j = 0; j < 1000; j++) { waitA.tl.moveBy(0, -15, 6) waitA.tl.moveBy(0, 15, 6); waitA.tl.moveBy(0, -15, 6); waitA.tl.moveBy(0, 15, 6); waitA.tl.moveBy(0, -20, 10); waitA.tl.moveBy(0, 20, 10); waitB.tl.moveBy(0, -15, 4) waitB.tl.moveBy(0, 15, 4); waitB.tl.moveBy(0, -15, 4); waitB.tl.moveBy(0, 15, 4); waitB.tl.moveBy(0, -20, 8); waitB.tl.moveBy(0, 20, 8); } //オートスキャンの対象を設定 scanner.addScanTargets(buttons); // 毎フレームの処理 game.addEventListener(Event.ENTER_FRAME, function () { if (selectCount > 0) { scoreLabel.text = Math.floor(100 * (correctCount / selectCount)) + "% (" + correctCount + "/" + selectCount + ")"; } else { scoreLabel.text = 0 + "% (" + correctCount + "/" + selectCount + ")"; } //魚が10匹まで増えたら全部消す if (fishes.length >= 10) { game.assets[CAT_SE].play(); //猫の鳴き声を再生 game.rootScene.addChild(cat); //猫の移動 cat.tl.moveTo(0, 0, game.fps).then(function () { // 猫が現れたら魚を消す for (var i = 0; i < fishes.length; i++) { game.rootScene.removeChild(fishes[i]); } fishes = []; }); cat.tl.moveTo(0, SCREEN_H + 20, game.fps).then(function () { game.rootScene.removeChild(cat); }); } }); // スキャナーのタッチ有効領域を画面全体ではなくゲーム背景領域のみにする scanner.touchEnabled = true; $('html').off(('ontouchstart' in document) ? 'touchstart' : 'click'); // スキャンスピード調整ボタン var speedDown = new UIButton(SCREEN_W / 20, 0, SCREEN_W / 2.5, SCREEN_H / 15, "遅くする"); var speedUp = new UIButton(SCREEN_W - SCREEN_W / 2.5 - SCREEN_W / 20, 0, SCREEN_W / 2.5, SCREEN_H / 15, "速くする"); var speedLabel = new Label(scanner.scanInterval + "秒"); speedLabel.font = "20px Palatino"; speedLabel.x = SCREEN_W / 2 - 35; speedLabel.y = 10; speedLabel.width = 70; speedLabel.textAlign = "center"; speedLabel.tl.hide(); //スピードダウンボタンがクリックされたとき speedDown.ontouchstart = function () { if (scanner.scanInterval < 2) { scanner.scanInterval += 0.25; // game.assets[AAA_SE].play(); } speedLabel.text = scanner.scanInterval + "秒"; speedLabel.textAlign = "center"; speedLabel.tl.clear().show().delay(2).fadeOut(game.fps * 0.5); } //スピードアップボタンがクリックされたとき speedUp.ontouchstart = function () { if (scanner.scanInterval > 0.25) { scanner.scanInterval -= 0.25; } speedLabel.text = scanner.scanInterval + "秒"; speedLabel.tl.clear().show().delay(2).fadeOut(game.fps * 0.5); } // scan開始 scanner.scanStart(); //オートスキャンを表示 game.rootScene.addChild(scanner); game.rootScene.addChild(scoreLabel); config.addChild(speedDown); config.addChild(speedUp); config.addChild(speedLabel); game.rootScene.addChild(config); }; //ゲームの開始 game.start(); }; // ボタンのクラス var Button = Class.create(Sprite, { initialize: function (x, y) { Sprite.call(this, BUTTON_SIZE, BUTTON_SIZE); this.x = x; // ボタンの位置(横) this.y = y + 120; // ボタンの位置(縦・+で下にずれる)320 this.originX = 0; this.originY = 0; this.scaleX = BUTTON_SCALE; this.scaleY = BUTTON_SCALE; // 白枠 いじらない var backGround = new Sprite(BUTTON_SIZE, BUTTON_SIZE); backGround.x = this.x; //白枠の位置(よこ)いじらん backGround.y = this.y; //白枠の位置(たて) backGround.originX = 0; backGround.originY = 0; backGround.scaleX = BUTTON_SCALE; //白枠のよこ backGround.scaleY = BUTTON_SCALE; //白枠のたてのながさ var bgImage = new Surface(BUTTON_SIZE * BUTTON_SCALE, BUTTON_SIZE * BUTTON_SCALE); bgImage.context.fillStyle = "white"; bgImage.context.fillRect(0, 0, BUTTON_SIZE, BUTTON_SIZE); backGround.image = bgImage; game.rootScene.addChild(backGround); }, }); var UIButton = Class.create(Sprite, { initialize: function (x, y, width, height, text) { Sprite.call(this, width, height); this.x = x; //はやさ変更ボタンの位置(よこ) this.y = y; //はやさ変更ボタンの位置(たて) this.originX = 0; //??? this.originY = 0; var backGround = new Sprite(width, height); backGround.x = this.x; backGround.y = this.y; backGround.originX = 0; backGround.originY = 0; var bgImage = new Surface(width, height); bgImage.context.fillStyle = "rgba(50,50,50,0.05)"; bgImage.context.fillRect(0, 0, width, height); backGround.image = bgImage; var label = new Label(text); label.font = "16px Palatino" label.x = x + width / 2 - (text.length / 2) * 16; label.y = y + height / 2 - 8; label.color = "rgba(0,0,0,0.1)"; game.rootScene.addChild(backGround); game.rootScene.addChild(label); }, }); // もぐら var Mogura = Class.create(Sprite, { //初期化処理 initialize: function () { Sprite.call(this, MOGURA_WIDTH, MOGURA_HEIGHT); this.image = game.assets[OK_IMG]; this.x = 0; this.y = 0; this.destroy = false; }, //更新処理 onenterframe: function () { // this.x += MOGURA_SPEED/100; // this.y -= MOGURA_SPEED/100; if (this.x > SCREEN_W || this.destroy === true) { this.parentNode.removeChild(this); moguraList.erase(this); } }, });