let width = window.innerWidth * window.devicePixelRatio; let height = window.innerHeight * window.devicePixelRatio; let config = { title: "Happy 2021!", url: "http://shikiryu.ovh/new_year_2021", type: Phaser.AUTO, width: width, height: height, background: 0xffffff, scene: { preload: preload, create: create, update: update } }; let game = new Phaser.Game(config); let that; let shoot; let win; let graphics; let rect; let viruses = []; let target; let maxEnemies = 20; let enemiesCount = maxEnemies; let enemiesText; let colors = ['bleu', 'rouge', 'vert']; function preload() { that = this; this.scale.scaleMode = Phaser.Scale.ScaleManager.SHOW_ALL; this.scale.pageAlignHorizontally = true; this.scale.pageAlignVertically = true; this.load.audio('shoot', [ 'sound/shoot.ogg', 'sound/shoot.mp3' ]); this.load.audio('win', [ 'sound/win.ogg', 'sound/win.mp3' ]); this.load.image('target', 'img/target.png'); this.load.image('bleu', 'img/virus-bleu.png'); this.load.image('rouge', 'img/virus-rouge.png'); this.load.image('vert', 'img/virus-vert.png'); } function killVirus(player, virus) { virus.visible = false; --enemiesCount; enemiesText.setText('virus restant : '+enemiesCount); if (enemiesCount === 0) { enemiesText.visible = false; that.add.text(width/2-200, height/2-50, 'Bonne annnée 2021 !', { fontSize: '32px', fill: '#000' }); that.add.text(width/2-50, height/2, 'Si possible, sans virus', { fontSize: '14px', fill: '#000' }); win.play(); } } function getRandomInt(max) { return Math.floor(Math.random() * Math.floor(max)); } function create() { shoot = this.sound.add('shoot'); win = this.sound.add('win'); graphics = this.add.graphics(); graphics.fillGradientStyle(0x3d6d7d, 0x3d6d7d, 0x9addf3, 0x9addf3, 1); graphics.fillRect(0, 0, width, height); enemiesText = this.add.text(40, 40, 'virus restant : '+maxEnemies, { fontSize: '32px', fill: '#000' }); viruses = new Array(maxEnemies).fill(null).map( function() { let color = colors[Math.floor(Math.random() * colors.length)]; return that.add.image(getRandomInt(width), getRandomInt(height), color); } ); rect = Phaser.Geom.Rectangle.Clone(this.cameras.main); target = this.add.image(400, 300, 'target'); this.input.on('pointermove', function (pointer) { target.x = pointer.x; target.y = pointer.y; }); this.input.on('pointerdown', function (pointer) { target.x = pointer.x; target.y = pointer.y; let pointerX = pointer.x; let pointerY = pointer.y; shoot.play(); for (let i = 0; i < maxEnemies; i++) { let virus = viruses[i]; let virusX = virus.x; let virusY = virus.y; if ( virus.visible && pointerX >= virusX - 94 && pointerX <= virusX + 94 && pointerY >= virusY - 94 && pointerY <= virusY + 94 ) { killVirus(null, virus); break; } } }, this); } function update() { viruses.forEach(function (virus, i) { let direction = getRandomInt(4); let x = (1 + Math.random() * i); let y = (1 + Math.random() * i); switch (direction) { case 1: virus.x += x; virus.y += y; break; case 2: virus.x += x; virus.y -= y; break; case 3: virus.x -= x; virus.y += y; break; case 4: virus.x -= x; virus.y -= y; break; } }); Phaser.Actions.WrapInRectangle(viruses, rect, 72); }