enchant(); window.focus(); var _DIR_ = SwitchApps.scriptDir(); //ゲームスクリーンの幅と高さ var SCREEN_W = 508; //スクリーンの幅 var SCREEN_H = 420; //スクリーンの高さ var game = null; //画像 var BALL = _DIR_ + '/images/ball.png'; //ボール var BG = _DIR_ + '/images/back.png'; //背景 var COUNTER = _DIR_ + '/images/counter_st.png'; //カウンタ var POINT = _DIR_ + '/images/counter_countt.png'; //カウンタの点数 var INU = _DIR_ + '/images/inu_s.png'; //イヌ var KIJI = _DIR_ + '/images/kiji_s.png'; //キジ var SARU = _DIR_ + '/images/saru_s.png'; //サル var ONI = _DIR_ + '/images/oniv_t.png'; //オニ var TAKARA = _DIR_ + '/images/takarai_t.png'; //宝 var END_MESSAGE = _DIR_ + '/images/me_t.png'; //終了時のメッセージ var TAKARA_EFFECT = _DIR_ + '/images/kira_t.png'; //宝の効果 var HANABI = _DIR_ + '/images/hanabii_t.png'; //花火 //音 var HIT_SE = _DIR_ + '/sounds/oni_hit.mp3'; //ヒット音 var SHOT_SE = _DIR_ + '/sounds/ball.mp3'; //発射音 var KOUSAN_SE = _DIR_ + '/sounds/kousan.mp3';//降参 var YURUSITE_SE = _DIR_ + '/sounds/oni_yurusite.mp3'; //許して var NONO_SE = _DIR_ + '/sounds/oni_nono.mp3'; //ノーノー var HANABI_SE = _DIR_ + '/sounds/hanabi.mp3'; //花火音 // アセットリスト var ASSETS = [ BALL,BG,COUNTER,POINT,INU,KIJI,SARU,ONI,TAKARA,END_MESSAGE,TAKARA_EFFECT,HANABI, HIT_SE,SHOT_SE,KOUSAN_SE,YURUSITE_SE,NONO_SE,HANABI_SE ]; var logger = null; $(document).ready(function(){ logger = new SwitchApps.Logger(SwitchApps.app.id, null); /*ログの設定*/ LOG_switch = logger.addHeader('スイッチ入力'); LOG_touch = logger.addHeader('タッチ/クリック入力'); LOG_shoot = logger.addHeader('ボールをシュート'); LOG_hit = logger.addHeader('ボールが鬼に当たった'); LOG_point = logger.addHeader('得点:%d') LOG_yoko = logger.addHeader('ボールが鬼の真横を通った'); LOG_miss = logger.addHeader('ボールが当たらなかった'); LOG_move = logger.addHeader('ボールを%sに移動'); LOG_clear = logger.addHeader('ゲームクリア'); LOG_restart = logger.addHeader('最初からスタート'); /*グローバル変数の宣言*/ HIT_NUM = {set:10};//目標得点 ONI_COLOR = {set:1};//鬼の色 BALL_SIZE = {set:1};//ボールの大きさ BALL_SPEED = {set:2};//鬼の移動速度 BALL_COLOR = {set:1};//ボールの色 GAME_MODE = {set:1,targetname:["mode-oni","mode-ball"],targetvalue:[1,2]};//1:鬼移動モード 2:ボール移動モード //鬼移動モード時の設定 HIT_AREA = {set:1}//鬼の当り判定 ONI_SPEED = {set:2}//鬼の移動速度 ONI_RANGE = {set:2}//鬼の移動幅 //ボール移動時の設定 BALL_MODE = {set:1,targetname:["ball_move"],targetvalue:[2]}; //オートスキャンモード時の設定 BALL_MOVE = {set:2}; /****ここまで****/ /*ボタンの生成*/ createSettingBoxException1("目標得点","hit_num",HIT_NUM,11,1,10); createSettingBox("おにの色","oni_color",ONI_COLOR,12,"赤","青","緑"); createSettingBox("ボールの色","ball_color",BALL_COLOR,13,"赤","青","緑"); createSettingBox("ボールの速さ","ball_speed",BALL_SPEED,14,"おそい","標準","はやい"); createSettingBox("ボールの大きさ","ball_size",BALL_SIZE,15,"標準","おおきい"); createSettingBox("ゲームモード","game_mode",GAME_MODE,16,"鬼移動モード","ボール移動モード"); createSettingBox("鬼の当たり判定","hit_area",HIT_AREA,17,"標準","必中"); createSettingBox("鬼の移動速度","oni_speed",ONI_SPEED,18,"おそい","標準","はやい"); createSettingBox("鬼の移動幅","oni_range",ONI_RANGE,19,"せまい","標準","広い"); createSettingBox("ボールの移動方法","ball_mode",BALL_MODE,20,"移動無し","オートスキャン","ステップスキャン"); createSettingBox("ボールの移動速度","ball_move",BALL_MOVE,21,"おそい","標準","はやい"); $("#hit_area,#oni_speed,#oni_range").wrapAll("");//鬼移動モードのグループ化 $("#ball_mode,#ball_move").wrapAll("");//ボール移動モードのグループ化 }) window.onload = function() { //ゲームオブジェクトの生成 game = new Core(SCREEN_W, SCREEN_H); //FPSの指定 game.fps = 16; // SE、画像の読み込み game.preload(ASSETS); //ロード時に呼ばれる game.onload = function() { var gameScene = game.rootScene; gameScene.backgroundColor = "#fff"; var bg = new Sprite(420, 420); bg.image = game.assets[BG]; //背景 gameScene.addChild(bg); //イヌ var inu = new Sprite(116,136); inu.image = game.assets[INU]; inu.y = 280; gameScene.addChild(inu); //キジ var kiji = new Sprite(124,109); kiji.image = game.assets[KIJI]; kiji.x = 260; kiji.y = 240; gameScene.addChild(kiji); //サル var saru = new Sprite(115,150); saru.image = game.assets[SARU]; saru.x = 320; saru.y = 270; gameScene.addChild(saru); //キーバインドの設定 game.keybind(49, 'a'); //1キー game.keybind(51, 'a'); //3キー game.keybind(32, 'a'); //spaceキー game.keybind(10, 'a'); //Enter1 game.keybind(13, 'a'); //Enter windows game.keybind(123, 'a'); //F12キー //スプライトの生成 //鬼 var oni = new Sprite(245, 207); oni.image = game.assets[ONI]; //鬼 oni.tick = 0; oni.anim = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]; oni.scaleX = 0.75; oni.scaleY = 0.75; oni.x = 90; oni.y = 60; gameScene.addChild(oni); //鬼の当たり判定(右) var oniHitRight = new Sprite(20,10); oniHitRight.x = 220; oniHitRight.y = 170; gameScene.addChild(oniHitRight); //鬼の当たり判定(左) var oniHitLeft = new Sprite(20,10); oniHitLeft.x = 180; oniHitLeft.y = 170; gameScene.addChild(oniHitLeft); //鬼の当たり判定(中) var oniHitMiddle = new Sprite(20,10); oniHitMiddle.x = 200; oniHitMiddle.y = 170; gameScene.addChild(oniHitMiddle); //鬼のアニメーションに使用 var oni_tick = 0; //鬼の向き var oniMuki = 0; //鬼の位置関係 var oniIti = 0; var oniItiPrev = 0; var oniItiFlag = 0; //ボール var ball = new Sprite(59,59); ball.image = game.assets[BALL]; ball.tick = 0; ball.anim = [0,1,2]; ball.scaleX = 0.50; ball.scaleY = 0.50; ball.x = 180; ball.y = 360; gameScene.addChild(ball); //ボールの当たり判定 var ballTouch = new Sprite(420,420); gameScene.addChild(ballTouch); //ボールの位置 var ballItiFlag = 0; //鬼にボールが当たる距離 var hitDistanceMiddle = (oniHitMiddle.width+ball.width)/2; var hitDistanceLeft = (oniHitLeft.width+ball.width)/3; var hitDistanceRight = (oniHitRight.width+ball.width)/3; //カウンター var counter = new Sprite(88, 420); counter.image = game.assets[COUNTER]; //カウンター counter.anim = [0,1,2,3,4,5,6,7,8,9]; counter.frame = 9; counter.x = 420; gameScene.addChild(counter); //目標点数を変更した時の処理 game.numCh = function() { //console.log(HIT_NUM.set); counter.frame = counter.anim[HIT_NUM.set - 1]; }; game.numCh(); $(".box-button").on('click', function(){ //console.log($("#game_mode").position().top); counter.frame = counter.anim[HIT_NUM.set - 1]; }); var refCount = new Array(9); //点数加算 game.addPoint = function(y) { var point = new Sprite(76,40); refCount[hitcount - 1] = point; point.image = game.assets[POINT]; point.anim = [0,1]; point.x = 432; point.y = y; point.tick = 0; gameScene.addChild(point); //カウント点滅 point.addEventListener(Event.ENTER_FRAME, function() { var point_tick = 0 ; point.tick ++; if((point.tick % 2) === 0) point_tick ++; point.frame = point.anim[point_tick % 2]; }); }; //var count_tick = 0; //当たった回数 var hitcount = 0; // var hit_cnt_ch = 0; //花火 game.addFireworks = function(x, y){ var hanabi = new Sprite(358,354); hanabi.image = game.assets[HANABI]; hanabi.x = x; hanabi.y = y; hanabi.scaleX = 0.1; hanabi.scaleY = 0.1; hanabi.tick = 0; gameScene.addChild(hanabi); //花火のアニメーション hanabi.addEventListener(Event.ENTER_FRAME, function() { hanabi.tick ++; hanabi.scaleX += hanabi.tick * 0.01; hanabi.scaleY += hanabi.tick * 0.01; if(hanabi.tick == 10) gameScene.removeChild(hanabi); }); }; //宝 var takara = new Sprite(312,223); takara.image = game.assets[TAKARA]; takara.tick = 0; takara.anim = [0]; takara.scaleX = 0.50; takara.scaleY = 0.50; takara.x = 60; takara.y = 180; //宝の効果 var takaraEffect = new Sprite(312,223); takaraEffect.image = game.assets[TAKARA_EFFECT]; takaraEffect.tick = 0; takaraEffect.anim = [0,1,2]; takaraEffect.scaleX = 0.50; takaraEffect.scaleY = 0.50; takaraEffect.x = 60; takaraEffect.y = 180; //終了時のメッセージ var endMessage = new Sprite(324,51); endMessage.image = game.assets[END_MESSAGE]; endMessage.anim = [0]; endMessage.scaleX = 1.25; endMessage.scaleY = 1.25; endMessage.x = 40; endMessage.y = 40; var flag = 0; //0:通常 1:ボールを発射した時 2:ボールが鬼に当たったとき 3:ボールが鬼をかすめたとき 4:終了画面 var r_flag = 0 ; //0:通常 1:鬼がボールに当たった直後 2:鬼にボールが当たって点数が目標点数に達した時 var g_flag = 0; //0:鬼が城に戻るまで 1:鬼が城に戻った後 2:鬼が画面前に来たとき 3:画面前に宝箱が出現した時 var s_flag = 0; //0:鬼にボールが当たって点数が目標点数に達する前 1:鬼にボールが当たって点数が目標点数に達した時 2:鬼の降参のSEを流した後 3:鬼の許してのSEを流した後 var rt_flag = 0; //0:ボールが右に移動 1:ボールが左に移動 var i = 0; var g_tick = 0; var t_tick = 0; //鬼 oni.addEventListener(Event.ENTER_FRAME, function() { //鬼移動モードのとき if(GAME_MODE.set == 1) oniItiFlag = 0; //点数が目標点数に達していないとき if(r_flag != 2) { //鬼移動モード if(GAME_MODE.set == 1) { //右向き if (oniMuki === 0) { //鬼の移動速度 oni.x += (3 * ONI_SPEED.set); oniHitMiddle.x += (3 * ONI_SPEED.set); oniHitLeft.x += (3 * ONI_SPEED.set); oniHitRight.x += (3 * ONI_SPEED.set); //向き変更 if (oni.x > (100 + (ONI_RANGE.set * 40)) ) oniMuki = 1; } //左向き if (oniMuki == 1) { //鬼の移動速度 oni.x -= (3 * ONI_SPEED.set); oniHitMiddle.x -= (3 * ONI_SPEED.set); oniHitLeft.x -= (3 * ONI_SPEED.set); oniHitRight.x -= (3 * ONI_SPEED.set); //向き変更 if (oni.x < (90 - (ONI_RANGE.set * 40)) ) oniMuki = 0; } //ボール移動モード } else if(GAME_MODE.set == 2){ //鬼移動モードからボール移動モードに変更された時の鬼の位置の調整 if(oniItiFlag == 0){ oni.x = 90; oniHitMiddle.x = 200; oniHitLeft.x = 180; oniHitRight.x = 220; oniItiFlag = 1; } //ボール必中モードの鬼の位置 if(BALL_MODE.set == 1){ oni.x = 90; oniHitMiddle.x = 200; oniHitLeft.x = 180; oniHitRight.x = 220; } } } //鬼にボールが当たった際の処理 if (r_flag == 1) { //鬼の画像変更 oni.frame = oni.anim[10 + 12 * (ONI_COLOR.set - 1)]; //鬼の画像が回転 oni.rotate(30); i++; if(i == 12) { i = 0; r_flag = 0; //ボール移動モード if(GAME_MODE.set == 2) { //必中モード以外 if(BALL_MODE.set != 1) { //鬼の位置変更の処理 while(oniIti == oniItiPrev) oniIti = rand(3); oni.x = -30 + (oniIti * 120); oniHitMiddle.x = oni.x + 110; oniHitLeft.x = oniHitMiddle.x - 20; oniHitRight.x = oniHitMiddle.x + 20; oniItiPrev = oniIti; } } } }  //点数が目標点数に達した時 else if (r_flag == 2) { oni.tick++; if((oni.tick % 3) === 0) { oni_tick++; g_tick ++ ; //花火の生成 if( oni_tick % 3 === 0 && (g_flag === 0 || g_flag == 1)) { var x = rand(200)-100; var y = rand(200)-100; game.assets[HANABI_SE].clone().play();//花火音 game.addFireworks(x, y); } //鬼が城に戻る if(g_flag === 0) { //音の再生 if(s_flag == 1) { game.assets[KOUSAN_SE].play(true);//降参 s_flag = 2; } //鬼の画像を縮小 oni.scaleX -= 0.05; oni.scaleY -= 0.05; //鬼のアニメーションを変更 oni.frame = oni.anim[(oni_tick % 2) + 4 + 12 * (ONI_COLOR.set - 1)]; //鬼が城に到着 if(g_tick == 10) { g_flag = 1; } } //鬼が城から出てくる else if(g_flag == 1) { //音の再生 if(s_flag == 2){ game.assets[YURUSITE_SE].play(true);//許して s_flag = 3; } //鬼の画像の拡大 oni.scaleX += 0.05; oni.scaleY += 0.05; oni.y += 5; //鬼のアニメーション変更 oni.frame = oni.anim[(oni_tick % 2) + 6 + 12 * (ONI_COLOR.set - 1)]; //鬼が画面前に到着 if(g_tick == 30) { g_flag = 2; } } //鬼が画面前に到着 else if(g_flag == 2) { t_tick ++; //宝の出現 gameScene.addChild(takara); //宝の画像の拡大 takara.scaleX += 0.05; takara.scaleY += 0.05; takaraEffect.scaleX += 0.05; takaraEffect.scaleY += 0.05; //宝の効果と終了時のメッセージの表示 if (t_tick == 10) { g_flag = 3; gameScene.addChild(endMessage); gameScene.addChild(takaraEffect); gameScene.addChild(ballTouch); } } else if(g_flag == 3){ //宝の効果のアニメーション takaraEffect.frame = takaraEffect.anim[oni_tick % 3]; flag = 4; } } } //鬼のアニメーション else { oni.tick++; if((oni.tick % 3) === 0) { oni_tick++; } oni.frame = oni.anim[oni_tick % 4 + 12 * (ONI_COLOR.set - 1)]; } }); //スイッチを押した時の処理 game.addEventListener(Event.A_BUTTON_DOWN, function(e){ LOG_switch(); //スイッチを押した if(flag === 0){ //ボール移動モードかつステップスキャンモードだったとき if(GAME_MODE.set == 2 && BALL_MODE.set == 3){ //左に移動 if(event.keyCode == 49){ LOG_move('左'); //左端に行ったらそれ以上左には移動しない if(ball.x <= 70) {} //ball.x = 290; else ball.x -= 110; ballItiFlag = 2; } //右に移動 else if(event.keyCode == 51){ LOG_move('右'); //右端に行ったらそれ以上右には移動しない if(ball.x >= 290) {} //ball.x = 70; else ball.x += 110; ballItiFlag = 2; } else { LOG_shoot(); game.assets[SHOT_SE].play(true);//ボール音 flag = 1; } } //ボールの発射 else{ LOG_shoot(); game.assets[SHOT_SE].play(true);//ボール音 flag = 1; } } else if ( flag == 4 ){ LOG_restart(); gameScene.removeChild(takaraEffect); gameScene.removeChild(takara); gameScene.removeChild(endMessage); for( i=0; i= HIT_NUM.set) { LOG_clear(); gameScene.removeChild(ball); oni.x = 80; oni.y = 60; r_flag = 2; s_flag = 1; } }; ball.addEventListener(Event.ENTER_FRAME, function(e) { //ボールの色変更 ball.frame = ball.anim[BALL_COLOR.set - 1]; //ボールのサイズ変更 ball.scaleX = 0.50 + (BALL_SIZE.set * 0.25); ball.scaleY = 0.50 + (BALL_SIZE.set * 0.25); //オートスキャンモードから別のモードにした際のボール位置の調整 if( ballItiFlag == 1 && BALL_MODE.set != 2 ){ ballItiFlag = 0; ball.x = 180; } else if ( ballItiFlag == 2 && BALL_MODE.set != 3 ){ ballItiFlag = 0; ball.x = 180; }else if ( flag == 0 && GAME_MODE.set == 1 ){ ball.x = 180; } //ボール移動モード if(GAME_MODE.set == 2){ //オートスキャンモードのボール移動処理 if(BALL_MODE.set == 2){ if(flag === 0){ ballItiFlag = 1; if(rt_flag == 0){ ball.x += (3 * BALL_MOVE.set); if(ball.x >= 360) rt_flag = 1; } if(rt_flag == 1){ ball.x -= (3 * BALL_MOVE.set); if(ball.x <= 0) rt_flag = 0; } } } } //ボールにタッチした状態でボールが画面端に到着するまで上に移動 if (ball.y >= 0 && (flag == 1)) { ball.y -= 10 * BALL_SPEED.set; } //ボールが鬼に当たる if(flag == 1){ //鬼移動モードかつあたり判定が標準のとき、もしくはボール移動モードのとき if( (HIT_AREA.set == 1 && GAME_MODE.set == 1) || GAME_MODE.set == 2){ if (ball.within(oniHitMiddle, hitDistanceMiddle) === true) { game.ballHit(); } else if(ball.within(oniHitLeft, hitDistanceLeft) === true || ball.within(oniHitRight, hitDistanceRight) === true){ //ボールが鬼をかすめたときの処理 LOG_yoko(); game.assets[NONO_SE].clone().play();//ノーノー oni.tick = 0; } } //鬼移動モードかつあたり判定が必中のとき else if(HIT_AREA.set == 2 && GAME_MODE.set == 1){ if (ball.y <= 90) { game.ballHit(); } } //ボールが画面端に到着 if(ball.y <= 0){ LOG_miss(); gameScene.removeChild(ball); flag = 2; } //ボールの呼び出し if(flag == 2){ if(r_flag != 2){ gameScene.addChild(ball); gameScene.addChild(ballTouch); } //ball.x = 180; ball.y = 360; flag = 0; } } }); }; //ゲームの開始 game.start(); }; function rand(num){ return Math.floor(Math.random() * num); }