enchant(); window.focus(); /* * 定数 */ var _DIR_ = SwitchApps.scriptDir(); // パラメータ var SCREEN_W = 600; //スクリーン var SCREEN_H = 320; var TIME = 0; // かご var KAGO_W = 60; //かご var KAGO_H = 33; var KAGO_X = 1; //8レーン時の位置 var KAGO_XD = 1; //8レーン時の移動先 var NAKA_W = 60; //かごの中身 var NAKA_H = 36; var WAKI_W = 64; //かごを脇に置く用 var WAKI_H = 32*6; var MIERU = 0; //果物によって見えるものが変わる var MODE = 1; //かごの移動するモード var tch = false; //ONOFF時かごの動作しているフラグ var sflg = true; //スタート準備 var pflg = false; //プレイ中 var cflg = false; //クリアフラグ // スタートボタン var START_W = 250; var START_H = 70; // 果物 var FRU_W = 30; var FRU_H = 30; var FRU_I = 0; //順番 var FRU_J = 0; //何個目の果物 // 点数 var SCO = 0; //採れた数 var SCO_R = 0; //惜しい! var SCO_FW = 40; //スコア縁 var SCO_FH = 320; var SCO_BW = 12; //スコアブロック var SCO_BH = 315; var SCO_MAX = 0; //スタート時に果物の上限を格納 // 評価用数値 var SOGO = 0; //1アクセスに済んだ果物の数 var SOGO_OK = 0.0; //果物を採れた数 var SOGO_OKPA = 0.0; var SOGO_R = 0.0; //ぎりぎり失敗 var SOGO_RPA = 0.0; // 画像 var START_IMG = _DIR_ + "/image/start.png"; var KAGO = _DIR_ + "/image/basket.png"; var NAKA = _DIR_ + "/image/basket2.png"; var MUKI = _DIR_ + "/image/basket3.png"; var RANGE_O = _DIR_ + "/image/rangeo.png"; var RANGE_R = _DIR_ + "/image/ranger.png"; var WAKI = _DIR_ + "/image/waki.png"; var FRU1 = _DIR_ + "/image/apple.png"; var FRU2 = _DIR_ + "/image/orange.png"; var FRU3 = _DIR_ + "/image/grape.png"; var FRU4 = _DIR_ + "/image/kaki.png"; var FRU5 = _DIR_ + "/image/kuri.png"; var BG = _DIR_ + "/image/back.png"; var LN4 = _DIR_ + "/image/lane4.png"; var LN8 = _DIR_ + "/image/lane8.png"; var SCO_F = _DIR_ + "/image/scoreft.png"; var SCO_B = _DIR_ + "/image/scoreblock.png"; var SCO_S = _DIR_ + "/image/scorescale.png"; var SCO_M = _DIR_ + "/image/scoremask.png"; var RES_1 = _DIR_ + "/image/resultsum.png"; var RES_O = _DIR_ + "/image/resulto.png"; var RES_R = _DIR_ + "/image/resultr.png"; var RES_X = _DIR_ + "/image/resultx.png"; // 音 var MAIN_BGM = _DIR_ + "/sound/oekaki.mp3"; var GET_SE = _DIR_ + "/sound/decision8.mp3"; var GIRI_SE = _DIR_ + "/sound/cancel5.mp3"; var MISS_SE = _DIR_ + "/sound/cancel1.mp3"; // アセット var ASSETS = [ START_IMG, KAGO, NAKA, MUKI, RANGE_O, RANGE_R, WAKI, FRU1, FRU2, FRU3, FRU4, FRU5, BG, LN4, LN8, SCO_F, SCO_B, SCO_S, SCO_M, RES_1, RES_O, RES_R, RES_X, MAIN_BGM, GET_SE, GIRI_SE, MISS_SE ]; // ゲーム var game = null; // ランダム値生成 var randfloat = function(min, max) { return Math.random()*(max-min)+min; }; /* *オプション項目の設定 */ $(document).ready(function(){ logger = new SwitchApps.Logger(SwitchApps.app.id, null); /*ログの設定*/ LOG_switch = logger.addHeader('スイッチ入力'); LOG_start = logger.addHeader('はじめ'); LOG_restart = logger.addHeader('さいしょから'); LOG_clear = logger.addHeader('おわり'); LOG_score = logger.addHeader('とれた:%s'); LOG_scorer = logger.addHeader('おしい:%s'); LOG_move = logger.addHeader('うごく'); LOG_stop = logger.addHeader('とまる'); LOG_fall = logger.addHeader('おちる'); LOG_get = logger.addHeader('とれた'); LOG_giri = logger.addHeader('おしい'); LOG_miss = logger.addHeader('とれなかった'); LOG_allget = logger.addHeader('とれた率%s\%'); LOG_allgiri = logger.addHeader('おしい率%s\%'); /*グローバル変数の宣言*/ KAGO_MOVE = {set:1}; KAGO_SPEED = {set:1}; FRU_SELECT = {set:1}; FRU_SPEED = {set:1}; HIT_MAX = {set:1}; AIZU = {set:1}; /*ラジオボタン生成*/ createSettingBox("かごのいどう","kago_move",KAGO_MOVE,23,"スイッチ","4レーン","8レーン"); createSettingBox("かごのはやさ","kago_speed",KAGO_SPEED,25,"おそい","ふつう","はやい"); createSettingBox("くだもの","fru_select",FRU_SELECT,27,"りんご","みかん","ぶどう","かき","くり"); createSettingBox("おちるはやさ","fru_speed",FRU_SPEED,29,"おそい","ふつう","はやい"); createSettingBox("おちるかず","hit_max",HIT_MAX,40,"5","10","15","20","25","30"); createSettingBox("おちるあいず","aizu",AIZU,43,"ながい","ふつう","みじかい"); }); window.onload = function(){ //ゲームオブジェクトの作成 game = new Core(SCREEN_W,SCREEN_H); //fpsの指定 game.fps = 60; //画像の読み込み game.preload(ASSETS); //キーバインド設定 game.keybind(10,'a'); game.keybind(13,'a'); game.keybind(32,'a'); game.keybind(49,'a'); game.keybind(51,'a'); game.keybind(123,'a'); //ロード時に呼ばれる game.onload = function(){ var bgm = game.assets[MAIN_BGM]; var esc = 0; var loop = true; /* 背景 */ var bg = new Sprite(SCREEN_W,SCREEN_H); bg.image = game.assets[BG]; game.rootScene.addChild(bg); game.rootScene.backgroundColor = "lightgreen"; /* 脇に置く段ボール箱 */ waki = new Waki(); waki.moveTo(SCREEN_W-WAKI_W,SCREEN_H-WAKI_H); game.rootScene.addChild(waki); /* 範囲 */ ranger = new RangeR(); ranger.moveTo(0,SCREEN_H-KAGO_H); game.rootScene.addChild(ranger); rangeo = new RangeO(); rangeo.moveTo(0,0); game.rootScene.addChild(rangeo); /* かご */ muki = new Muki(); muki.moveTo(0,SCREEN_H-KAGO_H); game.rootScene.addChild(muki); naka = new Naka(); naka.moveTo(0,SCREEN_H-NAKA_H); game.rootScene.addChild(naka); kago = new Kago(); kago.moveTo(SCREEN_W/2+SCO_FW/2-KAGO_W/2,SCREEN_H-KAGO_H); game.rootScene.addChild(kago); /* 4レーン時の目安線 */ var lane4 = new Sprite(SCREEN_W-SCO_FW,SCREEN_H); lane4.image = game.assets[LN4]; lane4.moveTo(SCO_FW,0); lane4.opacity = 0; game.rootScene.addChild(lane4); /* 8レーン時の目安線 */ var lane8 = new Sprite(SCREEN_W-SCO_FW,SCREEN_H); lane8.image = game.assets[LN8]; lane8.moveTo(SCO_FW,0); lane8.opacity = 0; game.rootScene.addChild(lane8); /* スコアカウント */ var scorecount1 = new Sprite(SCO_FW,SCO_FH); scorecount1.image = game.assets[SCO_F]; scorecount1.moveTo(0,0); game.rootScene.addChild(scorecount1); var scorecount2 = new Sprite(SCO_BW,SCO_BH); scorecount2.image = game.assets[SCO_B]; scorecount2.moveTo(7,2); scorecount2.frame = 0; game.rootScene.addChild(scorecount2); var scorescale = new Sprite(14,315); scorescale.image = game.assets[SCO_S]; scorescale.moveTo(SCO_BW+8,2); game.rootScene.addChild(scorescale); var scoremask = new Sprite(27,263); scoremask.image = game.assets[SCO_M]; scoremask.moveTo(7,2); game.rootScene.addChild(scoremask); /* スタートボタン */ var startButton = new Sprite(250,70); startButton.image = game.assets[START_IMG]; startButton.moveTo(SCREEN_W/2+SCO_FW/2-125,SCREEN_H/2-35); game.rootScene.addChild(startButton); /* 結果画面 */ var score = new Group(); /* 全部で */ var smark = new Sprite(39,28); smark.image = game.assets[RES_1]; smark.moveTo(SCREEN_W/2+SCO_FW/2-40,45); score.addChild(smark); var stext = new Label("ぜんぶで"); stext.font="13px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; stext.moveTo(SCREEN_W/2+SCO_FW/2-45,40*2); score.addChild(stext); var zenbu = new Label(); zenbu.font="40px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; zenbu.moveTo(SCREEN_W/2+SCO_FW/2,40); score.addChild(zenbu); /* ○ */ var omark = new Sprite(40,40); omark.image = game.assets[RES_O]; omark.moveTo(SCREEN_W/2+SCO_FW/2-40*4,40*3); score.addChild(omark); var otext = new Label("とれた"); otext.font="13px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; otext.moveTo(SCREEN_W/2+SCO_FW/2-40*4,40*4+2); score.addChild(otext); var totta = new Label(); totta.font="40px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; totta.moveTo(SCREEN_W/2+SCO_FW/2-40*3,40*3); score.addChild(totta); /* △ */ var rmark = new Sprite(40,40); rmark.image = game.assets[RES_R]; rmark.moveTo(SCREEN_W/2+SCO_FW/2-40,40*3); score.addChild(rmark); var rtext = new Label("おしい"); rtext.font="13px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; rtext.moveTo(SCREEN_W/2+SCO_FW/2-40,40*4+2); score.addChild(rtext); var oshii = new Label(); oshii.font="40px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; oshii.moveTo(SCREEN_W/2+SCO_FW/2,40*3); score.addChild(oshii); /* × */ var xmark = new Sprite(40,40); xmark.image = game.assets[RES_X]; xmark.moveTo(SCREEN_W/2+SCO_FW/2+40*2,40*3); score.addChild(xmark); var xtext = new Label("とれなかった"); xtext.font="13px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; xtext.moveTo(SCREEN_W/2+SCO_FW/2+40*1.5,40*4+2); score.addChild(xtext); var otita = new Label(); otita.font="40px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; otita.moveTo(SCREEN_W/2+SCO_FW/2+40*3,40*3); score.addChild(otita); /* 何か一言 */ var hyoka = new Label(); hyoka.font="40px 'Meiryo','メイリオ','ヒラギノ角ゴ Pro W3',sans-serif"; hyoka.moveTo(SCREEN_W/2+SCO_FW/2-40*2,40*5); score.addChild(hyoka); /* スイッチ入力 */ game.addEventListener('abuttondown',function(){ var ev = new Event('touchstart'); game.currentScene.dispatchEvent(ev); }); game.addEventListener('abuttonup',function(){ var ev = new Event('touchend'); game.currentScene.dispatchEvent(ev); }); game.rootScene.ontouchstart = function(){ if (pflg) kago.mv(); }; game.rootScene.ontouchend = function(){ LOG_switch(); if (sflg) { startButton.parentNode.removeChild(startButton); sflg = false; SCO_MAX = (HIT_MAX.set == 1)? 5 : (HIT_MAX.set == 2)? 10 : (HIT_MAX.set == 3)? 15 : (HIT_MAX.set == 4)? 20 : (HIT_MAX.set == 5)? 25 : 30; lane4.opacity = (KAGO_MOVE.set == 2)?1:0; rmark.opacity = (KAGO_MOVE.set == 2)?0:1; rtext.opacity = (KAGO_MOVE.set == 2)?0:1; oshii.opacity = (KAGO_MOVE.set == 2)?0:1; lane8.opacity = (KAGO_MOVE.set == 3)?1:0; scoremask.frame = HIT_MAX.set-1; for (var i = 0; i < SCO_MAX; i++) { FRU_I++; var fru = new Fru(); if (KAGO_MOVE.set == 1) { fru.moveTo(Math.random()*(SCREEN_W-FRU_W-SCO_FW)+SCO_FW, Math.random()*130); } else if (KAGO_MOVE.set == 2) { var xx = -1; //位置を4レーンの内どれにするか while (xx < 0) xx = Math.floor(Math.random() * 4); fru.moveTo((2*xx+1)*((SCREEN_W-SCO_FW)/8)-(FRU_W/2)+SCO_FW, Math.random()*130); } else { var xx = -1; //位置を8レーンの内どれにするか while (xx < 0) xx = Math.floor(Math.random() * 8); fru.moveTo((2*xx+1)*((SCREEN_W-SCO_FW)/16)-(FRU_W/2)+SCO_FW, Math.random()*130); } game.rootScene.addChild(fru); } MIERU = FRU_SELECT.set; MODE = KAGO_MOVE.set; FRU_J = 1; //tch = (MODE == 1)?true:false; if (MODE == 1) { tch = true; LOG_move(); } else { tch = false; } LOG_start(); bgm.play(true); bgm.src.loop = "true"; pflg = true; } else if (cflg) { bg.opacity = 1; score.parentNode.removeChild(score); game.rootScene.addChild(startButton); SCO = 0; SCO_R = 0; FRU_I = 0; FRU_J = 0; cflg = false; LOG_restart(); sflg = true; } }; /* *シーン更新処理 */ game.rootScene.onenterframe = function(){ // アイテムを生成,表示 scorecount2.frame = SCO; if (pflg) { if (FRU_J > SCO_MAX) { //果物全部済んだら pflg = false; cflg = true; bg.opacity = 0; if (MODE == 1) { if (tch) { tch = false; LOG_stop(); } } else if (MODE == 2) { lane4.opacity = 0; } else { lane8.opacity = 0; } LOG_clear(); zenbu.text = SCO_MAX; totta.text = SCO; totta.color = (SCO==SCO_MAX) ? 'red' : 'black'; //スコアの色 LOG_score(SCO); oshii.text = SCO_R; LOG_scorer(SCO_R); otita.text = SCO_MAX - SCO - SCO_R; hyoka.text = (SCO==SCO_MAX)?"めいじん" : (SCO/SCO_MAX>=0.8)?"すごい" : (SCO/SCO_MAX>=0.6)?"やったね" : (SCO/SCO_MAX>=0.4)?"もうすこし" : (SCO/SCO_MAX>=0.2)?"まだまだ" : "がんばって"; game.rootScene.addChild(score); bgm.stop(); } //else bgm.play(); } } } game.start(); } /* * プレイヤー */ var Kago = Class.create(Sprite, { initialize: function() { Sprite.call(this, KAGO_W, KAGO_H); this.image = game.assets[KAGO]; this.frame = 0; this.susumu = 1; this.gouhi = 0; }, onenterframe: function() { var left = SCO_FW; //左端 var right = SCREEN_W - KAGO_W; //右端 if (MODE == 1) { //かご移動をONOFFする場合 this.x += (tch) ? (3 * KAGO_SPEED.set * this.susumu) : 0; if (this.x < left) { //左端にぶつかったら this.x = left; this.susumu = 1; } else if (this.x > right) { //右端にぶつかったら this.x = right; this.susumu = -1; } } else { this.x = (MODE==2)?(2*KAGO_X+1)*((SCREEN_W-SCO_FW)/8)-(KAGO_W/2)+SCO_FW :(2*KAGO_X+1)*((SCREEN_W-SCO_FW)/16)-(KAGO_W/2)+SCO_FW; if (KAGO_X != KAGO_XD) { KAGO_X += 0.1 * this.susumu; if ((KAGO_X >= KAGO_XD)&&(this.susumu == 1)) { KAGO_X = KAGO_XD; if ((KAGO_X == 3 && MODE == 2)||(KAGO_X == 7 && MODE == 3)) this.susumu = -1; } else if ((KAGO_X <= KAGO_XD)&&(this.susumu == -1)) { KAGO_X = KAGO_XD; if (KAGO_X == 0) this.susumu = 1; } else if (this.x > right) { KAGO_XD = (MODE==2)?3:7; KAGO_X = (MODE==2)?3:7; this.susumu = -1; } else if (this.x < left) { KAGO_XD = 0; KAGO_X = 0; this.susumu = 1; } } } /* 合否判定 */ if (this.frame != 0) { this.gouhi++; if (this.gouhi >= 60) { this.frame = 0; this.gouhi = 0; } } }, mv: function(e) { if (MODE == 1) { if (tch) { tch = false; LOG_stop(); } else { tch = true; LOG_move(); } } else { KAGO_XD += this.susumu; LOG_move(); } } }); /* * 脇に置いた段ボール */ var Waki = Class.create(Sprite, { initialize: function() { Sprite.call(this, WAKI_W, WAKI_H); this.image = game.assets[WAKI]; this.frame = 0; }, onenterframe: function() { this.frame = Math.floor(SCO / 5) + 7 * (MIERU - 1); } }); /* * かごの中身 */ var Naka = Class.create(Sprite, { initialize: function() { Sprite.call(this, NAKA_W, NAKA_H); this.image = game.assets[NAKA]; }, onenterframe: function() { this.frame = (SCO % 5) + 5 * (MIERU - 1); this.x = kago.x; } }); /* * かごの向き */ var Muki = Class.create(Sprite, { initialize: function() { Sprite.call(this, 108, KAGO_H); this.image = game.assets[MUKI]; }, onenterframe: function() { this.frame = (kago.susumu == 1) ? 1 : 0; this.x = kago.x - 24; } }); /* * 成功範囲 */ var RangeO = Class.create(Sprite, { initialize: function() { Sprite.call(this, 48, SCREEN_H); this.image = game.assets[RANGE_O]; }, onenterframe: function() { this.opacity = (MODE == 1 && pflg) ? 0.5 : 0; this.x = kago.x + (KAGO_W-48)/2; } }); /* * おしい範囲 */ var RangeR = Class.create(Sprite, { initialize: function() { Sprite.call(this, KAGO_W*3, KAGO_H); this.image = game.assets[RANGE_R]; }, onenterframe: function() { this.opacity = (MODE == 1 && pflg) ? 0.5 : 0; this.x = kago.x - KAGO_W; } }); /* * アイテム */ var Fru = Class.create(Sprite, { initialize: function() { Sprite.call(this, FRU_W, FRU_H); /* 果物の種類 */ this.image = (FRU_SELECT.set == 1)? game.assets[FRU1] //ringo :(FRU_SELECT.set == 2)? game.assets[FRU2] //mikan :(FRU_SELECT.set == 3)? game.assets[FRU3] //budo :(FRU_SELECT.set == 4)? game.assets[FRU4] //kaki : game.assets[FRU5] //kuri /* 効果音 */ this.getse = game.assets[GET_SE]; //採取時 this.girise = game.assets[GIRI_SE]; //惜しい時 this.missse = game.assets[MISS_SE]; //失敗時 /* カウント */ this.ten = FRU_I; this.time1 = 0; //点滅までのカウント this.fall = Math.random() * 100; this.time2 = 0; //点滅のカウント this.aizu = 0; this.frame = 0; //点滅フレーム }, onenterframe: function() { this.aizud = (AIZU.set == 1)? 10 :(AIZU.set == 2)? 6 : 3; if (this.ten == FRU_J) { if (this.time1 < this.fall) //落ちる時までタイムカウント this.time1++; else this.time2++; //時が来たら2ndタイムカウント } if (this.time2 > 10) { this.frame += 1; this.frame %= 2; if (this.frame == 0) this.aizu++; this.time2 = 0; } this.vy = FRU_SPEED.set; //落ちるスピード if (this.aizu == this.aizud) LOG_fall(); if (this.aizu >= this.aizud) { //落ちる時間になったら this.frame = 0; this.y += this.vy; //落下 } /* 採る */ if (this.intersect(kago)) { this.donefru(); if (tch && MODE == 1) { this.missse.clone().play(); //ミス kago.frame = 3; LOG_miss(); } else if (!this.intersect(rangeo) && MODE != 2) { this.girifru(); tch = true; LOG_move(); } else { this.getfru(); tch = true; LOG_move(); } //console.log("せいこう" + SOGO_OKPA + "\%"); //console.log("おしい" + SOGO_RPA + "\%"); LOG_allget(SOGO_OKPA); LOG_allgiri(SOGO_RPA); this.parentNode.removeChild(this); } if (this.y > SCREEN_H-FRU_H) { this.donefru(); if (MODE == 1 && !tch && this.intersect(ranger) || MODE == 3 && this.intersect(ranger)) this.girifru(); else { this.missse.clone().play(); //ミス kago.frame = 3; LOG_miss(); } tch = true; LOG_move(); //console.log("せいこう" + SOGO_OKPA + "\%"); //console.log("おしい" + SOGO_RPA + "\%"); LOG_allget(SOGO_OKPA); LOG_allgiri(SOGO_RPA); this.parentNode.removeChild(this); } }, donefru: function(e) { SOGO++; FRU_J++; }, getfru: function(e) { SCO++; SOGO_OK++; SOGO_OKPA = SOGO_OK / SOGO * 100; this.getse.clone().play(); kago.frame = 1; LOG_get(); }, girifru: function(e) { SCO_R++; SOGO_R++; SOGO_RPA = SOGO_R / SOGO * 100; this.girise.clone().play(); kago.frame = 2; LOG_giri(); } });