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);
}