asteroids/sketch.js
2025-12-30 17:18:16 -05:00

276 lines
No EOL
6.2 KiB
JavaScript

let ship;
let lives = [];
let powerup = [];
let pew = [];
let alien = [];
let alienPew =[];
let rock = [];
let dust = [];
let amountOfRocks = 0;
let level = 0;
let points = 0;
let hiscore = 0;
let limiter = 4;
let myFont;
let song;
let songPlayed = false;
let musicToggleText = "Press 'M' to toggle music on and off!";
function preload() {
soundFormats('mp3');
song = loadSound('assets/Dominic DiTaranto - Asteroids.mp3');
myFont = loadFont('assets/Chopsic-K6Dp.ttf');
}
function setup() {
createCanvas(900, 600);
frameRate(60);
textFont(myFont);
textSize(25);
textAlign(CENTER, CENTER);
ship = new Ship();
}
function draw() {
if (ship.dead === true){
startScreen();
} else {
background(22);
alertMusicMuteOption();
displayPoints(points);
displayLives(lives);
ship.main(lives);
//handle power ups!
usePowerUp(); // improve this
for (var i = pew.length - 1; i >= 0; i--){
pew[i].display(pew, i);
for (var j = rock.length - 1; j >= 0; j--) {
if (pew[i]) {
rock[j].getShot(pew[i], j);
}
}
for (var j = alien.length - 1; j >= 0; j--) {
if (pew[i]) {
alien[j].getShot(pew[i], j);
}
}
}
//show the rocks
for (var i = rock.length - 1; i >= 0; i--) {
ship.handleCollision(rock[i]);
rock[i].display();
}
//show the explosion
for (var z = dust.length - 1; z >= 0; z--) {
dust[z].display(ship);
}
//send out alien ship
if (frameCount % 1250 === 0){
alien.push(new Alien());
}
//show alien ship
for (var q = alien.length -1; q >= 0; q--){
alien[q].main(q);
}
//show alien pew
for (var b = alienPew.length - 1; b >= 0; b--) {
alienPew[b].display(alienPew, b, isAlienPew=true);
}
//show power up
for (var u = powerup.length -1; u >= 0; u--){
console.log(powerup[u].type)
if (powerup[u].type !== null) {
powerup[u].display(u);
}
}
startNewLevel();
}
}
function startNewLevel(){
if (rock.length === 0){
ship.pos.x = width/2;
ship.pos.y = height/2;
dust = [];
alien = [];
alienPew = [];
powerup = [];
level++;
clear();
background(22);
fill(255);
textSize(25);
text("Great Job", width/2, height/2 - 50);
text("Get Ready for Level " + level, width/2, height/2);
textSize(15);
text("Press Enter to Begin!", width/2, height/2+50);
if (keyCode === 13){
frameCount = 0;
clear();
background(22);
amountOfRocks += 2;
generateRocks();
}
}
}
//Controls
function keyPressed() {
if (keyCode === 77){
if (song.isLooping()){
song.pause();
} else if (song.isPaused()) {
song.loop();
}
}
if (keyCode === 32){
if (ship.powerup !== null){
if (ship.powerup.type === 'triShot') {
pew.push(new Flame(ship.pos.x, ship.pos.y, p5.Vector.fromAngle(ship.angle + 0.2)));
pew.push(new Flame(ship.pos.x, ship.pos.y, p5.Vector.fromAngle(ship.angle)));
pew.push(new Flame(ship.pos.x, ship.pos.y, p5.Vector.fromAngle(ship.angle - 0.2)));
}
} else {
pew.push(new Flame(ship.pos.x, ship.pos.y, p5.Vector.fromAngle(ship.angle)));
}
}
}
function startScreen() {
lives = [];
level = 0;
if (points > 0){
for (var a = dust.length - 1; a >= 0; a--){
dust.pop();
}
for (var b = alien.length - 1; b >= 0; b--){
alien.pop();
}
for (var c = rock.length - 1; c >= 0; c--){
rock.pop();
}
for (var d = alienPew.length - 1; d >= 0; d--){
alienPew.pop();
}
if (points > hiscore){
hiscore = points;
}
}
points = 0;
background(22);
fill(0,128,128);
textSize(15);
text('HI-SCORE', width/2, 20);
textSize(15);
fill(255);
text(hiscore, width/2, 35);
textSize(45);
text('Asteroids', width/2, height/5);
fill(0,128,128);
textSize(30);
var instructiontext = height/2 - 50;
text('Instructions: ', width/2, instructiontext);
fill(255);
textSize(20);
text('-L and R arrows rotate ship', width/2, instructiontext + 40);
text('-Up arrow engages boosters', width/2, instructiontext + 70);
text('-Space Bar shoots', width/2, instructiontext + 100);
text('-Down arrow activates power up', width/2, instructiontext + 130);
textSize(35);
fill(255);
text('Press Enter to Begin!', width/2, height/1.2);
var name = 'Dominic DiTaranto';
textSize(15);
fill(0,128,128);
text('Game and Music by ', width/2 + 150, height -20);
if (int(dist(mouseX, mouseY, width-120, height-20)) <= 80){
fill(0,128,0);
} else {
fill(128,0,0);
}
text(name, width-120, height -20);
amountOfRocks = 10;
generateRocks();
//show the rocks
for (var x = rock.length - 1; x >= 0; x--) {
rock[x].show();
rock[x].update();
rock[x].edges();
}
if (keyCode === 13){
if (songPlayed === false){
song.loop();
songPlayed = true;
}
for (var i = rock.length - 1; i >= 0; i--) {
rock.splice(i, 1);
}
ship.lives = 4;
// level++;
amountOfRocks = -2;
//setup lives
for (var n = 0; n <= ship.lives - 1; n++) {
lives.push(new Ship());
}
ship.dead = false;
startNewLevel();
}
}