2024-08-22 09:59:10 +02:00
|
|
|
const rechnungen = document.querySelector("#rechnungen");
|
2024-08-29 09:07:41 +02:00
|
|
|
|
|
|
|
//auf welcher höhe starten die Rechnungen?
|
|
|
|
const rechnungenTopStart = -100;
|
|
|
|
let rechnungenTop = rechnungenTopStart;
|
|
|
|
rechnungen.style.top = rechnungenTop + "px";
|
|
|
|
|
|
|
|
//speed der Rechnungen, wie schnell sie fallen
|
2024-09-03 11:20:32 +02:00
|
|
|
const speedRechnungen = 0.5;
|
2024-08-29 09:07:41 +02:00
|
|
|
//maximale pixel Tiefe bis sie respawnen
|
|
|
|
const maxTiefeRechunngen = 750;
|
2024-08-22 09:59:10 +02:00
|
|
|
|
2024-08-31 13:01:51 +02:00
|
|
|
//Rechnungen und die 4er Rechenzeichen in unserem Spiel in einem Array
|
2024-08-22 09:59:10 +02:00
|
|
|
const rechenzeichen = ['+','-','*',':'];
|
2024-08-22 15:20:37 +02:00
|
|
|
const rechnung1Text = document.querySelector("#rechnung1Text");
|
|
|
|
const rechnung2Text = document.querySelector("#rechnung2Text");
|
|
|
|
|
2024-08-29 08:19:38 +02:00
|
|
|
|
|
|
|
//RechnungenSpawn Parameter
|
2024-08-27 11:11:37 +02:00
|
|
|
const maxZahl = 100;
|
|
|
|
const maxMal = 11;
|
|
|
|
const maxDurch = 5;
|
2024-08-31 13:01:51 +02:00
|
|
|
//wie viele Rechnungen sollen nacheinander spawnen
|
|
|
|
let gesamtzahlRechnungen = 5;
|
2024-08-27 11:11:37 +02:00
|
|
|
|
2024-08-31 13:01:51 +02:00
|
|
|
//Die Fuchszahl die dem Spieler angezeigt wird
|
2024-08-29 08:35:43 +02:00
|
|
|
const fuchsZahl = document.querySelector("#fuchsZahl");
|
2024-08-31 19:38:24 +02:00
|
|
|
//Elemete für überlappungs Check
|
|
|
|
const fuchsImg = document.querySelector("#fuchs img");
|
2024-09-01 19:00:35 +02:00
|
|
|
//die ersten rechnungen erscheinen sofort
|
2024-08-27 11:11:37 +02:00
|
|
|
rechnungenSpawn(maxZahl,maxMal,maxDurch);
|
2024-08-31 13:01:51 +02:00
|
|
|
//wie viele Rechnungen bisher gespawed sind
|
|
|
|
let counterRechnungen = 1;
|
2024-08-31 19:38:24 +02:00
|
|
|
//rechnung berührt?
|
|
|
|
let bereitsEinmalOverlappt = false;
|
2024-08-31 19:53:22 +02:00
|
|
|
//wie viele richtige Entscheidungen hat der Spieler zurzeit getroffen
|
|
|
|
let richtigeEntscheidungen = 0;
|
|
|
|
//Wie viele richtige entscheidungen braucht der Spieler um am ende, gegen das Müll monster, zu gewinnen
|
|
|
|
let zielRichtigeEntscheidungen = 3;
|
|
|
|
let gameWon = false;
|
2024-09-01 12:58:17 +02:00
|
|
|
//Variabeln für die WinAnimation
|
|
|
|
const enemy = document.querySelector("#enemy");
|
|
|
|
const enemyZahl = document.querySelector("#enemyZahl");
|
|
|
|
let voreisntellungenFertig = false;
|
|
|
|
//auf welcher höhe startet der Enemy?
|
2024-09-01 19:58:05 +02:00
|
|
|
const enemyTopStart = -700;
|
2024-09-01 12:58:17 +02:00
|
|
|
let enemyTop = enemyTopStart;
|
|
|
|
enemy.style.top = enemyTop + "px";
|
|
|
|
//speed des Enemys, wie schnell er fallen soll
|
|
|
|
const speedEnemy = 0.2;
|
|
|
|
//maximale pixel Tiefe bis der Enemy aufhört zu fallen
|
|
|
|
const maxTiefeEnemy = 100;
|
2024-09-01 19:58:05 +02:00
|
|
|
//Button
|
|
|
|
const restartButton = document.querySelector("#restartButton");
|
|
|
|
const winText = document.querySelector("#winText");
|
|
|
|
const loseText = document.querySelector("#loseText");
|
|
|
|
const tom = document.querySelector("#tom");
|
|
|
|
const tomImg = document.querySelector("#tom img");
|
2024-08-29 09:07:41 +02:00
|
|
|
|
2024-08-29 11:33:51 +02:00
|
|
|
//returned den int in der Rechnung, nur die zahl ohne rechenzeichen
|
|
|
|
function rechnung1Int(){
|
|
|
|
let text = rechnung1Text.innerText;
|
|
|
|
//entfernen vom rechenzeichen (+,-,*,:)
|
|
|
|
text = text.substring(1);
|
|
|
|
let zahl = parseInt(text);
|
|
|
|
return zahl;
|
|
|
|
}
|
|
|
|
//returned den int in der Rechnung, nur die zahl ohne rechenzeichen
|
|
|
|
function rechnung2Int(){
|
|
|
|
let text = rechnung2Text.innerText;
|
|
|
|
//entfernen vom rechenzeichen (+,-,*,:)
|
|
|
|
text = text.substring(1);
|
|
|
|
let zahl = parseInt(text);
|
|
|
|
return zahl;
|
|
|
|
}
|
2024-08-31 13:01:51 +02:00
|
|
|
//returned das rechenzeichen der derzeitigen Rechnung ohne zahl
|
|
|
|
function rechnung1Zeichen(){
|
|
|
|
let text = rechnung1Text.innerText;
|
|
|
|
return text.charAt(0)
|
|
|
|
}
|
|
|
|
//returned das rechenzeichen der derzeitigen Rechnung ohne zahl
|
|
|
|
function rechnung2Zeichen(){
|
|
|
|
let text = rechnung2Text.innerText;
|
|
|
|
return text.charAt(0)
|
|
|
|
}
|
2024-08-29 11:33:51 +02:00
|
|
|
|
2024-08-29 09:07:41 +02:00
|
|
|
function rechnungMoven(speed,maxtiefe){
|
2024-08-22 09:59:10 +02:00
|
|
|
let nextTop = rechnungenTop + 10 * speed;
|
|
|
|
rechnungen.style.top = nextTop + "px";
|
2024-08-29 09:07:41 +02:00
|
|
|
if(nextTop > maxtiefe){
|
|
|
|
rechnungen.style.top = rechnungenTopStart + "px";
|
|
|
|
rechnungenTop = rechnungenTopStart;
|
2024-08-27 11:11:37 +02:00
|
|
|
rechnungenSpawn(maxZahl,maxMal,maxDurch);
|
2024-08-31 19:38:24 +02:00
|
|
|
bereitsEinmalOverlappt = false;
|
2024-08-31 13:01:51 +02:00
|
|
|
counterRechnungen++;
|
2024-08-22 09:59:10 +02:00
|
|
|
}else{
|
|
|
|
rechnungenTop = nextTop;
|
|
|
|
}
|
|
|
|
}
|
2024-09-01 19:00:35 +02:00
|
|
|
function generateRandomZahl(index,maxzahl,maxMal,maxDurch){
|
2024-08-27 11:11:37 +02:00
|
|
|
if(rechenzeichen[index] == '+' || rechenzeichen[index] == '-'){
|
2024-09-01 19:00:35 +02:00
|
|
|
return randomZahl = Math.floor(Math.random()*maxzahl);
|
2024-08-27 11:11:37 +02:00
|
|
|
}
|
|
|
|
if(rechenzeichen[index] == '*'){
|
2024-09-01 19:00:35 +02:00
|
|
|
return randomZahl = Math.floor(Math.random()*maxMal);
|
2024-08-27 11:11:37 +02:00
|
|
|
}
|
|
|
|
if(rechenzeichen[index] == ':'){
|
2024-09-01 19:00:35 +02:00
|
|
|
return randomZahl = Math.floor(Math.random()*maxDurch) + 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
2024-09-01 19:11:35 +02:00
|
|
|
//
|
|
|
|
function generateRandomIndex(){
|
|
|
|
let random = Math.random();
|
|
|
|
if(random < 0.5){
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if(random < 0.8){
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if(random < 0.9){
|
|
|
|
return 2;
|
|
|
|
}else{
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
}
|
2024-09-01 19:00:35 +02:00
|
|
|
function rechnungenSpawn(){
|
2024-09-01 19:11:35 +02:00
|
|
|
let index = generateRandomIndex();
|
2024-09-01 19:00:35 +02:00
|
|
|
let randomZahl = 0;
|
|
|
|
|
|
|
|
randomZahl = generateRandomZahl(index,maxZahl,maxMal,maxDurch);
|
|
|
|
|
|
|
|
while(ergebnis(parseInt(fuchsZahl.innerText),randomZahl,rechenzeichen[index]) < 0){
|
|
|
|
randomZahl = generateRandomZahl(index,maxZahl,maxMal,maxDurch);
|
2024-08-27 11:11:37 +02:00
|
|
|
}
|
2024-08-22 15:20:37 +02:00
|
|
|
rechnung1Text.innerText = rechenzeichen[index] + randomZahl.toString();
|
2024-08-27 11:11:37 +02:00
|
|
|
|
2024-09-01 19:11:35 +02:00
|
|
|
index = generateRandomIndex();
|
2024-09-01 19:00:35 +02:00
|
|
|
randomZahl = generateRandomZahl(index,maxZahl,maxMal,maxDurch);
|
|
|
|
|
|
|
|
while(ergebnis(parseInt(fuchsZahl.innerText),randomZahl,rechenzeichen[index]) < 0){
|
|
|
|
randomZahl = generateRandomZahl(index,maxZahl,maxMal,maxDurch);
|
2024-08-27 11:11:37 +02:00
|
|
|
}
|
2024-08-22 15:20:37 +02:00
|
|
|
rechnung2Text.innerText = rechenzeichen[index] + randomZahl.toString();
|
2024-09-01 19:00:35 +02:00
|
|
|
|
2024-08-22 09:59:10 +02:00
|
|
|
}
|
2024-08-31 19:38:24 +02:00
|
|
|
function checkOverlap(objekt1, objekt2) {
|
|
|
|
const rect1 = objekt1.getBoundingClientRect(); //sorgt dafür, dass man die position der grenzen des Elements bekommt
|
|
|
|
const rect2 = objekt2.getBoundingClientRect();
|
|
|
|
|
|
|
|
return !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom); //true wenn die objekte überlappen
|
|
|
|
}
|
|
|
|
function rechne(){
|
2024-09-01 12:58:17 +02:00
|
|
|
if(checkOverlap(fuchsImg,rechnung1Text)){
|
2024-08-31 19:38:24 +02:00
|
|
|
fuchsZahl.innerText = ergebnis(parseInt(fuchsZahl.innerText),rechnung1Int(),rechnung1Zeichen());
|
|
|
|
console.log("Rechnung 1");
|
|
|
|
bereitsEinmalOverlappt = true;
|
2024-08-31 19:53:22 +02:00
|
|
|
if(ergebnis(parseInt(fuchsZahl.innerText),rechnung1Int(),rechnung1Zeichen()) >= ergebnis(parseInt(fuchsZahl.innerText),rechnung2Int(),rechnung2Zeichen())){
|
|
|
|
richtigeEntscheidungen++;
|
|
|
|
}
|
2024-08-31 19:38:24 +02:00
|
|
|
}
|
2024-09-01 12:58:17 +02:00
|
|
|
if(checkOverlap(fuchsImg,rechnung2Text)){
|
2024-08-31 19:38:24 +02:00
|
|
|
fuchsZahl.innerText = ergebnis(parseInt(fuchsZahl.innerText),rechnung2Int(),rechnung2Zeichen());
|
|
|
|
console.log("Rechnung 2");
|
|
|
|
bereitsEinmalOverlappt = true;
|
2024-08-31 19:53:22 +02:00
|
|
|
if(ergebnis(parseInt(fuchsZahl.innerText),rechnung2Int(),rechnung2Zeichen()) >= ergebnis(parseInt(fuchsZahl.innerText),rechnung1Int(),rechnung1Zeichen())){
|
|
|
|
richtigeEntscheidungen++;
|
|
|
|
}
|
2024-08-31 19:38:24 +02:00
|
|
|
}
|
|
|
|
}
|
2024-08-29 08:35:43 +02:00
|
|
|
function ergebnis(zahl1,zahl2,rechenzeichen){
|
|
|
|
if(rechenzeichen == '+'){
|
|
|
|
return zahl1 + zahl2;
|
|
|
|
}
|
|
|
|
if(rechenzeichen == '-'){
|
|
|
|
return zahl1 - zahl2;
|
|
|
|
}
|
|
|
|
if(rechenzeichen == '*'){
|
|
|
|
return zahl1 * zahl2;
|
|
|
|
}
|
|
|
|
if(rechenzeichen == ':'){
|
|
|
|
return zahl1 / zahl2;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
2024-09-01 19:58:05 +02:00
|
|
|
function battle(){
|
|
|
|
if(parseInt(enemyZahl.innerText) > 0 && parseInt(fuchsZahl.innerText) > 0){
|
|
|
|
enemyZahl.innerText = "" + (parseInt(enemyZahl.innerText) - 1);
|
|
|
|
fuchsZahl.innerText = "" + (parseInt(fuchsZahl.innerText) - 1);
|
|
|
|
}else{
|
|
|
|
restartButton.style.display = "block";
|
|
|
|
if(gameWon){
|
|
|
|
winText.style.display = "block";
|
|
|
|
tom.style.display = "block";
|
|
|
|
tomImg.src = "pics/tom_3.png";
|
|
|
|
}else{
|
|
|
|
loseText.style.display = "block";
|
|
|
|
tom.style.display = "block";
|
|
|
|
tomImg.src = "pics/tom_1.png";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-09-01 12:58:17 +02:00
|
|
|
function playWinAnimation(){
|
|
|
|
if(gameWon){
|
|
|
|
if(!voreisntellungenFertig){
|
|
|
|
enemyZahl.innerText = "" + (parseInt(fuchsZahl.innerText) - Math.floor(Math.random()*50));
|
|
|
|
voreisntellungenFertig = true;
|
|
|
|
}
|
|
|
|
enemyMoven(speedEnemy,maxTiefeEnemy);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function playLoseAnimation(){
|
|
|
|
if(gameWon == false){
|
|
|
|
if(!voreisntellungenFertig){
|
|
|
|
enemyZahl.innerText = "" + (parseInt(fuchsZahl.innerText) + Math.floor(Math.random()*100));
|
|
|
|
voreisntellungenFertig = true;
|
|
|
|
}
|
|
|
|
enemyMoven(speedEnemy,maxTiefeEnemy);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function enemyMoven(speed,maxtiefe){
|
|
|
|
let nextTop = enemyTop + 10 * speed;
|
|
|
|
|
|
|
|
if(nextTop > maxtiefe){
|
2024-09-01 19:58:05 +02:00
|
|
|
battle();
|
2024-09-01 12:58:17 +02:00
|
|
|
}else{
|
|
|
|
enemy.style.top = nextTop + "px";
|
|
|
|
enemyTop = nextTop;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function gameloopRechnungen(){
|
2024-08-31 13:01:51 +02:00
|
|
|
if(counterRechnungen <= gesamtzahlRechnungen){
|
|
|
|
rechnungMoven(speedRechnungen,maxTiefeRechunngen);
|
2024-08-31 19:38:24 +02:00
|
|
|
if(!bereitsEinmalOverlappt){
|
|
|
|
rechne();
|
|
|
|
}
|
|
|
|
|
2024-08-31 19:53:22 +02:00
|
|
|
}else{
|
|
|
|
if(richtigeEntscheidungen >= zielRichtigeEntscheidungen){
|
|
|
|
gameWon = true;
|
2024-09-01 12:58:17 +02:00
|
|
|
playWinAnimation();
|
2024-08-31 19:53:22 +02:00
|
|
|
console.log("Müllmonster besiegt!!!");
|
|
|
|
}else{
|
|
|
|
gameWon = false;
|
2024-09-01 12:58:17 +02:00
|
|
|
playLoseAnimation();
|
2024-08-31 19:53:22 +02:00
|
|
|
}
|
2024-08-31 13:01:51 +02:00
|
|
|
}
|
2024-09-01 12:58:17 +02:00
|
|
|
}
|
2024-09-01 19:58:05 +02:00
|
|
|
restartButton.addEventListener("click",()=>{
|
|
|
|
location.reload();
|
|
|
|
});
|
2024-09-01 12:58:17 +02:00
|
|
|
setInterval(gameloopRechnungen, 10);
|