Idee für ein PHP Programm?

1 Antwort

Also. Erstmal, das wohl einfachste wär der besagte "Taschenrechner", was jedoch mit Benutzeraccount eher Overkill wär.

Mir würde am einfachsten dieser Umrechner für Rezept-Mengen ins Auge fallen. Schlicht, weil du hier mit Logik glänzen kannst. Und nein. Es ist nicht einfach "Menge durch Grundanzahl mal gewünschter Anzahl" ... Weil manche Sachen sind eben irrelevant für die herzustellende Menge. ("1 EL Öl" zum Einreiben der Pfanne ... wird nicht automatisch zu "4 EL Öl" XD Prinzip verstanden denk ich :D)

Accounts wären hier hilfreich, um favoriten anlegen zu können und selbst rezepte einbauen zu können. If-Else kriegt man damit recht fix auch hin. Schwierig wirds dann bei Schleifen. :D

---

Also meine Idee wär jedoch durchaus einfach ... ein simples Mathe-Browsergame ... Wo man mit Formeln, die aus angezeigten Zahlen und Rechenarten/Zeichen geformt werden müssten und dann die ergebnisse jeweils gegeneinander antreten. Einfaches Beispiel: Gegebene zeichen: 1, 2, 3, +, x, (, ), wobei zahlen nur 1 mal eingesetzt werden dürfen, zeichen jedoch beliebig oft. Aus den gegebenen Zeichen könnte man nun (2+1)x3 machen, oder aber auch 12x3, wobei natürlich 12*3 durchaus gewonnen hätte :D

Ist nur so eine idee ;)

ImmerVergeben 
Fragesteller
 18.12.2022, 20:40

Könntest du deine Idee bissien weiter ausführen wie du die meinst? Die hört sich schon gut an

0
EvilMind  18.12.2022, 23:00
@ImmerVergeben

Grundlegend gibst du zufällige Kombinationen an Zahlen und Rechenoperationen an. Zum Beispiel:

$availableNumbers = "0123456789";

$amountNumbers = mt_rand(2,7); // mindestens 2
$choosenNumbers = "";

while (strlen($choosenNumbers) < $amountNumbers) {
  $startIndex = mt_rand(0, strlen($availableNumbers) - 1);
  $char = substr($availableNumbers, $startIndex, 1);
  if (!strstr($choosenNumbers, $char)) {
    $choosenNumbers .= $char;
  }
}

$availableChars = "x+-*/";
  // x steht als platzhalter für ( und ) zusammen, um zu
  // verhindern, dass nur eine der klammern bereitgestellt
  // werden würde

$amountChars = mt_rand(1, 5);
$choosenChars = "";

while (strlen($choosenChars) < $amountChars) {
  $startIndex = mt_rand(0, strlen($availableChars) - 1);
  $char = substr($availableChars, $startIndex, 1);
  if (!strstr($choosenChars, $char)) {
    $choosenChars .= $char;
  }
}
$choosenChars = str_replace("x", "()", $choosenChars);
  // ersetze x mit ()

$available = join(", ", str_split($choosenNumbers)) + ", " + join(", ", str_split($choosenChars));

echo "Schreibe eine Formel, wobei du jeweils nur folgende Zahlen (jeweils 1 mal) nutzen darfst. Operatoren (wie klammern, plus, minus usw.) darfst du mehrfach nutzen.<br /><br />${available}";

Nun kann der Nutzer halt irgendwas aus den Zeichen schreiben. Dabei prüfst du beim Absenden, ob die angegebene Formel tatsächlich die erlaubten zeichen nutzt, keine doppelten zahlen genutzt werden und keine zusätzlichen Rechenoperationen mitgenutzt wurden. Wobei Rechenoperationen mehrfachgenutzt werden dürfen. (Ich denke, das kriegst du schon hin.)

Nun evaluierst du die Operation mit einem schlichten eval und fertig. (Da nur bestimmte zeichen erlaubt sind, braucht man sich darum eher wenig sorgen machen, da jedes andere zeichen, was gefährlich sein könnte, schlicht nicht zugelassen wird. Es gehen also NUR mathe-funktionen.

Vergiss nicht, einen Fehler-Abfang dazuzupacken, da 1234/ eher einen fehler verursacht als ein verständliches ergebnis.

Es wäre wohl auch clever, vorher festzulegen, dass mindestens eine Rechenoperation genutzt wird, sonst jemand "98" schreibt, was bei "9*8" einen maximalwert von 72 bedeuten würde und derjenige, der einfach "98" schreibt, mit 98 dann gewonnen hätte. Also mindestens 1 rechenoperation.

Nun treten 2 Spieler gegeneinander an, welche die selben Zahlen und Rechenoperationen vorgesetzt bekommen. Messe vorzugsweise die Zeit, wie lange vom Anzeigen der möglichen Zeichen bis zum Absenden der Formel vom Spieler verstrichen ist, um bei "Unentschieden" anhand der Zeit einen Gewinner wählen zu können.

Mach auch eine Ausnahme dazu, falls beide exakt identisch lange gebraucht haben und tatsächlich ein Unentschieden entstehen könnte.

Der Ablauf wäre dann (für die Spieler) so:

Ein Spieler kann ein "Duell" starten und kriegt dann direkt die möglichen zeichen angezeigt. Er kann dann direkt eine Formel schreiben und abschicken. Diese wird dann gespeichert und in einer Tabelle für andere Spieler (außer ihm selbst) aufgelistet, ohne die verfügbaren Zeichen sowie das Ergebnis des ersten Spielers anzuzeigen. Wählt ein anderer Spieler einen Eintrag aus der Tabelle, werden für diesen die für dieses Duell gültigen möglichen zeichen angezeigt und er kann eine Formel schreiben. Somit hat man dann für beide Spieler die Ergebnisse SOWIE die Zeiten unabhängig voneinander. Danach erfolgt die Auswertung und die Ergebnisse der Formeln werden untereinander verglichen und der mit dem höheren Wert wird als Sieger erkoren. Man kann dann noch ein PN-Ähnliches System als Benachrichtigungs-System einbauen, um dem gewinner eine Info zukommen zu lassen.

Ich hab dir quasi oben schon die Grundformeln geliefert. Ich werd dir natürlich nicht allen Ablauf genaustens erklären, aber soweit, dass du das Spielprinzip verstehst :D Es ist im grunde einfach, und könnte lustig werden. Du kannst später gern noch weitere Funktionen einbauen ähnlich der "Klammern". Als beispiel, wenn du "hoch" (Also 4 hoch 3) nutzen willst, kannst du "^" als weiteren Operator einbauen, welches du dann vor dem Eval schlicht in "**" umwandelst. Weil 4**5 = 1024 in PHP (Was quasi 4 hoch 5 bedeutet). Dürfte dann interessant werden :D

Viel Erfolg mit deinem Projekt.

1
ImmerVergeben 
Fragesteller
 18.12.2022, 23:16
@EvilMind

Wow danke.

was ich nicht verstehe ist, dass man theoretisch die größte Zahlen immer nehmen kann und so man immer gewinnen würde

0
EvilMind  31.12.2022, 00:53
@ImmerVergeben

Das ist der Clou hinter dieser Idee. Es soll ja einen Lerneffekt bereitstellen. Wenn die zufällig angehäuften Zahlen-Zeichen-Kombis auch komplexe Rechenschritte erlaubt, dann kann man durchaus auch erstmal grübeln, bevor man auf das höchste ergebnis kommt. Wenn du clever bist, bau einen Timer mit ein, wie lange man zeit hat, eine rechnung dafür zu schreiben. 30 Sekunden können lang, aber auch kurz sein :D

0