Add files via upload

pull/1903/head
Brian Kumanchik 2022-05-28 09:53:00 -08:00 committed by GitHub
parent a5ed2385d4
commit c3055367e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 262 additions and 107 deletions

View File

@ -1,10 +1,10 @@
# App Name # App Name
Invader - I'm creating this demo to learn JavaScript with the Bangle.js 2 Invader
## Usage ## Usage
For fun! For fun! - I'm creating this demo to learn JavaScript with the Bangle.js 2
## Features ## Features
@ -12,7 +12,7 @@ Shoot the Alien, you have three lives
## Controls ## Controls
Touch the lower Left or Right hand sides of the screen to move turret left or right, tap upper Right hand part of screen to fire Touch the lower Left or Right hand sides of the screen to move turret left or right, tap upper Right hand part of screen to fire, tap upper Left hand part of screen to restart
## Requests ## Requests

View File

@ -7,7 +7,9 @@
// to do: // to do:
// add buzz // random invader restart x
// stop auto fire
// - variables ----------------------------------------- // - variables -----------------------------------------
@ -19,21 +21,29 @@ var inv_frame = 1; // invader start animation frame
var ix_speed = 6; // march speed var ix_speed = 6; // march speed
var i_dir = 1; // 1 = right, 0 = left var i_dir = 1; // 1 = right, 0 = left
var been_hit = false; // invader hit state var been_hit = false; // invader hit state
//// shoot variables // - shoot variables
var inv_shot_x = -32; var inv_shot_x = -32;
var inv_shot_y = -32; var inv_shot_y = -32;
var inv_fire_pause = 30; var inv_fire_pause = 30;
var inv_fired = false; // invader fired state var inv_fired = false; // invader fired state
//// explode variables // - explode variables
var been_hit = false; // invader hit state var been_hit = false; // invader hit state
var bx = -32; // blast x var bx = -32; // blast x
var by = -32; // blast y var by = -32; // blast y
var blast_delay = 60; // invader blast delay - pause after explosion var blast_delay = 15; // invader blast delay - pause after explosion
var boom_play = false; var boom_play = false;
// turret variables // turret variables
var tur_x = 77; var tur_x = 77;
var tur_y = 148; var tur_y = 148;
var shot_fired = false; // turret fired state
var sx = -20; // turret shot starting x - off screen
var sy = -20; // turret shot starting y - off screen
var turret_been_hit = false;
var turret_blast_delay = 21; // keep blast active on screen for 60 frames
var turret_exp_frame = 1; // turret explode start animation frame
var turret_anim_delay = 3; // turret explode animation delay
var explosion_play = false;
// misc variables // misc variables
var score = 0; var score = 0;
@ -41,13 +51,14 @@ var lives = 3;
var game_over = false; var game_over = false;
// input(screen controller) variables // input(screen controller) variables
var BTNL, BTNR, BTNF; var BTNL, BTNR, BTNF, BTNS; // button - left, right, fire, start
var tap = {}; var tap = {};
// use tapping on screen for left and right // use tapping on screen for left and right
Bangle.on('drag',e=>tap=e); Bangle.on('drag',e=>tap=e);
BTNL = { read : _=>tap.b && tap.x < 88 && tap.y > 88}; BTNL = { read : _=>tap.b && tap.x < 88 && tap.y > 88};
BTNR = { read : _=>tap.b && tap.x > 88 && tap.y > 88}; BTNR = { read : _=>tap.b && tap.x > 88 && tap.y > 88};
BTNF = { read : _=>tap.b && tap.x > 88 && tap.y < 88}; BTNF = { read : _=>tap.b && tap.x > 88 && tap.y < 88};
BTNS = { read : _=>tap.b && tap.x < 88 && tap.y < 88};
// - sprites ------------------------------------------- // - sprites -------------------------------------------
@ -105,7 +116,6 @@ function move_anim_inv() {
} }
// function to make invader fire // function to make invader fire
function invader_fire() { function invader_fire() {
inv_fire_pause -= 1; inv_fire_pause -= 1;
@ -122,10 +132,65 @@ function invader_fire() {
} }
// function to make turret explode (when hit) then start back in center
function turret_hit() {
if (turret_been_hit) {
if (!(explosion_play)) {
Bangle.buzz();
//Bangle.beep();
}
explosion_play = true;
turret_anim_delay -= 1;
turret_blast_delay -= 1;
if (turret_anim_delay < 0) {
turret_exp_frame += 1;
if (turret_exp_frame > 2) {
turret_exp_frame = 1;
}
turret_anim_delay = 3;
}
if (turret_blast_delay < 0) {
turret_blast_delay = 21;
turret_been_hit = false;
explosion_play = false;
tur_x = 77; // reset turret x
tur_y = 148; // reset turret y
}
}
}
// function to make invader explode (when hit) then randomly start somewhere else
function invader_hit() {
if (been_hit) {
if (!(boom_play)) {
Bangle.buzz();
//Bangle.beep();
}
inv_shot_x = -32; // hide shot
inv_shot_y = -32; // hide shot
inv_fire_pause = 30; // and reset pause
boom_play = true;
blast_delay -= 1;
if (blast_delay < 0) {
blast_delay = 15;
boom_play = false;
been_hit = false;
bx = -32; // move boom off screen (following invader)
by = -32;
//inv_x = rand() % (464 - 16) + 4; // move invader to random x position
inv_x = 77; // move invader back up after being hit
inv_y = 20; // move invader back up after being hit
i_dir = 1; // reset invader direction
}
}
}
// - setup stuff --------------------------------------- // - setup stuff ---------------------------------------
@ -134,11 +199,49 @@ function gameStart() {
} }
// - main loop ----------------------------------------- // - main loop -----------------------------------------
function onFrame() { function onFrame() {
// if not game over
if(game_over == false) { // game over state
if(game_over) {
g.clear();
// draw text during game over state
g.setFont("4x6", 2); // set font and size x 2
g.setColor(0,0,0); // set color (black)
g.drawString("SCORE:" + score ,5, 5);
g.drawString("LIVES:" + lives ,117, 5);
g.drawString("GAME OVER", 52, 80);
// draw sprites during game over state
// - invader frame 2
g.drawImage(invader_b, inv_x, inv_y, {scale:2});
g.drawImage(tur_exp_b, tur_x, tur_y, {scale:2});
g.drawImage(inv_shot, inv_shot_x, inv_shot_y, {scale:2});
// reset stuff
if(BTNS.read()) {
turret_been_hit = false;
tur_x = 77; // reset turret to center of screen
tur_y = 148; // reset turret y
inv_x = 77; // reset invader to center of screen
inv_y = 20; // reset invader back to top
i_dir = 1; // reset invader direction
lives = 3; // reset lives
score = 0; // reset score
explosion_play = false;
game_over = false;
}
g.flip();
}
// not game over state (game running)
if(!(game_over)) {
g.clear(); g.clear();
// call function to move and animate invader // call function to move and animate invader
@ -149,18 +252,28 @@ function onFrame() {
// check input (screen presses) // check input (screen presses)
if(BTNL.read() && tur_x >= 12) { if(BTNL.read() && tur_x >= 12 && !(turret_been_hit)) {
tur_x -= 6; tur_x -= 6;
} }
else if(BTNR.read() && tur_x <= 140) { else if(BTNR.read() && tur_x <= 140 && !(turret_been_hit)) {
tur_x += 6; tur_x += 6;
} }
else if(BTNF.read()) { else if(BTNF.read() && !(turret_been_hit)) {
tur_y -= 5; shot_fired = true;
sx=tur_x + 12;
sy=tur_y - 7;
} }
// check for turret shot going off screen before allowing to fire again
if (shot_fired) {
sy -= 8;
if (sy < 22) {
shot_fired = false;
sx = -32;
sy = -32;
}
}
// check for invader shot going off screen before allowing to fire again // check for invader shot going off screen before allowing to fire again
@ -173,41 +286,84 @@ function onFrame() {
} }
// check for turret shot and invader collision
if ((sx >= inv_x) && (sx <= inv_x + 20) && (sy <= inv_y + 14)) {
sx = -32;
sy = -32;
been_hit = true;
score += 10;
}
// check for invader shot and turret collision
if ((inv_shot_x + 4) >= (tur_x) && (inv_shot_x) <= (tur_x + 24) && (inv_shot_y + 8) >= (tur_y + 6)) {
if (!(turret_been_hit)) {
lives -= 1;
if (lives == 0) {
game_over = true;
}
turret_been_hit = true;
}
}
// - draw sprites ---------------------------------- // - draw sprites ----------------------------------
// draw invader sprites // invader sprites
if(!(been_hit)) {
if(inv_frame == 1) { if(inv_frame == 1) {
// - invader frame 1
g.drawImage(invader_a, inv_x, inv_y, {scale:2}); g.drawImage(invader_a, inv_x, inv_y, {scale:2});
} }
else if(inv_frame == 2) { else if(inv_frame == 2) {
// - invader frame 2
g.drawImage(invader_b, inv_x, inv_y, {scale:2}); g.drawImage(invader_b, inv_x, inv_y, {scale:2});
} }
//g.drawImage(invader_b, inv_x + 30, inv_y, {scale:2}); }
//g.drawImage(boom, inv_x + 60, inv_y, {scale:2}); else {
// - invader explosion
g.drawImage(boom, inv_x, inv_y, {scale:2});
}
// - invader shot // - invader shot
if (inv_fired) { if (inv_fired) {
//DrawTexture(inv_shot, inv_shot_x, inv_shot_y, WHITE);
g.drawImage(inv_shot, inv_shot_x, inv_shot_y, {scale:2}); g.drawImage(inv_shot, inv_shot_x, inv_shot_y, {scale:2});
} }
else { else {
//DrawTexture(inv_shot, -32, -32, WHITE);
g.drawImage(inv_shot, -32, -32, {scale:2}); g.drawImage(inv_shot, -32, -32, {scale:2});
} }
// turret sprites
// draw turret sprites if(!(turret_been_hit)) {
// - undamaged turret
g.drawImage(turret, tur_x, tur_y, {scale:2}); g.drawImage(turret, tur_x, tur_y, {scale:2});
//g.drawImage(tur_exp_a, tur_x + 30, tur_y, {scale:2}); }
//g.drawImage(tur_exp_b, tur_x + 60, tur_y, {scale:2}); else {
//g.drawImage(shot, tur_x - 30, tur_y, {scale:2}); if(turret_exp_frame == 1) {
// - turret explosion frame 1
g.drawImage(tur_exp_a, tur_x, tur_y, {scale:2});
}
else if(turret_exp_frame == 2) {
// - turret explosion frame 2
g.drawImage(tur_exp_b, tur_x, tur_y, {scale:2});
}
}
// - turret shot
g.drawImage(shot, sx, sy, {scale:2});
// call function to make invader explode then randomly start somewhere else
invader_hit();
// call function to make turret explode (when hit) then start back in center
turret_hit();
// - draw text ------------------------------------- // - draw text -------------------------------------
g.setFont("4x6", 2); g.setFont("4x6", 2); // set font and size x 2
g.setColor(0,0,0); g.setColor(0,0,0); // set color (black)
g.drawString("SCORE:" + score ,5,5); // g.drawString("SCORE:" + score ,5,5);
g.drawString("LIVES:" + lives ,117,5); // g.drawString("LIVES:" + lives ,117,5);
g.flip(); g.flip();
@ -215,7 +371,6 @@ function onFrame() {
} }
gameStart(); gameStart();

View File

@ -1,7 +1,7 @@
{ "id": "invader", { "id": "invader",
"name": "Invader", "name": "Invader",
"shortName":"Invader", "shortName":"Invader",
"version":"0.02", "version":"0.03",
"description": "A Space Invader game-like demo - work in progress", "description": "A Space Invader game-like demo - work in progress",
"icon": "app.png", "icon": "app.png",
"screenshots" : [ { "url":"screenshot.png" } ], "screenshots" : [ { "url":"screenshot.png" } ],

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB