Merge branch 'Ronin0000-master'

pull/803/head
Gordon Williams 2021-09-13 10:04:54 +01:00
commit fa344f75f5
6 changed files with 279 additions and 64 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ appdates.csv
.vscode
.idea/
_config.yml

View File

@ -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"}
]
}
]

View File

@ -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.

View File

@ -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.

View File

@ -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;
checkForNextLevel();
if(level == 1){
randomRoadPositionIndicator = getRandomInt(1, 4);
if ((randomRoadPositionIndicator == 1)) {
randomRoadPosition = 85;
enemyPositonCenterX = 85;
}else if((randomRoadPositionIndicator == 2)){
randomRoadPosition = 120;
enemyPositonCenterX = 120;
}else {
randomRoadPosition = 155;
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.
// hit car 1
consoleDebug("1 HIT");
enemyPositonCenterY = 300;
numberofHearts -= 1;
score -= 1;
Bangle.buzz();
}else{
// miss
setTimeout(collision, 1); // try again in 1 milliseconds.
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});

20
apps/carcrazy/settings.js Normal file
View File

@ -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);
});