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