• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Wie kann ich ein einziges Ergebnis aus for loop erhalten?

NipponDaniel

New member
Hallo erstmal,

bin neu im Forum.

ich programmiere grade ein Browsergame, zum Spass und zur Übung. Man bekommt Punkte beim klicken auf Objekte, bzw. sollte ein Treffer als "hit-", und ein Klick daneben, als "missed" gewertet werden.
Nur leider wird, je nach dem aus welchem Scope ich abgreife, entweder nur das letzte Objekt im Loop, oder alle gewertet. Damit die Statistik stimmt, und auch Partikeleffekte usw. gehen, sollte nur einmal hit oder missed gewertet werden. Es ist eigentlich simpel, aber ich steh hier schon zu lange auf dem Schlauch. Ich denke grade an ein temporäres Array, welches bei jedem Klick mit Bools gefüllt wird, und ein tempArray.indexOf(true). Aber gibts noch eine elegantere Lösung? Bzw. hat jemand Tipps für die Implementierung?

Ich benutze p5.js.

Code:
let tom = [Tomate, ...];
let mx = mouseX;
let my = mouseY;
let mOver = false;
let hit = 0;
let missed = 0;
/*
...
*/
function mouseClicked(){
  hitBox();
}

function hitBox(){

 for (let i = 0; i < tom.length; i++) {

   if (mx > tom[i].pos.x - hb &&
        mx < tom[i].pos.x + hb &&
        my > tom[i].pos.y - hb &&
        my < tom[i].pos.y + hb) {
        
        mOver = true;
        hit += 1;

      } else {

        mOver = false;
        missed += 1;
      }
  }
}

vielen Dank für deine Zeit. lg
 
Zuletzt bearbeitet von einem Moderator:
Hier ist das Fiddle:

https://jsfiddle.net/Nippels/5qtpunj7/27/

Das Game ist eigentlich ein Zombie und kein Tomaten shooter^^
Für Killertomaten habe ich die rechte nicht lol.
Das Game selbst kann ich auch im p5 Editor posten, aber unzensiert.

Spass bei Seite. Danke schon mal für die Hilfe.

lg

- - - Aktualisiert - - -

Ich habe einen Tipp bekommen und jetzt gehts:

https://jsfiddle.net/Nippels/5qtpunj7/39/

ich lasse aber den thread noch offen, bis ich es integriert habe.
Ob das so mit dem game harmoniert, weiss ich noch nicht.

.
 
Zuletzt bearbeitet von einem Moderator:
Nein, das ist nur ein Fiddle, dass das Problem eingrenzt. Das Game ist immo schon sehr viel umfangreicher. Grafisch ist es aber simpel. Sind alles Strichmännchen. Die Motions sind größtenteils stopmotion. keine Physics. Nur ein paar Partikeleffekte, wenn man schießt. Man spawnt in einem noch recht schlichten Büroflur und bewegt sich auf x und y. Aus Türen und gewissen Spawnpunkten kommen die Zombies, die dem Spieler hinterher laufen und ihn killen wollen.
Man klickt auf die Zombies zum schießen. Denen, werden entsprechend der Waffe und der Stelle wo man sie trifft eine bestimmte Menge HP abgezogen. Neutralisierte Zombies werden aus dem Array entfernt, oder kommen auf idle. Weil es in Javascript so leicht geht, werden sie im Moment einfach aus dem Array gespliced (ich mache mir daher Gedanken, zwecks Portierbarkeit zu Java etc.). Nachdem man eine bestimmte Anzahl an Zombies erledigt hat kommt die nächste Welle mit noch mehr Zombies. usw. Es ist fast wie beim Call of Duty BlackOps Zombie Mode, nur in einer art 2D Top Down Retro Format. Wenn es so weit ist wird noch ein System mit Credits gemacht, mit denen man sich Percs, bessere Waffen usw. kaufen kann. Bin aber noch nicht ganz so weit.

xo6kMXK.png


Es gibt schon eine spielbare Version die ich hosten kann. Bei PN schick ich vielleicht mal den link, wenn jemand als Tester oder Coder contributen will. Weil es aber ein bisschen blutig ist, ich recht viel Arbeit reingesteckt habe, es nur eine Übung ist und noch keine Rechte für Soundeffekte habe, und weil es meiner Meinung nach noch nicht so weit ist, will ichs nicht öffentlich posten, bzw. nicht viel offenlegen. Aber mehr Screenshots kann ich ggf. machen.

Im Grunde dachte ich, dass es für mich keine schwierige Sache mehr ist, ein funktionierendes Zählsystem zu entwerfen, oder dass sich die Klassen-, oder Prototypen - Atribute dynamisch ändern. All diese Spiellogiken sollten möglichst funktional aus einem Modul herraus berechnet werden. Nur im Moment brauch ich noch etwas mehr Zeit um Spagetticode vorzubeugen. Es ist immerhin alles von scratch, ohne gaming library oder game maker etc. Wie ich oben schon schrieb ist das Game auch als Übung gedacht, nichts ernstes also. Die Frage aus der Überschrift ist mit dem letzten Post eigendlich gelößt, ich warte nur noch auf Reaktionen. Ich bin grade noch dabei den code aufzuräumen, dann werde ich den Thread hier schließen und den Code bei Interesse in einem neuem posten.
 
Hallo again!

Ich werde den Thread jetzt schließen. Die Lösung war ein leeres Returnstatement am Ende des Loops einzusetzen (siehe Fiddle oben). Nach dem return wird der Loop unterbrochen und keine darunterliegende Zeile Code mehr ausgeführt. Ich musste die betroffenen Loops daher in seperate Funktionen auslagern. Die Basis des Games steht so weit. Jetzt bau ich noch ein paar Rewards ein und, dass man nach 3 Leben Game Over ist, dann werd ich mal ne Demo posten. Danke fürs lesen ;) lg

[edit] kann es sein, dass ich den Thread gar nicht selber schließen kann? :cool: Oder hab ich zu wenig geschlafen? lol
 
Zuletzt bearbeitet:
Zurück
Oben