超∞満腹Hard(解説)

Hardとありますがそれほど難しくありません。

当初に構想した、ガスの噴射で登って行くというゲームです。

調子よく登りすぎると、いがぐりが急に出てきて当たってしまうのでそこがポイントです。

// Main
console.log("Hello EnchantJS!!");
var assets = [
    "images/back_sky.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/momo.png",
    "images/joe_gass.png",
    "sounds/gass.mp3",
    "images/cf307/oimo (3).png", 
    "images/b_left.png", 
    "images/b_right.png",
    "images/cf307/wareimo (1).png",
    "images/cf307/wareimo1 (2).png",
    "sounds/cf307/jump12.mp3", 
    "images/title_gameclear.png",
    "images/cf307/blueground.png",
    "images/title_gameover.png",
    "images/cf307/momochanzannen.png",
    "sounds/cf307/se_maoudamashii_onepoint31.mp3",
    "sounds/cf307/correct2.mp3",
    "images/cf307/oimokirakira.png",
    "images/cf307/oimokirakira1.png",
    "images/cf307/igaguri.png",
    "images/b_red.png",
    "images/cf307/hi.png",
    "sounds/cf307/matchstick-put-fire1.mp3",
    "sounds/bomb.mp3",
    "images/bomb.png",
    "sounds/cf307/strike1.mp3",
    "images/back_mountain.png",
    "sounds/cf307/kotsudumi1.mp3",
    "sounds/cf307/suck1.mp3", 
    "images/cf307/wareguri.png", 
    "images/cf307/oimohokahoka1.png",
    "images/cf307/igagurikuru.png",
    "images/cf307/oimokirahoka.png",  
];

function gameStart(){// ゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();

    //==========
    // ここから
    //==========

    scene.backgroundColor = "skyblue";
    
    // 
    var sky3 = new ExSprite(320, 241);
    sky3.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky3);
    sky3.tl.moveTo(0, 240, 0);
    sky3.tl.moveBy(0, 240, 250);
    sky3.tl.loop();
    
    var sky1 = new ExSprite(320, 241);
    sky1.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky1);
    sky1.tl.moveTo(0, -240, 0);
    sky1.tl.moveBy(0, 480, 500);
    sky1.tl.loop();
    sky1.tl.skip(500/2);
    var sky2 = new ExSprite(320, 241);
    sky2.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky2);
    sky2.scale(-1, 1);
    sky2.tl.moveTo(0, -240, 0);
    sky2.tl.moveBy(0, 480, 500);
    sky2.tl.loop();
    sky2.tl.skip(0);
   
    // おいもグループ
    var oimoGroup = new Group();
    scene.addChild(oimoGroup);

    // おいもグループ1
    var oimoGroup1 = new Group();
    scene.addChild(oimoGroup1); 

    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480;
    scene.addChild(ground);
    
    // おいもが落ちてくる
    scene.tl.delay(30);
    scene.tl.then(function() {
        var oimo = new ExSprite(32, 32);
        oimo.image = core.assets["images/cf307/oimohokahoka1.png"];
        oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
        oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
        oimoGroup.addChild(oimo);
        oimo.frame = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4];
        oimo.scale(1.2, 1.2);
        oimo.tl.moveBy(0, 480, 150);
        oimo.tl.then(function() {
            oimo.remove();
        });
        // おいもでももちゃんがブッ
        oimo.addCollision(momo);
        oimo.addEventListener(Event.COLLISION, function(e) {
            // おいもが消えて
            oimo.remove();
            var oimo1 = new ExSprite(32, 32);
            oimo1.image = core.assets["images/cf307/oimo (3).png"];
            oimo1.x = oimo.x;
            oimo1.y = oimo.y;
            scene.addChild(oimo1);      
            oimo1.scale(1.2, 1.2);
            oimo1.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
            sound.play();               
            oimo1.tl.then(function(){
                oimo1.remove();
                // 進む
                momo.moveBy(0, -64, 5);
                if(momo.y < -32){
                    momo.y = 200;
                }             
                var sound = core.assets["sounds/gass.mp3"].clone();
                sound.play();
                // ももちゃんブッ 
                var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/joe_gass.png"];
                bomb.x = momo.x;
                bomb.y = momo.y + 32;
                scene.addChild(bomb);        
                bomb.frame = [0, 1, 2, 3, 4, null];                  
            });         
            // 満腹度アップ
            score += 10;
            // 300点になると
            if(290 < score){
                // いがぐり消える
                asteroidGroup.remove();
                // 中央に移動
                bigoimo.tl.clear();
                bigoimo.tl.moveTo(160 - 40, 34, 10);
                bigoimo.tl.then(function(){                
                    bigoimo.tl.clear(); //これ必要
                    // おいもシャワー
                    bigoimo.tl.delay(2);
                    bigoimo.tl.then(function(){
                        var oimo = new ExSprite(32, 32);
                        oimo.image = core.assets["images/cf307/oimo (3).png"];
                        oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
                        oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
                        oimoGroup1.addChild(oimo);
                        oimo.scale(1.2, 1.2);
                        var x3 = getRandom(-100, 420);
                        oimo.tl.moveTo(x3, 480, 120/2);
                        oimo.tl.then(function() {
                            oimo.remove();
                        });
                        // ももちゃんおいもシャワーを浴びる
                        oimo.addCollision(momo);
                        oimo.addEventListener(Event.COLLISION, function(e) {
                            // おいもが消えて
                            oimo.tl.clear();
                            oimo.tl.moveBy(0, -5, 0);
                            oimo.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
                            oimo.tl.delay(0);
                            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
                            sound.play();
                            oimo.tl.then(function(){
                                oimo.remove();
                                // ももちゃんブッ 
                                var bomb = new ExSprite(32, 32);
                                bomb.image = core.assets["images/joe_gass.png"];
                                bomb.x = momo.x;
                                bomb.y = momo.y + 32*3;
                                scene.addChild(bomb);
                                bomb.scale(3, 3);       
                                bomb.frame = [0, 1, 2, 3, 4, null]; 
                                var sound = core.assets["sounds/gass.mp3"].clone();
                                sound.play();
                            });                                
                            // 満腹度アップ
                            score += 300;
                            // ももちゃん進む
                            //momo.moveBy(-momo.x / 10 + 160 /10 - 40 /10, -10, 5);
                            if(momo.y < -32){
                                momo.y = 200;                           
                            }                                             
                        });
                    });
                }); 
                bigoimo.tl.loop();
                // ゲームクリア       
                var gameclear = new ExSprite(147, 48);
                gameclear.image = core.assets['images/title_gameclear.png'];
                gameclear.x = 320 / 2 - gameclear.width/2;
                gameclear.y = 480 / 2 - gameclear.height/2;
                scene.addChild(gameclear);
                // 大きく
                gameclear.scale(0.5, 0.5);
                gameclear.tl.scaleTo(2, 2, 24);
                gameclear.tl.then(function() {
                    // サウンド
                    var sound = core.assets['sounds/cf307/correct2.mp3'].clone();
                    sound.play();
                    //core.stop();
                });
                // おいもグループを消す
                oimoGroup.remove();
                // ももちゃん大きくなりながら移動
                momo.tl.clear();                             
                momo.tl.then(function(){                     
                    momo.tl.moveTo(320 / 2 - 16, 480 / 2 - 16 + 96, 16).and().scaleTo(3, 3, 16);
                });
             }        
        });
    });
    scene.tl.loop();          
          
    // いがぐり落ちてくる
    ground.tl.delay(20);
    ground.tl.then(function() {
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igagurikuru.png"];
        asteroid.x = getRandom(0, 320 - 32);
        asteroid.y = 0;
        asteroidGroup.addChild(asteroid);
        asteroid.frame = [0, 1, 2 ,3];
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(0, 480, 50);
        asteroid.tl.then(function() {
            asteroid.remove();
        });
        //b-むと衝突したとき
        asteroid.addCollision(beamGroup);
        asteroid.addEventListener(Event.COLLISION, function(e) {
            asteroid.remove();             
            var bomb = new ExSprite(32, 32);
            bomb.image = core.assets["images/bomb.png"];
            bomb.x = asteroid.x;
            bomb.y = asteroid.y;
            scene.addChild(bomb);
            bomb.scale(1, 1);
            bomb.frame = [0, 1, 2, 3, 4, null];       
            var sound = core.assets["sounds/cf307/kotsudumi1.mp3"].clone();
            sound.play();
            //いがぐり割れる
            bomb.tl.then(function(){  
                var wareguri = new ExSprite(32, 32);
                wareguri.image = core.assets["images/cf307/wareguri.png"];
                wareguri.x = asteroid.x;
                wareguri.y = asteroid.y;
                scene.addChild(wareguri);
                wareguri.scale(1.3, 1.3);
                // 消える
                wareguri.tl.delay(3);
                wareguri.tl.then(function(){
                    wareguri.remove();
                });
            });            
        });                   
    });     
    ground.tl.loop();
    // 巨大おいも
    var bigoimo = new ExSprite(80, 80);
    bigoimo.image = core.assets["images/cf307/oimokirahoka.png"];
    var x = getRandom(0, 320 - 32*2.5);
    bigoimo.x = x;
    bigoimo.y = - 32 * 2.5;
    scene.addChild(bigoimo);
    bigoimo.frame = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4];
    //bigoimo.tl.delay(30);
    bigoimo.tl.moveBy(0, 80 + 34, 30);
    bigoimo.tl.then(function() {
        var x1 = getRandom(240 - 80, 320 - 40);
        var x2 = getRandom(-40, 240); 
        bigoimo.tl.moveTo(x1, 34, 30);
        bigoimo.tl.moveTo(x2, 34, 30);        
        bigoimo.tl.loop();
    });
    //ビームグループ
    var beamGroup = new Group();
    scene.addChild(beamGroup);
    // いがぐりグループ
    var asteroidGroup = new Group();
    scene.addChild(asteroidGroup); 
    // 左へ移動するボタン
    var button_left = new ExSprite(62, 55);
    button_left.image = core.assets["images/b_left.png"];
    button_left.x = 320/2 - 62 - 31;
    button_left.y = 480 - 55;
    scene.addChild(button_left);
    // 左ボタンタップ開始
    button_left.addEventListener(Event.TOUCH_START, function(){
        button_left.frame = 1;
        momo.x -= 15;
        if(momo.x < - 16){
            momo.x = 304;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 左ボタンタップ終了
    button_left.addEventListener(Event.TOUCH_END, function(){
        button_left.frame = 0;
    });
    // 右へ移動するボタン
    var button_right = new ExSprite(62, 55);
    button_right.image = core.assets["images/b_right.png"];
    button_right.x = 320/2 + 31;
    button_right.y = 480 - 55;
    scene.addChild(button_right);
    // 右ボタンタップ開始
    button_right.addEventListener(Event.TOUCH_START, function(){
        button_right.frame = 1;
        momo.x += 15;
        if(320 - 16 < momo.x){
            momo.x = - 16;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 右ボタンタップ終了
    button_right.addEventListener(Event.TOUCH_END, function(){
        button_right.frame = 0;
    });
    // 火を発射するボタン
    var button_fire = new ExSprite(62, 55);
    button_fire.image = core.assets['images/b_red.png'];
    button_fire.x = 320 / 2 - button_fire.width / 2;
    button_fire.y = 480 - 55;
    scene.addChild(button_fire);
    button_fire.addEventListener(Event.TOUCH_START, function(){
        button_fire.frame = 1;
    });
    button_fire.addEventListener(Event.TOUCH_END, function(){
        button_fire.frame = 0;
    });
    // 火を発射
    button_fire.addEventListener(Event.TOUCH_START, function(){
        var beam = new ExSprite(32, 32);
        beam.image = core.assets['images/cf307/hi.png'];
        beam.x = momo.x + momo.width / 2 - beam.width / 2;
        beam.y = momo.y;
        beamGroup.addChild(beam);
        var sound = core.assets["sounds/cf307/matchstick-put-fire1.mp3"].clone();
        sound.play();
        // 上に向かって移動させよう
        beam.tl.moveBy(0, -480, 20);
        beam.tl.then(function(){
            beam.remove();
        });
    });  
   
    // ももちゃん
    var momo = new ExSprite(32, 32);
    momo.image = core.assets["images/cf307/momo.png"];
    momo.x = 320 /2 - 16;
    momo.y = 200;
    scene.addChild(momo);
    momo.frame = [0, 0, 1, 1, 2, 2];
    // ももちゃんを動かす
    momo.tl.moveBy(0, 480, 350);
    momo.tl.moveBy(0, 480, 350);
    momo.tl.loop();
    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'gray';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = '満腹度(300で(^^)) : ' + score;
    });       
    // ももちゃん地面に衝突でゲームオーバー
    ground.addCollision(momo);
    ground.addEventListener(Event.COLLISION,function(e){
        // 残念ももちゃん
        momo.remove();
        var momoz = new ExSprite(32, 32);
        momoz.image = core.assets['images/cf307/momochanzannen.png'];
        momoz.x = momo.x;
        momoz.y = momo.y;
        scene.addChild(momoz);
        momoz.tl.then(function(){         
            // ゲームオーバーを表示
            var gameover = new ExSprite(147, 48);
            gameover.image = core.assets['images/title_gameover.png'];
            gameover.x = 320 / 2 - gameover.width/2;
            gameover.y = 480 / 2 - gameover.height/2;
            scene.addChild(gameover);
            // 大きく
            gameover.scale(0.5, 0.5);
            gameover.tl.scaleTo(2.3, 2.3, 10);
            gameover.tl.then(function() {
                core.stop();
            });
        });
        var sound = core.assets["sounds/cf307/se_maoudamashii_onepoint31.mp3"].clone();
        sound.play();      
    });
  
    // ももちゃんいがぐりに衝突でゲームオーバー
    momo.addCollision(asteroidGroup);
    momo.addEventListener(Event.COLLISION, function(e) {
        momo.remove();
        var momoz = new ExSprite(32, 32);
        momoz.image = core.assets['images/cf307/momochanzannen.png'];
        momoz.x = momo.x;
        momoz.y = momo.y;
        scene.addChild(momoz);
        // いがぐり跳ねる
        asteroidGroup.remove();
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igaguri.png"];
        asteroid.x = momo.x;
        asteroid.y = momo.y - 32;
        scene.addChild(asteroid);
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(20, -30, 3);
        asteroid.tl.moveBy(20, 100, 5);
        // ポコッ
        var sound = core.assets["sounds/cf307/strike1.mp3"].clone();
        sound.play();            
        asteroid.tl.then(function()
            var sound = core.assets["sounds/cf307/se_maoudamashii_onepoint31.mp3"].clone();
            sound.play();
            // ゲームオーバーを表示
            var gameover = new ExSprite(147, 48);
            gameover.image = core.assets['images/title_gameover.png'];
            gameover.x = 320 / 2 - gameover.width/2;
            gameover.y = 480 / 2 - gameover.height/2;
            scene.addChild(gameover);
            // 大きく
            gameover.scale(0.5, 0.5);
            gameover.tl.scaleTo(2, 2, 10);
            gameover.tl.then(function() {
                core.stop();
            });
        });     
    });  
 
    //==========
    // ここまで
    //==========
}

function getRandom(start, end) {
    return start + Math.floor( Math.random() * (end - start + 1));
}
function titleStart(){// タイトル画面
    var scene = gameManager.createTitleScene();
    core.replaceScene(scene); core.pause();
    scene.on(enchant.Event.TOUCH_START, function(){gameStart();});
}
//==========
// EnchantJS
enchant();
var gameManager;
var core;
var scene;
window.onload = function(){
    gameManager = new common.GameManager();
    core = gameManager.createCore(320, 480);
    core.preload(assets);
    core.onload = function(){titleStart();};
    core.start();
}