diff --git a/.gitignore b/.gitignore index 2d418b7c8..d2001bf41 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ package-lock.json appdates.csv .vscode .idea/ -_config.yml +_config.yml + diff --git a/apps.json b/apps.json index f8ae37fae..560d6505b 100644 --- a/apps.json +++ b/apps.json @@ -3430,13 +3430,17 @@ "name": "Car Crazy", "shortName":"Car Crazy", "icon": "carcrash.png", - "version":"0.01", + "version":"0.03", "description": "A simple car game where you try to avoid the other cars by tilting your wrist left and right. Hold down button 2 to start.", "tags": "game", "readme": "README.md", "storage": [ {"name":"carcrazy.app.js","url":"app.js"}, - {"name":"carcrazy.img","url":"app-icon.js","evaluate":true} + {"name":"carcrazy.img","url":"app-icon.js","evaluate":true}, + {"name":"carcrazy.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"app.json"} ] } ] diff --git a/apps/carcrazy/ChangeLog b/apps/carcrazy/ChangeLog index 9a50abf42..f697617b4 100644 --- a/apps/carcrazy/ChangeLog +++ b/apps/carcrazy/ChangeLog @@ -1 +1,3 @@ 0.01: Car Crazy is now avialable for testing in beta! +0.02: 10 Levels are now added making the game harder as it goes along. Some of the levels include multiple cars and faster cars. More levels coming soon. +0.03: Settings are now added so that you can reset your high score. diff --git a/apps/carcrazy/README.md b/apps/carcrazy/README.md index 25fa23b25..e1eadea5e 100644 --- a/apps/carcrazy/README.md +++ b/apps/carcrazy/README.md @@ -1,5 +1,5 @@ # Car Crazy -Car crazy is a fun game where you tilt your wrist left and right to avoid incoming cars. If you get hit by a car you lose a heart. In the game you have three hearts, if you get hit 3 times you are sent to the game over screen. Your goal is to try to last as long as you can. Because this game is still in beta please report any bugs here: https://forms.office.com/r/HnwYzG9Sk7. +Car crazy is a fun game where you tilt your wrist left and right to avoid incoming cars. If you get hit by a car you lose a heart. In the game you have three hearts, if you get hit 3 times you are sent to the game over screen. Recently levels have been added making the game get harder as you play. Your goal is to try to last as long as you can. Because this game is still in production please report any bugs here: https://forms.office.com/r/HnwYzG9Sk7. ### Images: (Coming Soon) @@ -11,8 +11,50 @@ BNT2: Hold down this button to start the game if you are on the starting page an Tilting Left-Right: Tilt your wrist left and right to steer your car and try not to get hit by the enemy car. ### Feautures Coming Soon: -0.02: Levels are creating making the game get harder as it goes along. +0.02: Levels are creating making the game get harder as it goes along. (Completed) -0.03: Optional soundtrack in settings. More levels. +0.03: Setting for reseting high score. (Completed) -0.04: With higher scores you can now unlock different colors of cars. +0.04: Optional soundtrack in settings. More levels. + +0.05: With higher scores you can now unlock different colors of cars. More settings. + +0.06: Car selector at game over screen and start screen. + +0.07 More levels. + +0.08 More types of Cars. + +### Levels +Here is a list of all the levels: + +##### Level 1: +Basic single car moving at 10 speed. + +##### Level 2: +A single car can come from any position at the top of the screen. + +##### Level 3: +A single car are coming at 12 speed and can come from any position at the top of the screen. + +##### Level 4: +2 cars come at 8 speed. + +##### Level 5: +2 cars come at 9 speed. + +##### Level 6: +2 cars come at 9.5 and 8 speed. + +##### Level 7: +2 cars come at 10 and 8 speed. + +##### Level 8: +2 cars come at 11.5 speed. + +##### Level 9 and Above: +2 cars come at 13 and 14 speed. + +### Other + +-Settings are now avialable for resetting your high score. diff --git a/apps/carcrazy/app.js b/apps/carcrazy/app.js index c7476d18a..0fb765871 100644 --- a/apps/carcrazy/app.js +++ b/apps/carcrazy/app.js @@ -22,6 +22,10 @@ var PurpleCar = require("heatshrink").decompress(atob("ol74UBitg///BIP/7lVqtUDJU var LightGreenCar = require("heatshrink").decompress(atob("ol74UBocF///BIP1z9VqtUDJUVBwIABq2qABOVCCkolQJC0AwDgWolAQD1EqwBCH0EqCCdKxQuEAAkKwGhCH4Q/CGD7ECDINEAAoQIwBACgQQYwQ+EAAcC1EACAeAlQfDAAheBCG2oCBUCCB8qCCiQBdp3+fxW/CH4Q/CH4QxgQQKwAQD1QQK1QQUmQQKxiH/CBGqCB3/5WACA+j/4Qf14QxKjGqRI0CCAv+x4QBEYcC1Wo/SpFCBtUlQQBBgISBAAQGBCAOo6te1QQB///lQPC1AGBCAOqyoQQlAuBCAXPAQIAD/Q2BlGoCAgAGCAUqCBnyCAVS1WrB5AAB9RUDCB1WCB0VVIIQMXQYQ/CAbFBBw/8BQIQFn4QewDNBCQgOCgEACDADBAAMC1T5BCAwABCQIACA4QQZABAQ/CH4Q/CH4QC1APKhQQPlQQUxWgGJOCCAcCCBWACAmqGhAQFwEqCA8qFYIQTuWohWqAAIQE1WghUFCANVD4JFBAAqzBlQPCCCNyHIIQGMoONCAdWQ5WVCCjNJZIYQM1WtCAt6KYwAB0oQFIoIPGIIoQTqhDG6oMDA")); +function consoleDebug(message) { + //console.log(message); +} + function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); @@ -30,21 +34,55 @@ function getRandomInt(min, max) { function moveEnemyPosition(){ score += 1; - randomRoadPositionIndicator = getRandomInt(1, 4); - if ((randomRoadPositionIndicator == 1)) { - randomRoadPosition = 85; - }else if((randomRoadPositionIndicator == 2)){ - randomRoadPosition = 120; - }else { - randomRoadPosition = 155; + checkForNextLevel(); + if(level == 1){ + randomRoadPositionIndicator = getRandomInt(1, 4); + if ((randomRoadPositionIndicator == 1)) { + enemyPositonCenterX = 85; + }else if((randomRoadPositionIndicator == 2)){ + enemyPositonCenterX = 120; + }else { + enemyPositonCenterX = 155; + } + }else if(level == 2||level==3){ + enemyPositonCenterX = getRandomInt(85, 155); + }else if(level == 4 || level == 5 || level == 6 || level == 8 || level == 9 || level == 10 || level > 10){ + do{ + randomRoadPositionIndicator = getRandomInt(1, 4); + randomRoadPositionIndicator2 = getRandomInt(1, 4); + }while(randomRoadPositionIndicator==randomRoadPositionIndicator2); + + if ((randomRoadPositionIndicator == 1)) { + enemyPositonCenterX = 85; + }else if((randomRoadPositionIndicator == 2)){ + enemyPositonCenterX = 120; + }else if((randomRoadPositionIndicator == 3)){ + enemyPositonCenterX = 155; + } + + if ((randomRoadPositionIndicator2 == 1)) { + enemyPositonCenterX2 = 85; + }else if((randomRoadPositionIndicator2 == 2)){ + enemyPositonCenterX2 = 120; + }else if((randomRoadPositionIndicator2 == 3)){ + enemyPositonCenterX2 = 155; + }else if(level == 7||level == 8){ + + } } } function collision(){ if(gameStatus == GAMEPLAYING){ + consoleDebug("Px:"+playerCarLeftX+", "+playerCarRightX); + consoleDebug("1x:"+enemyCarLeftX+", "+enemyCarRightX); + consoleDebug("2x:"+enemyCarLeftX2+", "+enemyCarRightX2); + consoleDebug("Py:"+playerCarFrontY); + consoleDebug("1y:"+enemyCarFrontY); + consoleDebug("2y:"+enemyCarFrontY2); if ( - (enemyCarFrontY > playerCarFrontY) + (enemyCarFrontY < 300 && enemyCarFrontY > playerCarFrontY) && ( (enemyCarLeftX > playerCarLeftX && enemyCarLeftX < playerCarRightX) @@ -52,51 +90,105 @@ function collision(){ (enemyCarRightX > playerCarLeftX && enemyCarRightX < playerCarRightX) ) ){ - // hit - setTimeout(collision, 2500); // wait 2.5 second for the function to actiavte agian. - numberofHearts -= 1; - score -= 1; - Bangle.buzz(); - }else{ - // miss - setTimeout(collision, 1); // try again in 1 milliseconds. + // hit car 1 + consoleDebug("1 HIT"); + enemyPositonCenterY = 300; + numberofHearts -= 1; + Bangle.buzz(50,50); + }else if + ( + (enemyCarFrontY2 < 300 && enemyCarFrontY2 > playerCarFrontY) + && + ( + (enemyCarLeftX2 > playerCarLeftX && enemyCarLeftX2 < playerCarRightX) + || + (enemyCarRightX2 > playerCarLeftX && enemyCarRightX2 < playerCarRightX) + ) + ){ + // hit car 2 + consoleDebug("2 HIT"); + enemyPositonCenterY2 = 300; + numberofHearts -= 1; + Bangle.buzz(50,50); } + setTimeout(collision, 50); // try again in 50 milliseconds. } } -function storeMyData(data) { - // ensure there are less than 500 elements in the array - while (log.length >= 500) log.shift(); - // append a new item to the array - log.push(data); +function checkForNextLevel(){ + if(score < 10){ + level = 1; + }else if(score >= 10 && score < 20){ + level = 2; + }else if(score >= 20 && score < 30){ + level = 3; + }else if(score >= 30 && score < 40){ + level = 4; + }else if(score >= 40 && score < 50){ + level = 5; + }else if(score >= 50 && score < 60){ + level = 6; + }else if(score >= 60 && score < 70){ + level = 7; + }else if(score >= 70 && score < 80){ + level = 8; + }else if(score >= 80 && score < 90){ + level = 9; + }else if(score >= 90){ + level = 10; + } } +var accel = Bangle.getAccel(); var file = require("Storage").open("CarCrazy.csv","r"); var currentHighScore = file.readLine(); if (currentHighScore == undefined) currentHighScore = 0; + var BackgroundStartingPosition = 75; -var carScale = 0.5; -var accel = Bangle.getAccel(); -var playerCarPosition = 120-accel.x*40; var BackgroundYPosition = BackgroundStartingPosition; -var randomRoadPositionIndicator = getRandomInt(1, 3); -var randomRoadPosition = 120; -var enemyPositonY = 30; + +var randomRoadPositionIndicator; +var randomRoadPositionIndicator2; +var enemyPositonCenterX; +var enemyPositonCenterX2; + +var carScale = 0.5; var carWidth = 30; var carHeight = 60; -var playerCarY = 130; -var enemyCarLeftX; -var enemyCarRightX; + +var playerCarCenterY = 130; +var playerCarCenterX; + +var enemyPositonCenterY = 0 - carHeight/2; +var enemyPositonCenterY2 = 0 - carHeight/2; + var playerCarLeftX; var playerCarRightX; -var enemyCarFrontY; var playerCarFrontY; + +var playerCarFrontY; +var playerCarBackY; +var playerCarLeftX; +var playerCarRightX; + +var enemyCarFrontY; +var enemyCarBackY; +var enemyCarLeftX; +var enemyCarRightX; + +var enemyCarFrontY2; +var enemyCarBackY2; +var enemyCarLeftX2; +var enemyCarRightX2; + var GAMEPLAYING = 1; var GAMEOVER = 2; var GAMESTART = 3; var gameStatus = GAMESTART; var score = 0; +var level = 1; + moveEnemyPosition(); collision(); @@ -114,11 +206,16 @@ function draw(){ if(gameStatus == GAMEPLAYING){ BackgroundYPosition += 10; accel = Bangle.getAccel(); - playerCarPosition = 120-accel.x*40; + playerCarCenterX = Math.round(120-accel.x*120); + if (playerCarCenterX > 170) { playerCarCenterX = 170; } + if (playerCarCenterX < 70) { playerCarCenterX = 70; } g.flip(); g.drawImage(backgroundImage,125,BackgroundYPosition, {scale:13,rotate:0}); - g.drawImage(RedCar,playerCarPosition,playerCarY, {scale:carScale,rotate:3.142}); - g.drawImage(OrangeCar,randomRoadPosition,enemyPositonY, {scale:carScale,rotate:0}); + g.drawImage(RedCar,playerCarCenterX,playerCarCenterY, {scale:carScale,rotate:3.142}); + g.drawImage(OrangeCar,enemyPositonCenterX,enemyPositonCenterY, {scale:carScale,rotate:0}); + if(level>=4){ + g.drawImage(OrangeCar,enemyPositonCenterX2,enemyPositonCenterY2, {scale:carScale,rotate:0}); + } if(numberofHearts==3){ g.drawImage(heartImage,10,10, {scale:2,rotate:0}); @@ -141,23 +238,38 @@ function draw(){ } } - playerCarFrontY = playerCarY-carHeight/2; - playerCarBackY = playerCarY+carHeight/2; - playerCarLeftX = playerCarPosition-carWidth/2; - playerCarRightX = playerCarPosition+carWidth/2; + playerCarFrontY = playerCarCenterY-carHeight/2; + playerCarBackY = playerCarCenterY+carHeight/2; + playerCarLeftX = playerCarCenterX-carWidth/2; + playerCarRightX = playerCarCenterX+carWidth/2; - enemyCarFrontY = enemyPositonY+carHeight/2; - enemyCarBackY = enemyPositonY-carHeight/2; - enemyCarLeftX = randomRoadPosition-carWidth/2; - enemyCarRightX = randomRoadPosition+carWidth/2; + enemyCarFrontY = enemyPositonCenterY+carHeight/2; + enemyCarBackY = enemyPositonCenterY-carHeight/2; + enemyCarLeftX = enemyPositonCenterX-carWidth/2; + enemyCarRightX = enemyPositonCenterX+carWidth/2; + enemyCarFrontY2 = enemyPositonCenterY2+carHeight/2; + enemyCarBackY2 = enemyPositonCenterY2-carHeight/2; + enemyCarLeftX2 = enemyPositonCenterX2-carWidth/2; + enemyCarRightX2 = enemyPositonCenterX2+carWidth/2; + + g.setColor(255,0,0); //g.drawRect(playerCarLeftX, playerCarFrontY, playerCarRightX, playerCarBackY); //g.drawRect(enemyCarLeftX, enemyCarFrontY, enemyCarRightX, enemyCarBackY); + //g.drawRect(enemyCarLeftX2, enemyCarFrontY2, enemyCarRightX2, enemyCarBackY2); g.setColor(0,0,0); g.drawString("Score: "+score,180,5); g.drawString("HighScore:",178,15); g.drawString(currentHighScore,205,25); + g.drawString("Level: "+level,180,150); + + //g.drawString("P:"+playerCarLeftX+", "+playerCarRightX,180,90); + //g.drawString("1:"+enemyCarLeftX+", "+enemyCarRightX,180,100); + //g.drawString("2:"+enemyCarLeftX2+", "+enemyCarRightX2,180,110); + //g.drawString("P:"+playerCarFrontY,180,120); + //g.drawString("1:"+enemyCarFrontY,180,130); + //g.drawString("2:"+enemyCarFrontY2,180,140); if(BackgroundYPosition > 170){ BackgroundYPosition = BackgroundStartingPosition; @@ -200,41 +312,75 @@ function draw(){ g.drawString("2 To Start",10,130); g.drawImage(LightGreenCar,180,115, {scale:0.5,rotate:3}); g.drawImage(PurpleCar,215,115, {scale:0.5,rotate:3}); - //setTimeout(displayPopup, 3000); } } -setInterval(draw ,10); +setInterval(draw, 50); function moveEnemyCar(){ if(gameStatus == GAMEPLAYING){ - enemyPositonY = enemyPositonY + 10; - if((enemyPositonY > 200)){ - enemyPositonY = 30; + if(level==1||level==2){ + enemyPositonCenterY = enemyPositonCenterY + 10; + enemyPositonCenterY2 = 0; + }else if(level==3){ + enemyPositonCenterY = enemyPositonCenterY + 12; + enemyPositonCenterY2 = 0; + }else if(level==4){ + enemyPositonCenterY = enemyPositonCenterY + 8; + enemyPositonCenterY2 = enemyPositonCenterY2 + 8; + }else if(level==5){ + enemyPositonCenterY = enemyPositonCenterY + 9; + enemyPositonCenterY2 = enemyPositonCenterY2 + 9; + }else if(level==6){ + enemyPositonCenterY = enemyPositonCenterY + 9.5; + enemyPositonCenterY2 = enemyPositonCenterY2 + 8; + }else if(level==7){ + enemyPositonCenterY = enemyPositonCenterY + 10; + enemyPositonCenterY2 = enemyPositonCenterY2 + 8; + }else if(level==8){ + enemyPositonCenterY = enemyPositonCenterY + 11.5; + enemyPositonCenterY2 = enemyPositonCenterY2 + 11.5; + }else if(level>=9){ + enemyPositonCenterY = enemyPositonCenterY + 13; + enemyPositonCenterY2 = enemyPositonCenterY2 + 14; + } + if(enemyPositonCenterY > 200){ + enemyPositonCenterY = 300; + } + if(enemyPositonCenterY2 > 200){ + enemyPositonCenterY2 = 300; + } + if(enemyPositonCenterY > 200 && (enemyPositonCenterY2 > 200 || level < 4)){ + enemyPositonCenterY = 0 - carHeight/2; + if (level >= 4) { enemyPositonCenterY2 = 0 - carHeight/2; } moveEnemyPosition(); } } } -setInterval(moveEnemyCar,10); +setInterval(moveEnemyCar,50); setWatch(() => { if(gameStatus == GAMESTART){ gameStatus = GAMEPLAYING; collision(); - enemyPositonY = 0; + numberofHearts = 3; + enemyPositonCenterX = 120; + enemyPositonCenterY = 0 - carHeight/2; + enemyPositonCenterX2 = 120; + enemyPositonCenterY2 = 0 - carHeight/2; score = 0; + level = 1; + checkForNextLevel(); }else if(gameStatus == GAMEOVER){ gameStatus = GAMEPLAYING; collision(); - enemyPositonY = 0; + enemyPositonCenterX = 120; + enemyPositonCenterY = 0 - carHeight/2; + enemyPositonCenterX2 = 120; + enemyPositonCenterY2 = 0 - carHeight/2; numberofHearts = 3; score = 0; + level = 1; + checkForNextLevel(); } }, BTN2, {repeat:true}); - - - - - - - diff --git a/apps/carcrazy/settings.js b/apps/carcrazy/settings.js new file mode 100644 index 000000000..ee3bbd417 --- /dev/null +++ b/apps/carcrazy/settings.js @@ -0,0 +1,20 @@ + +(function (back) { + const menu = { + '': { 'title': 'Car Crazy' }, + '< Back': back, + 'Reset Highscore': () => { + E.showPrompt('Reset Highscore?').then((v) => { + let delay = 50; + if (v) { + delay = 500; + E.showMessage('Resetting'); + var f = require('Storage').open('CarCrazy.csv', 'w'); + f.write('0\n'); + } + setTimeout(() => E.showMenu(menu), delay); + }); + } + }; + E.showMenu(menu); +});