! Сегодня

Главная » Web и Технологии » Санта в бегах! Простая игра на JS для сайта

Санта в бегах! Простая игра на JS для сайта

Танцуй так, как будто на тебя никто не смотрит. Пой, как будто тебя никто не слышит. Люби так, как будто тебя никогда не предавали, и живи так, как будто земля — это рай.

18-декабря-2023, 22:15   3   0

Санта в бегах! Простая игра на JS для сайта

Санта в бегах! — это забавная игра на jаvascript для сайта перед новогодними праздниками, в которой используется игровая платформа phaser.js HTML5. В этой игре не так уж и много правил: Санта бежит бесконечно или, по крайней мере, пока не упадет. Эта сниппет дает вам прекрасную возможность понять, как написать простую игру на jаvascript.Обязательно разместите на сайте, залипательная штука!

SCSS

html, body {
  height: 100%;
}
body {
  overflow-x: hidden;
  background: black;
}


JS

/* 
SANTA ON THE RUN
Uses phaser.js https://phaser.io
♥
*/

// FULL mode is best for phones https://codepen.io/natewiley/full/gbwWMX

(function(){

var width = window.innerWidth;
var height = window.innerHeight > 480 ? 480 : window.innerHeight;
var gameScore = 0;
var highScore = 0;

var SantaGame = {

    init: function(){

        this.game = new Phaser.Game(width, height, Phaser.CANVAS, '');
        this.game.state.add("load", this.load);
        this.game.state.add("play", this.play);
        this.game.state.add("title", this.title);
        this.game.state.add("gameOver", this.gameOver);
        this.game.state.add("instructions", this.instructions);
        this.game.state.start("load");

    },

    load: {
        preload: function(){
            this.game.load.audio('drivin-home', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/drivin-home-low.mp3');
            this.game.load.audio('ho-ho-ho', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/ho-ho-ho.mp3');
            this.game.load.audio('hop', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/jump-sound.mp3');
            this.game.load.image('platform', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/ground.png');
            this.game.load.spritesheet('santa-running', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/santa-running.png', 37, 52);
            this.game.load.image('snow-bg', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/snow-bg.png');
            this.game.load.image('snowflake', 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/snowflake.png');
            this.game.load.image("logo", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/game-logo.png");
            this.game.load.image("instructions", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/instructions.png");
            this.game.load.image("game-over", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/game-over.png");
            this.game.load.image("startbtn", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/start-btn.png");
            this.game.load.image("playbtn", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/play-btn.png");
            this.game.load.image("restartBtn", "https://s3-us-west-2.amazonaws.com/s.cdpn.io/74196/restart-btn.png");
        },
        create: function(){
            this.game.state.start("title");
        }
    },


    // title screen

    title: {
        
        create: function(){
            this.bg = this.game.add.tileSprite(0, 0, width, height, 'snow-bg');
            this.logo = this.game.add.sprite(this.game.world.width/2 - 158, 20, 'logo');
            this.logo.alpha = 0;
            this.game.add.tween(this.logo).to({alpha: 1}, 1000, Phaser.Easing.Linear.None, true, 0);
            this.startBtn = this.game.add.button(this.game.world.width/2 - 159, this.game.world.height - 120, 'startbtn', this.startClicked);
            this.startBtn.alpha = 0;
            this.game.add.tween(this.startBtn).to({alpha: 1}, 1000, Phaser.Easing.Linear.None, true, 1000);
        },

        startClicked: function(){
            this.game.state.start("instructions");
        },

    },

// instructions screen
    instructions: {
        
        create: function(){
            this.bg = this.game.add.tileSprite(0, 0, width, height, 'snow-bg');
            this.instructions = this.game.add.sprite(this.game.world.width/2 - 292, 30, 'instructions');
            this.instructions.alpha = 0;
            this.game.add.tween(this.instructions).to({alpha: 1}, 800, Phaser.Easing.Linear.None, true, 0);
            this.playBtn = this.game.add.button(this.game.world.width/2 - 159, this.game.world.height - 120, 'playbtn', this.playClicked);
            this.playBtn.alpha = 0;
            this.game.add.tween(this.playBtn).to({alpha: 1}, 800, Phaser.Easing.Linear.None, true, 800);
        },

        playClicked: function(){
            this.game.state.start("play");
        },
    },

    // playing
    play: {

            create: function(){
          highScore = gameScore > highScore ? Math.floor(gameScore) : highScore;
                gameScore = 0; 
                this.currentFrame = 0;
                this.particleInterval = 2 * 60;
                this.gameSpeed = 580;
                this.isGameOver = false;
                this.game.physics.startSystem(Phaser.Physics.ARCADE);

                this.music = this.game.add.audio("drivin-home");
                this.music.loop = true;
                this.music.play();

                this.bg = this.game.add.tileSprite(0, 0, width, height, 'snow-bg');
                this.bg.fixedToCamera = true;
                this.bg.autoScroll(-this.gameSpeed / 6, 0);

                this.emitter = this.game.add.emitter(this.game.world.centerX, -32, 50);

                this.platforms = this.game.add.group();
                this.platforms.enableBody = true;
                this.platforms.createMultiple(5, 'platform', 0, false);
                this.platforms.setAll('anchor.x', 0.5);
                this.platforms.setAll('anchor.y', 0.5);

                var plat;

                for(var i=0; i<5; i++){
                    plat = this.platforms.getFirstExists(false);
                    plat.reset(i * 192, this.game.world.height - 24);
                    plat.width = 192;
                    plat.height = 24;
                    this.game.physics.arcade.enable(plat);
                    plat.body.immovable = true;
                    plat.body.bounce.set(0);
                }

                this.lastPlatform = plat;

                this.santa = this.game.add.sprite(100, this.game.world.height - 200, 'santa-running');
                this.santa.animations.add("run");
                this.santa.animations.play('run', 20, true);

                this.game.physics.arcade.enable(this.santa);

                this.santa.body.gravity.y = 1500;
                this.santa.body.collideWorldBounds = true;
                
              this.emitter.makeParticles('snowflake');
              this.emitter.maxParticleScale = .02;
              this.emitter.minParticleScale = .001;
              this.emitter.setYSpeed(100, 200);
              this.emitter.gravity = 0;
              this.emitter.width = this.game.world.width * 1.5;
              this.emitter.minRotation = 0;
              this.emitter.maxRotation = 40;

                this.game.camera.follow(this.santa);
                this.cursors = this.game.input.keyboard.createCursorKeys();
                
                this.spacebar = this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
                this.emitter.start(false, 0, 0);
                this.score = this.game.add.text(20, 20, '', { font: "24px Arial", fill: "white", fontWeight: "bold" });
        
          if(highScore > 0){
            this.highScore = this.game.add.text(20, 45, 'Best: ' + highScore, { font: "18px Arial", fill: "white" });
          }
                    
            },

            update: function(){
                var that = this;
                if(!this.isGameOver){
                    gameScore += .5;
            this.gameSpeed += .03;
                    this.score.text = 'Score: ' + Math.floor(gameScore);
             
                    this.currentFrame++;
                    var moveAmount = this.gameSpeed / 100;
                    this.game.physics.arcade.collide(this.santa, this.platforms);

                    if(this.santa.body.bottom >= this.game.world.bounds.bottom){
                        this.isGameOver = true;
                        this.endGame();
                        
                    }

                    if(this.cursors.up.isDown && this.santa.body.touching.down || this.spacebar.isDown && this.santa.body.touching.down || this.game.input.mousePointer.isDown && this.santa.body.touching.down || this.game.input.pointer1.isDown && this.santa.body.touching.down){
                        this.jumpSound = this.game.add.audio("hop");
                        this.jumpSound.play();
                        this.santa.body.velocity.y = -500;
                    }


                    if(this.particleInterval === this.currentFrame){
                        this.emitter.makeParticles('snowflake');
                        this.currentFrame = 0;
                    }

                    this.platforms.children.forEach(function(platform) {
                      platform.body.position.x -= moveAmount;
                      if(platform.body.right <= 0){
                          platform.kill();
                          var plat = that.platforms.getFirstExists(false);
                          plat.reset(that.lastPlatform.body.right + 192, that.game.world.height - (Math.floor(Math.random() * 50)) - 24);
                          plat.body.immovable = true;
                          that.lastPlatform = plat;
                      }
                    });

                }
                
            },


            endGame: function(){
                this.music.stop();
                this.music = this.game.add.audio("ho-ho-ho");
                this.music.play();
                this.game.state.start("gameOver");
            }


    },
    gameOver: {

        create: function(){
            this.bg = this.game.add.tileSprite(0, 0, width, height, 'snow-bg');
            this.msg = this.game.add.sprite(this.game.world.width/2 - 280.5, 50, 'game-over');
            this.msg.alpha = 0;
            this.game.add.tween(this.msg).to({alpha: 1}, 600, Phaser.Easing.Linear.None, true, 0);

            this.score = this.game.add.text(this.game.world.width/2 - 100, 200, 'Score: ' + Math.floor(gameScore), { font: "42px Arial", fill: "white" });
            this.score.alpha = 0;
            this.game.add.tween(this.score).to({alpha: 1}, 600, Phaser.Easing.Linear.None, true, 600);

            this.restartBtn = this.game.add.button(this.game.world.width/2 - 183.5, 280, 'restartBtn', this.restartClicked);
            this.restartBtn.alpha = 0;
            this.game.add.tween(this.restartBtn).to({alpha: 1}, 600, Phaser.Easing.Linear.None, true, 1000);
        },

        restartClicked: function(){
            this.game.state.start("play");
        },
    }

};

SantaGame.init();
  
})();


Не забываем подключить библиотеку

https://cdnjs.cloudflare.com/ajax/libs/phaser/2.1.3/phaser.min.js



Поделиться

Tags

  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Что приходит после зимы ?

Редакторы выбирают

Web и Технологии