PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauche hilfe


ZeitZumFaken
13.07.2006, 23:45:03
Hallo,
ich bin noch ein richtiger PHP-n00b^^ und habe mir ein Brwosergame als Ziel gesetzt.
Dabei sollte man auch div. "Rohstoffe" bekommen, also pro Stunde vl. 3 oder so, nur mein Problem ist ich weiß nicht wirklich wie ich das bewerkstelligen soll (dachte es könnte möglicher Weise über timestamp funktionieren, ka)!

Hat jemand eine Idee??


Freue mich auf Antworten!

MfG
ZeitZumFaken

Serp
14.07.2006, 00:30:28
Warum wollen alle mit einem Browsergame anfangen, PHP zu lernen? Steck dir doch erst mal erreichbare Ziele... Ein Browsergame ist so komplex, das kannst du nicht einfach mal so zum Einstieg machen. Denn wenn es vernünftig werden soll, wirst du hier auf OOP, Templates, durchdachte Sicherheitsmechanismen und vieles mehr zurückgreifen müssen. Das ist nichts, das man mal so nebenbei lernen kann.
Selbst wenn du es schaffen solltest, mit deinen jetzigen Kenntnissen so ein Spiel hinzukriegen: Du wirst relativ bald merken, dass da gewaltige Probleme mit dem Code auftreten. Allerdings wirst du deinen Code sehr bald nicht mehr verstehen, weil du nie gelernt hast, wie man so was vernünftig strukturiert. Du wirst also zu dem Schluss kommen, dass du alles noch mal schreiben musst. So was frustriert dich wie Sau...

Also, mein Vorschlag: Lern erst mal vernünftig PHP. Setz dich an einige kleinere Projekte (die können auch Spaß machen) und versuch, diese zu meistern. Eigne dir dann weiterführende Kenntnisse zu. Irgendwann wirst du dann das Gefühl haben, dass du durchaus in der Lage bist, auch ein Projekt wie ein Browsergame zu meistern. (Und dann stellt sich diese Frage hier für dich auch nicht mehr, denn dann weißt du, wie man so was macht... ;))

ZeitZumFaken
14.07.2006, 01:04:12
Warum wollen alle mit einem Browsergame anfangen, PHP zu lernen? Steck dir doch erst mal erreichbare Ziele... Ein Browsergame ist so komplex, das kannst du nicht einfach mal so zum Einstieg machen. Denn wenn es vernünftig werden soll, wirst du hier auf OOP, Templates, durchdachte Sicherheitsmechanismen und vieles mehr zurückgreifen müssen. Das ist nichts, das man mal so nebenbei lernen kann.
Selbst wenn du es schaffen solltest, mit deinen jetzigen Kenntnissen so ein Spiel hinzukriegen: Du wirst relativ bald merken, dass da gewaltige Probleme mit dem Code auftreten. Allerdings wirst du deinen Code sehr bald nicht mehr verstehen, weil du nie gelernt hast, wie man so was vernünftig strukturiert. Du wirst also zu dem Schluss kommen, dass du alles noch mal schreiben musst. So was frustriert dich wie Sau...

Also, mein Vorschlag: Lern erst mal vernünftig PHP. Setz dich an einige kleinere Projekte (die können auch Spaß machen) und versuch, diese zu meistern. Eigne dir dann weiterführende Kenntnisse zu. Irgendwann wirst du dann das Gefühl haben, dass du durchaus in der Lage bist, auch ein Projekt wie ein Browsergame zu meistern. (Und dann stellt sich diese Frage hier für dich auch nicht mehr, denn dann weißt du, wie man so was macht... ;))


Ich akzeptiere deine Meinung jedoch wird es nichts an meinem Beschluss ändern (war schon immer ein alter Dickkopf ;-))

Also wenn jemand eine Idee hat bitte ich vielmals diese mir mitzuteilen!!!

THX

edit:


Selbst wenn du es schaffen solltest, mit deinen jetzigen Kenntnissen so ein Spiel hinzukriegen


Ich lerne ja täglich dazu :-)

2xEDIT: ach ich verbesser immer gerne alles^^

z0iD
14.07.2006, 02:05:09
Serp, wer nicht hören will muss selbst fehler machen, was solls also ;)

ZeitZumFaken, schreib doch einfach nen "oberflächenfake" ...
nein mal ehrlich, das mit dem timestamp ist ne gute idee um das zu realisieren. den zeitstempel kannst Du Dir mit time() ausgeben lassen.

allerdings hat Serp absolut recht damit dass das für den einstieg ne zu große nummer ist. ich würde Dir dazu raten Dir erstmal kenntnisse bei http://php.net bzw. hier im http://selfphp.de anzueignen bevor Du mit der ersten zeile code loslegst!

ps: was leute studieren, kann man wohl nicht in fünf minuten lernen, oder?

