Mathe für Fortgeschrittene

      Mathe für Fortgeschrittene

      Also ich zähle mich ja eigendlich nicht zu den mathemathischen Volldeppen, aber trotzdem will ich auf Nummer sicher gehen.

      System : Punkte pro Stunde mit Gesamtkonto
      Ganz einfach eigendlich ... pro Stunde soll der User der Webseite eine bestimmt Anzahl an Punkten auf ein Konto gutgeschrieben bekommen.

      Rechnung :

      Quellcode

      1. if(Time()>($zuletztbesucht+3600)){
      2. $a=Time()-$zuletztbesucht;
      3. $a2=$a/3600;
      4. $z=0;
      5. while($z<$a2){
      6. $z++;
      7. }
      8. $z=$z-1;
      9. $b1=3600*$z;
      10. $sub=$a-$b1;
      11. $neuerpunktestand=($z*$punkteprostunde)+$alterpunktestand;
      12. }

      $zuletztbesucht : Hier ist der Timestamp vom letzten Seitenaufruf bzw. Besuch.
      Alle Variablennamen wurden von mir anders benannt ums euch leichter zu amchen das ganze zu verstehen... nicht das jetzt wieder jemand sagt das man so doch bitte keine variablen benennt ;)

      Danke schoma vorab
      Futjikato
      greetings,
      Moritz

      Follow me on twitter !
      php.net/floor könntest sicher gut gebrauchen ;)

      Was schreibst dann wieder in $zuletztbesucht rein? Aktuellen Timestamp - $sub? (Weil was is sonst wenn einer genau nach 1:59 raufschaut - dann kriegt er nur für eine Stunde Punkte und die restlichen 59 Minuten verfallen)
      Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".



      Computer- und Mediensicherheit - FH Hagenberg
      Hagenberger Kreis zur Förderung der digitalen Sicherheit
      Security Forum
      @ Kingo :
      Er soll die Punkte ja auch in abwesenheit bekommen ;)

      @ Kicked :
      ja ok das floor ersetzt mein while schleifen kram ganz gut :D
      Aber jo als $zuletztbesucht wird Time()-$sub gespeichert... denn das mit den 1:59h ist mir auch aufgefallen.

      Aber wenn das ( von der rechenart her ) so funktioniert denn bin ich ja zufrieden ;)
      Danke an alle

      Neuer Code :

      Quellcode

      1. if(Time()>($zuletztbesucht+3600)){
      2. $a=Time()-$zuletztbesucht;
      3. $a2=$a/3600;
      4. $z=floor($a2);
      5. $b1=3600*$z;
      6. $sub=$a-$b1;
      7. $NeuerPunktestand=($z*$PunkteproStunde)+$alterpunktestand;
      8. $zuletztbesucht=Time()-$sub ;
      9. }
      greetings,
      Moritz

      Follow me on twitter !
      Jo dürfte gut passen. Ich würd zwar speichern, wann er das nächste mal Punkte bekommt. Dadurch erspar ich mir bei jedem aufruf, dass er +3600 rechnen muss und hab des nur einmal. Aber das ist wohl außer bei Hochperformanceanwendungen außer Acht zu lassen ;)

      $sub könntest aber auch noch schöner Berechnen. Musst net wieder 3600*z rechnen und des dann abziehn, sondern einfach

      PHP-Quellcode

      1. $sub=$a%3600;
      .
      Nennt sich Modulo und liefert den Rest zurück.

      Schön würd des dann so aussehn:

      PHP-Quellcode

      1. if(Time()>$getpoints){
      2. $a=Time()-$getpoints;
      3. $z=ceil($a/3600);
      4. $sub=$a%3600;
      5. $NeuerPunktestand=($z*$PunkteproStunde)+$alterpunktestand;
      6. $getpoints=Time()-$sub+3600 ;
      7. }

      So hoffentlich jetzt net vertan ;)

      edit:
      bzw ganz kurz halt ;)

      PHP-Quellcode

      1. $time=Time();
      2. if($time>$time_get_next_points){
      3. $difference=$time-$time_get_next_points;
      4. $new_points=(ceil($difference/3600)*$points_per_hour)+$old_points;
      5. $getpoints=$time-($difference%3600)+3600 ;
      6. }

      Richtig schön wär jetzt noch die 3600 durch ne konstante zu ersetzen ;)

      Problem seh ich nur wenn derjenige länger net online is bleiben seine Punkte hängen, sprich in ner Übersicht würden imma nur die Punkte vom letzten Login angezeigt werden. Würd eher ein Script per CronJob (oder notfalls au im Skript abfragen- musst dann aba wieder aufpassen das net mehrere stunden keiner oben war) laufen lassen, dass bei jedem User stündlich die Punkte erhöht.

      Würd dann halt mit MySQL sehr schön gehn mit einem einzigen Befehl der alle User aktualisiert.

      PHP-Quellcode

      1. UPDATE users SET points = points + 1000
      Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".



      Computer- und Mediensicherheit - FH Hagenberg
      Hagenberger Kreis zur Förderung der digitalen Sicherheit
      Security Forum
      Ja also das mit dem CronJob hatte ich mir auch überlegt. Da ich aber mit den Dingern noch nie gearbeitet war mir das zu aufwenidig.
      Na ja aber schöner wäre es wegen der Übersicht, da hast natürlich recht.

      Hmm na ja kanns ja noch immer überarbeiten wenn allent fertig is ;)
      ( Wer es noch net erraten hat dem sei gesagt das dies hier ja für das Browsergame ist das ch mit 2 Leutz mache und da Fehlt noch einiges )

      Danke nochma für all eure Hinweise :)
      greetings,
      Moritz

      Follow me on twitter !
      Browsergame arbeite lieber mit einen Cronjob ;)

      Wenn das sehr viele Leute werden leidet die Performence des Servers erheblich brauchst ja nur in deinen Webinterface auf Crons und dan einen Befehl eingeben wie man unter Linux was ausführen tut. mehr nicht dan eingeben in welchen abständen und fertig.
      Wieso for Schleife?

      Den Wert, wer wieviele Punkte pro Stunde bekommt stehn doch sicher auch in der Datenbank.

      Wenns der gleiche Eintrag ist ganz einfach.

      UPDATE users SET points = points + (100*multiplikator)

      Falls es wo anderst steht kannst es immer noch mit an Subselect oder Join machen. Musst halt sagen wie du es brauchst ;)
      Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".



      Computer- und Mediensicherheit - FH Hagenberg
      Hagenberger Kreis zur Förderung der digitalen Sicherheit
      Security Forum