|
<!doctype html> |
|
<!-- FlappyBirdJS by Sanay N. & Topher P.--> |
|
<!-- https://github.com/topherPedersen/FlappyBirdJS --> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8" /> |
|
<title>Making your first Phaser 3 Game - Part 2</title> |
|
<script src="//cdn.jsdelivr.net/npm/phaser@3.11.0/dist/phaser.js"></script> |
|
<style type="text/css"> |
|
body { |
|
margin: 0; |
|
} |
|
#title-div { |
|
width: 600px; |
|
overflow: hidden; |
|
text-align: center; |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
|
|
<div id="title-div"> |
|
<p><strong>FlappyBirdJS by Sanay N., a Rockstar Coding Student @ theCoderSchool</strong></p> |
|
</div> |
|
|
|
<script type="text/javascript"> |
|
/** |
|
** FlappyBirdJS by Sanay (a Rockstar Coding Student @ theCoderSchool) |
|
** with a little help from his instructor topherPedersen |
|
**/ |
|
|
|
// REFERENCE (Official Phaser Tutorial Source Code): https://github.com/topherPedersen/OfficialPhaser3Tutorial |
|
|
|
var config = { |
|
type: Phaser.AUTO, |
|
width: 600, |
|
height: 400, |
|
physics: { |
|
default: 'arcade', |
|
arcade: { |
|
gravity: {y: 300}, |
|
debug: false |
|
} |
|
}, |
|
scene: { |
|
preload: preload, |
|
create: create, |
|
update: update |
|
} |
|
}; |
|
|
|
var game = new Phaser.Game(config); |
|
|
|
// Game Variables |
|
var bird; |
|
var cursors; |
|
var bottom_pipe = []; |
|
var top_pipe = []; |
|
var gameOver = false; |
|
var endGame; |
|
var distance; |
|
initialYAxisOffset = []; |
|
|
|
|
|
function preload () { |
|
this.load.image('sky', 'assets/sky.png'); |
|
this.load.image('bird', 'assets/bird.png'); |
|
this.load.image('pipe', 'assets/pipe.png'); |
|
} |
|
|
|
function create () { |
|
// Add Sky |
|
this.add.image(400, 300, 'sky'); |
|
|
|
// Add Flappy Bird |
|
bird = this.physics.add.sprite(20, 40, 'bird'); |
|
// Add Collision Detection |
|
bird.setBounce(0.2); |
|
bird.setCollideWorldBounds(true); |
|
bird.body.setGravityY(300); |
|
|
|
// TODO: Sanay, use a for-loop to create three pipes. |
|
// Reference the "Add Flappy Bird" for how to add a sprite |
|
var xPos = 0; |
|
|
|
var firstRandomNumber; |
|
for (var i = 0; i < 3; i++) { |
|
firstRandomNumber = (Math.floor(Math.random() * 10)) + 1; |
|
if (firstRandomNumber < 6) { |
|
// add random positive number to pipe's new y position |
|
initialYAxisOffset[i] = (Math.floor(Math.random() * 10)) * 10; |
|
} else { |
|
// add random negative number to pipe's new y position |
|
initialYAxisOffset[i] = (Math.floor(Math.random() * 10)) * (-10); |
|
} |
|
} |
|
|
|
var offset; |
|
|
|
// Create Top Pipes |
|
for (var i = 0; i < 3; i++) { |
|
offset = initialYAxisOffset[i]; |
|
top_pipe[i] = this.physics.add.sprite(550 + xPos, -50 + offset, 'pipe'); |
|
top_pipe[i].body.setAllowGravity(false); |
|
top_pipe[i].body.setVelocityX(-150); |
|
top_pipe[i].inableBody = true; |
|
top_pipe[i].immovable = true; |
|
top_pipe[i].flipY = true; |
|
// Adjust Physics for Pipe(s) |
|
// pipe[i].setBounce(0.2); |
|
// pipe[i].setCollideWorldBounds(true); |
|
// pipe[i].body.setGravityY(0); |
|
// this.physics.add.collider(pipe[i]); |
|
xPos += 400; |
|
} |
|
|
|
// Create Bottom Pipes |
|
xPos = 0; // reset xPos back to zero |
|
for (var i = 0; i < 3; i++) { |
|
offset = initialYAxisOffset[i]; |
|
bottom_pipe[i] = this.physics.add.sprite(550 + xPos, 450 + offset, 'pipe'); |
|
bottom_pipe[i].body.setAllowGravity(false); |
|
bottom_pipe[i].body.setVelocityX(-150); |
|
bottom_pipe[i].inableBody = true; |
|
bottom_pipe[i].immovable = true; |
|
// bottom_pipe[i].flipY = true; |
|
// Adjust Physics for Pipe(s) |
|
// pipe[i].setBounce(0.2); |
|
// pipe[i].setCollideWorldBounds(true); |
|
// pipe[i].body.setGravityY(0); |
|
// this.physics.add.collider(pipe[i]); |
|
xPos += 400; |
|
} |
|
|
|
|
|
onScreenText = this.add.text(212, 185, '', {fontSize: '32px', fill: '#00000' }); |
|
|
|
cursors = this.input.keyboard.createCursorKeys(); |
|
|
|
// Add Collision Detection Between Bird & Pipe(s) |
|
this.physics.add.collider(bird, bottom_pipe, collisionCallback); |
|
this.physics.add.collider(bird, top_pipe, collisionCallback); |
|
|
|
} |
|
var xPos = 0; |
|
// Main Game Loop |
|
function update () { |
|
if (gameOver) { |
|
bird.body.setGravityY(0); |
|
for (var i = 0; i < 3; i++) { |
|
bottom_pipe[i].body.setAllowGravity(false); |
|
bottom_pipe[i].body.setVelocityX(0); |
|
top_pipe[i].body.setAllowGravity(false); |
|
top_pipe[i].body.setVelocityX(0); |
|
} |
|
return; |
|
} else { |
|
if (cursors.space.isDown) { |
|
bird.setVelocityY(-250); |
|
console.log('Space Bar is pressed, I am amazing') |
|
} |
|
// TODO: Sanay, write some code here in the main game loop |
|
// to check to see if any of the pipes have gone off screen. |
|
// -300 |
|
for (var i = 0; i < 3; i++) { |
|
var firstRandomNumber = (Math.floor(Math.random() * 10)) + 1; |
|
if (firstRandomNumber < 6) { |
|
// add random positive number to pipe's new y position |
|
var yAxisOffset = (Math.floor(Math.random() * 10)) * 10; |
|
} else { |
|
// add random negative number to pipe's new y position |
|
var yAxisOffset = (Math.floor(Math.random() * 10)) * (-10); |
|
} |
|
if (bottom_pipe[i].body.x < -400) { |
|
bottom_pipe[i].x = 850; |
|
bottom_pipe[i].y = 450 + yAxisOffset; |
|
} |
|
if (top_pipe[i].body.x < -400) { |
|
top_pipe[i].x = 850; |
|
top_pipe[i].y = -50 + yAxisOffset; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
function collisionCallback() { |
|
gameOver = true; |
|
// endGame.setText('Game Over'); |
|
bird.body.enable = false; |
|
top_pipe[0].body.enable = false; |
|
top_pipe[1].body.enable = false; |
|
top_pipe[2].body.enable = false; |
|
bottom_pipe[0].body.enable = false; |
|
bottom_pipe[1].body.enable = false; |
|
bottom_pipe[2].body.enable = false; |
|
onScreenText.setText('GAME OVER'); |
|
} |
|
</script> |
|
|
|
</body> |
|
</html> |