ZeitZumFaken
14.07.2006, 02:17:23
Der Code mit dem Timestep ist mir bekannt ;-)
Aber wie kann ich den so gestalten, damit ich immer nur bestimmte Werte, also z.b. "Rohstoffe" /h bekomme??

Ich habs schon mit "herrumrechnen" versucht.......erfolglos...desswegen dachte ich hier hat jemand einen Code....

Ahja und php.net habe ich als Startseite^^ überdies hinaus beschäftige ich mich täglich damit um mich zu verbessern.

conmunich
14.07.2006, 08:35:28
desswegen dachte ich hier hat jemand einen Code....

ich dachte du willst das selbst proggen?

also ich muss dazu sagen, ich mache php seit 4 jahren und habe mich erst jetzt getraut, ein richtiges cms zu coden. was mir aber immer geholfen hat, war selfphp studieren und nochmal studieren und ein drittes mal studieren ;)

und auch das durchsehen von existierendem code hilft manchmal kleine wunder zu vollbringen. also lade dir irgendwo ein browsergame runter, und schau es dir genau an. dann bekommst du ein gefühl dafür, wie komplex soetwas sein kann.

php.net hat mir ehrlich gesagt erst geholfen, als ich die grundlagen bereits beherrscht habe. da is ja wikipedia noch hilfreicher als startseite...

trotzdem, jeder von uns hat mal klein angefangen und ebensfalls jeder von uns hat gewisse ziele. deshalb wünsch ihr dir viel erfolg bei deinem browsergame.

mfg conmunich

Quago
14.07.2006, 09:49:48
willst du das die rohstoffe nur dann gegeben werden wenn der jenige online ist oder wie bei ogame?????

ansonsten kannst du dir die login daten und logout daten auch zu nutze machen jedes mal wenn sich einer ausloggt bekommt er dann seine rohstoffe nachgetragen die er für so und so viele spielminuten erhält!

führt allerdings dazu das man sie auch erst beim logout bekommt und nicht wärend der session!!!!

ps:
mit hohen zielen kann man tief fallen auf dem boden bleiben und abwägen ob du nicht evt dir doch kleinere brötchen backen willst die du dann hinterher zu einem großen zusammenfassen kannst!!!
so kannst du einzelne elemente basteln für später....
trotz allem viel erfolg!

Serp
14.07.2006, 11:51:08
Die Rohstoffe würd ich so regeln, dass bei jedem Seitenaufruf überprüft wird, ob genug Zeit verstrichen ist, dass neue Rohstoffe gutgeschrieben werden müssen. Und php.net taugt zum Lernen für den Anfang wirklich nix. Als erstes empfehle ich ein gutes Tutorial, dann verschiedene Artikel, die einen bestimmten Aspekt weiterführend beleuchten.
Und ansonsten eben hauptsächlich selber proggen und ausprobieren. Dabei kann man dann auch php.net als Referenz nutzen.

ZeitZumFaken
14.07.2006, 14:03:51
Die "Rohstoffe" sollte man wie bei OGame bekommen, also immer auch wenn man Offline ist.
Hat vielleicht jemand einen Code mit dem ich das bewerkstelligen kann??

Quago
14.07.2006, 14:08:49
da muss ich passen...
aber du kannst dir ja eine schleife einbauen die immer abläuft und dann an alle user deine $rohstoffe ++ machen aber wie das musst du selber nachlesen dafür habe ich nicht die Zeit!
viel erfolg...

KTB
14.07.2006, 14:14:18
Einen fertigen Code wirste da wohl von niemandem bekommen. Im Prinzip ist es auch nicht schwer. Du musst halt irgendwo definieren wieviel Rohstoffe derjenige (z.B.) pro Sekunde bekommt. Dann kannst du über einen Timestamp immer zurückrechnen wieviel Zeit vergangen ist und dementsprechend die Rohstoffe verteilen und wieder einen neuen Timestamp setzen.

ZeitZumFaken
14.07.2006, 14:21:05
Hm....ja...könnte so irgendwie funktionieren.....
Werde mich gleich mal versuchen.
Danke für die Antwort!

edit:

Würde mich dennoch über weitere Vorschläge etc. freun!

chmaass
14.07.2006, 14:46:23
Also das Ziel in Ehren, aber ich bin der Überzeugung, dass man ein gutes Browsergame nicht in reinem PHP bewerkstelligen kann. Weder Du, noch jemand anderes. Denn gute Browsergames haben die Eigenart, einen Programmkern zu haben, der im Prinzip permanen läuft, und z.B. den Ressourcenzuwachs eines jeden Spielers errechnet. Und das ist mit Sicherheit kein PHP-Script, sondern ein Java- oder C-Programm. Denn ein PHP-Script müsste man ja quasi jede Sekunde wieder anstossen, es läuft ja nicht "unendlich" weiter. Sehe ich doch richtig, oder?

