JavaScriptsSpiele

Liebesrechner

Zählt die Buchstaben aus L-O-V-E-Y-O-U in zwei Namen und macht daraus eine Prozentzahl.

Der Liebesrechner ist ein Klassiker der frühen Homepage-Zeit: Ihr tragt zwei Namen ein, klickt auf „Berechnen“ und bekommt eine Prozentzahl, wie gut die beiden angeblich zueinander passen. Das Script ist reiner Spaß und sagt nichts über echte Menschen aus — es rechnet nur mit den Buchstaben, die ihr eintippt.

Die Bedienung ist schnell erklärt: In die beiden Felder kommen die Namen, ein Klick auf den Knopf zeigt das Ergebnis darunter. Vorbelegt ist das Beispiel aus dem Original von 2004. Ihr könnt beliebige Namen eintragen, auch mit Leerzeichen und Nachnamen — leer bleiben darf aber keines der beiden Felder.

Die Rechnung dahinter ist erfrischend durchschaubar: Das Script sucht in beiden Namen nach den Buchstaben des englischen Satzes „love you“ — also L, O, V, E, Y und U. Jeder Treffer gibt Punkte, das O zählt doppelt. Aus der Punktsumme ergibt sich ein Grundwert zwischen 5 und 110 Prozent, von dem die halbe Gesamtlänge beider Namen abgezogen wird. Kurze Namen mit vielen „Liebesbuchstaben“ schneiden also am besten ab. Zum Schluss wird das Ergebnis auf 0 bis 99 Prozent begrenzt — die vollen 100 Prozent vergibt dieser Rechner grundsätzlich nicht.

Genau darin liegt der Reiz für alle, die JavaScript lernen wollen: Das Ergebnis wirkt geheimnisvoll, ist aber vollständig vorhersagbar. Wer mag, ändert einfach die Punktwerte und hat seinen eigenen Rechner. Wenn ihr lieber echten Zufall wollt, schaut euch den Gedankenleser oder den Münzwurf an; wer raten statt rechnen möchte, findet beim Zahlenraten etwas.

Spiele Baujahr 2004 läuft in deinem Browser

Ein Spaß-Script: Die Prozentzahl entsteht allein aus den Buchstaben der eingetippten Namen.

So funktioniert das Script

Das Script hat drei Aufgaben: Es zählt in beiden Namen bestimmte Buchstaben, macht aus der Punktzahl eine Prozentzahl und schreibt das Ergebnis in die Ausgabefläche. Alles steckt in einer sofort ausgeführten Funktion — einer Funktion, die sich selbst startet und ihre Variablen für sich behält, damit sie anderen Scripts auf derselben Seite nicht ins Gehege kommt.

for (let i = 0; i < name.length; i++) {
  const buchstabe = name.substring(i, i + 1);
  if (buchstabe === "L") punkte += 2;
  if (buchstabe === "O") punkte += 2;
  ...
  if (buchstabe === "O") punkte += 1;
  if (buchstabe === "U") punkte += 3;
}

Das Herzstück ist diese Schleife in der Funktion liebespunkte(). Sie läuft mit dem Zähler i über jede Stelle des Namens, holt sich mit substring(i, i + 1) genau einen Buchstaben heraus und vergleicht ihn der Reihe nach mit den Buchstaben aus „LOVE YOU“. Passt er, wachsen die Punkte. Weil das O zweimal in der Liste steht (einmal mit 2, einmal mit 1 Punkt), bringt es zusammen 3 Punkte — im Original war das vermutlich ein kleiner Flüchtigkeitsfehler, aber er gehört inzwischen zum Rechner dazu, deshalb bleibt er drin.

Die Namen werden vorher mit toUpperCase() in Großbuchstaben umgewandelt. Nur so genügt ein Vergleich pro Buchstabe: „love“ und „LOVE“ ergeben dieselbe Punktzahl. Statt drei strenger Vergleiche mit === stand im Original das lockere ==; bei Zeichenketten macht das keinen Unterschied, die strenge Form ist aber die bessere Angewohnheit.

let prozent = 0;
if (punkte >  0) prozent =   5 - laenge;
if (punkte >  2) prozent =  10 - laenge;
...
if (punkte > 22) prozent = 110 - laenge;

Hier entsteht die Prozentzahl. Die Bedingungen haben absichtlich kein else: Alle zutreffenden Zeilen werden abgearbeitet, und die letzte davon gewinnt. Bei 19 Punkten laufen also alle Zeilen bis punkte > 18 durch, übrig bleibt der Grundwert 90. Von diesem Grundwert zieht das Script laenge ab — die halbe Summe beider Namenslängen. Lange Namen kosten damit Prozente.

if (prozent < 0) prozent = 0;
if (prozent > 99) prozent = 99;

Diese zwei Zeilen nennt man ein „Begrenzen“ (englisch clamping): Sehr lange Namen könnten sonst einen negativen Wert ergeben, sehr kurze über 100 landen. Das Ergebnis bleibt so immer zwischen 0 und 99 Prozent.

const wert = document.createElement("strong");
wert.textContent = prozent.toLocaleString("de-DE") + " %";
ausgabe.textContent = "";
ausgabe.append(name1 + " und " + name2 + " passen zu ", wert, " zusammen.");

Die Ausgabe erfolgt in die Fläche unter dem Knopf statt wie früher in ein Textfeld. createElement("strong") erzeugt ein Element für die hervorgehobene Zahl, toLocaleString("de-DE") schreibt bei krummen Werten ein deutsches Komma (aus 76.5 wird 76,5). Mit append() werden Text und Element aneinandergehängt. Der Umweg über textContent hat einen Grund: Die eingetippten Namen landen so garantiert als Text auf der Seite, auch wenn jemand spaßeshalber HTML-Zeichen eintippt.

Zum Anpassen: Die Punktwerte in liebespunkte() könnt ihr frei ändern — wer zum Beispiel deutsche Buchstaben zählen möchte, ersetzt die Liste durch H, E, R, Z. Über die Grundwerte 5 bis 110 stellt ihr ein, wie großzügig der Rechner urteilt, und die Obergrenze 99 dürft ihr natürlich auch auf 100 setzen.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Spiele