KTB
14.07.2006, 15:23:57
Nein muss es nicht. Es läuft dann so wie ich beschreiben habe.

ZeitZumFaken
14.07.2006, 16:27:44
Ich verstehe auch nicht ganz warum man es nicht mit PHP lösen könnte.....

Serp
14.07.2006, 23:07:52
Das Problem ist wohl eher die Unübersichtlichkeit des Codes und der Ressourcenhunger von PHP...

ZeitZumFaken
14.07.2006, 23:35:11
Hab eine kleine Frage; wie kann ich bewerkstelliges, dass alle zehn Sekunden ein bestimmter Wert um eins erhöht wird??

feuervogel
15.07.2006, 09:41:05
Hab eine kleine Frage; wie kann ich bewerkstelliges, dass alle zehn Sekunden ein bestimmter Wert um eins erhöht wird??

mit nem cronjob der alle 10 sekunden ausgeführt wird...oder du machst das in abhängigkeit von time(), das erhöht sich jede sekunde um 1, das heißt, du musst dann in abhängigkeit davon was basteln...

xabbuh
15.07.2006, 11:20:46
Das kleinste Zeitintervall eines Cronjobs ist eine Minute, somit kommt Cron dafür nicht in Frage.
Ratsamer wäre es bei jedem Seitenaufruf die Differenz zum letzten Aufruf in Sekunden zu ermitteln und dementsprechend häufig eine bestimmte Aktion ausführen.

ZeitZumFaken
15.07.2006, 12:14:30
Die Differenz habe ich schon ermittelt doch bis jetzt erhöht sich der Wert pro Sekunde immer um eins -> das ist zu viel!
Hier mal mein Code:

<?

$time = time();
$name = "test";


$datei = fopen("$name.txt","w");
fwrite($datei, "{$time}\r\n");
fclose($datei);

?>

Der hier oben speichert erstmal die Zeit.


Und der hier ließt es aus und macht die Differenz:

<?

$time = time();

$datei = fopen("test.txt","r");
rewind($datei);
$stamp = fgets($datei, 1000);

$ergebnis = $time - $stamp;

echo "{$ergebnis}";


?>

Hat jetzt jemand eine Idee, was ich einbaun muss, damit z.b. nur alle 10 Sekunden der Wert um eins erhöht wird??

Serp
15.07.2006, 13:30:07
Vielleicht... $ergebnis durch 10 teilen? ;)

Allerdings solltest du dir dann überlegen, welcher neue Wert in die Datei gespeichert wird. Sonst kriegst du eventuell Differenzen auf Grund der Rundungsfehler. Ich würde also nicht den neuen Timestamp, sondern altern Timestamp + 10 * $ergebnis reinschreiben.

ZeitZumFaken
15.07.2006, 20:03:44
Diese Idee hatte ich bereits ;-)
Nur wie bekomme ich dann diese Nachkommastellen weg??

feuervogel
15.07.2006, 20:19:06
Diese Idee hatte ich bereits ;-)
Nur wie bekomme ich dann diese Nachkommastellen weg??

durch abrunden oder (durch modulo und subtraktion)

MatMel
15.07.2006, 20:19:12
Hallo

Ich habe jetz teilweise Sachen überlesen, aber ich schreibe trotzdem mal wie du es machen kannst:

In der Datenbank in der das alles gespeichert wird sollte es die zwei Spalten geben:
1) rohstoff_vorhanden
2) rohstoff_zuletztaktualisiert

Dann schreibst du dir am besten ne Funktion, die du dann bei jeder Seite, die aufgerufen wird ganz am Anfang ausführst.
Die Funktion sollte den in rohstoff_zuletztaktualisiert vorhandenen Timestamp vom aktuellen abziehen, dass ganze in Minuten (Stunden, Tage, ...) umwandeln, runden und dann mit der Anzahl der Einheiten pro Zeit multiplizieren.
Diesen Wert dann zum Inhalt von rohstoff_vorhanden dazuzählen.
Schließlich den aktuellen Timestamp und die neue Anzahl an Einheiten Rohstoff in die Datenbank schreiben.

Anders geht es, wenn du nicht dauernd Cronjobs ausführen und damit deinen Server killen willst nicht.

Gruß,
Matze

PS: Du wirst nie eine Browsergame fertigstellen :P

ZeitZumFaken
15.07.2006, 20:33:25
Das mit den Nachkommastellen hat sich erübrigt, ich habs einfach gerundet, oder gibts da was Besseres??

Zu MatMels Post Sriptum:
Ich weiß, dass keiner in diesem Forum daran glaubt und es ist mir (sry wegen dem Ausdruck) SCHEIß egal.........

feuervogel
15.07.2006, 21:04:11
Das mit den Nachkommastellen hat sich erübrigt, ich habs einfach gerundet, oder gibts da was Besseres??


ja, abrunden.