|
You last visited: Today at 14:41
Advertisement
Goldrush Online - Browsergame LERN Projekt
Discussion on Goldrush Online - Browsergame LERN Projekt within the Web Development forum part of the Coders Den category.
01/21/2019, 23:39
|
#1
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Goldrush Online - Browsergame LERN Projekt
Guten Tag Community
Ich habe vor kurzem wieder angefangen PHP zusammen mit MYSQL zu lernen.
Da ich immer Übermotiviert bin und ich mir immer zu VIEL vornehme, entstand dieses Hobby-Projekt.
ACHTUNG: Die Optik ist sehr sehr bescheiden!
ACHTUNG: Bitte verwendet eine Fake Email-Adresse und ein Passwort das ihr sonst nicht verwendet, weil ich nicht weiss wie Sicher mein Projekt ist!
Um was geht es in diesem Lern Projekt?
Hauptsächlich ist mein Ziel mit dem Spiel verschiedene Funktionen zu lernen.
Nebenbei ist es motivierent zu sehen was man alles so gelernt hat.
Im Spiel geht es um folgendes:
Ihr startet mit wenig Erde (Schürfmaterial) und Wasser.
Erde und Wasser sammelt ihr jede Minute. Die Menge ist abhängig von der Stufe der Produktion. (Wie in vielen bekannten Browsergames)
Zusätzlich besitzt ihr eine Waschanlage die Erde und Wasser benötigt zur Gold gewinnung. Wenn mal das Wasser oder die Erde ausgeht, erhaltet ihr logischerweise auch kein Gold und die Waschanlage wartet bis wieder genug Produziert wurde.
Das gewonnene Gold könnt ihr nun verkaufen um Geld zu erhalten. Mit dem Geld kauft man sich eine bessere Waschanlage und verbessert natürlich auch die Erde und Wasser Produktion damit die Waschanlage möglichst immer Gold findet.
Es gibt eine Rangliste. Je höher dein Vermögen -> desto besser ist dein Platz auf der Rangliste.
Was kommt noch rein?
Keine Ahnung, gerne dürft ihr Ideen miteinbringen.
Ich würde mich freuen wenn ihr mal reinschaut und ein Feedback hinterlässt.
Bedenkt bitte das ich ersht angefangen habe zu Lernen.
Herzlichen Dank und liebe Grüsse aus der Schweiz
|
|
|
01/22/2019, 00:12
|
#2
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Bevor ich auf deine Seite an sich eingehe würde ich gerne darauf eingehen das es eine Testseite ist und was du bedenken solltest!
Wenn du eine Seite live stellst egal ob test oder nicht muss/solltest du (!!) ein Impressum und eine Datenschutzerklärung haben, vorallem bei einer Testseite wie dieser wo du für Datenverluste nicht haften willst!
In wiefern man sich da absichern kann oder ob das überhaupt möglich ist kann ich dir nicht beantworten, dafür müsstest du jemanden fragen der mehr Ahnung davon hat (z.B. Anwal).
Nun zu deiner Seite:
Ein Projekt zum üben ist immer super, habe kurz reingeschaut und kann dir auf die schnelle folgende Tipps geben:
- Versteck Verzeichnisse => Bei dir kann man die Dateien sehen/downloaden unter www.<deine domain>.de/img/, wie z.B. deine psd Dateien für den Tank.
- Das anmelden fiel mir sehr schwer da ich ich kein Feedback bekommen habe ob/was falsch eingegeben wure!
- Https nutzen => Stichwort Sicherheit und DSGVO
- Wenn man die Seite lädt wird "oz" beim Gold erst nach paar Millisekunden angezeigt => Sofort anzeigen lassen
- Nicht sekündlich ein AJAX-Request durchführen => Du fragst sekündlich nach z.B. Zeit die abläuft. Das führt dazu das der Browser und somit der PC des Nutzers mehr ausgelastet ist aber auch das dein Server gerade bei großer Benutzeranzahl stark belastet wird. Frag es einmal ab und zähl es im Javascript dann runter (Dennoch bei Aktionen wie z.B. gold verkaufen im PHP prüfen ob der Benutzer das schon darf).
- Ist man eingeloggt hat man kein Link zur Rangliste mehr
- Ist man eingeloggt und klickt auf das Logo hat man wieder die Optionen zum einloggen und hat keine Optionen im Menü um zu seinen "Claim" zu kommen, Sachen zu kaufen etc.
- Keine Cdns nutzen => Aktuell nutzt du jquery über den cdn von google, downloade die lib lieber und binde sie lokal ein.
P.s. Wenn man auf epvp eine Homepage verlinkt muss diese mit einem Backlink zu epvp versehen sein.
|
|
|
01/22/2019, 00:21
|
#3
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Vielen Dank für deine Rückmeldung!
Ich versuche deine Tipps möglichst gut Umzusetzen, momentan muss ich mich aber zuerst über die Möglichkeiten informieren wie ich das bewerkstellige.
Ich danke dir auch das du mich darauf Aufmerksam gemacht hast wegen dem Impressum und den Datenschutzerklärung. Ich werde die schnellst möglich implementieren. https ist beantragt. Hoffe das geht flot.
EDIT:
HTTPS -> erledigt
Backlink zu Epvp -> erledigt
Button um von der Startseite zum Claim zurück gelangen hinzugefügt.
Anzeige fehler "oz" sollte behoben sein.
JQuery lokal eingebunden.
Datein im Webspace sollten nicht mehr ersichtlich sein.
Impressum & Datenschutzerklärung so halbes mit hilfe eines Generators erstellt. Da muss ich mich zuerst mehr Informieren.
Für die Ajax requests muss ich mich zuerst informieren.
Vielen Dank nochmals.
|
|
|
01/22/2019, 18:57
|
#4
|
elite*gold: 0
Join Date: Apr 2011
Posts: 363
Received Thanks: 167
|
A timer in javascript is easy, i made one for you.
How to implement:
When the user load the page, ask for current timestamps, create as many timers as you need.
Code:
/** Gets the current timer time in hh:mm:ss*/
function getCurrentTime(diff){
var sec = Math.round((diff/1000)) % 60;
var min = Math.floor(diff / 1000 / 60) % 60;
var hour = Math.floor(diff/1000/3600)%24
return `${hour < 10 ? '0'+hour : hour}:${min < 10 ? '0'+min : min}:${sec < 10 ? '0'+sec : sec}`
}
/** Add N minutes to current time
This function should be server side, for example (action.php?purchase='modifier1')
this would return a timestamp if the action sucess or error on fail
*/
function addNMinutesToCurrentTime(min){
return Date.now() + min*60*1000;
}
function Timer(){
this._initialize = ()=>{
this.events = {};
}
this._initialize();
/**
Event emmiter code, useful to addEventListeners to objects
######################################################################################
# BEGIN EVENT EMMITER CODE #
######################################################################################
*/
this.on = (event, listener) =>{
if (typeof this.events[event] !== 'object') {
this.events[event] = [];
}
this.events[event].push(listener);
return () => this.removeListener(event, listener);
}
this.removeListener = (event, listener) =>{
if (typeof this.events[event] === 'object') {
const idx = this.events[event].indexOf(listener);
if (idx > -1) {
this.events[event].splice(idx, 1);
}
}
}
this.emit = (event, ...args) => {
if (typeof this.events[event] === 'object') {
this.events[event].forEach(listener => listener.apply(this, args));
}
}
/**
######################################################################################
# END EVENT EMMITER CODE #
######################################################################################
*/
/**
Starts timer with next timestamp, emit events timerStart/timerTick/timerEnd
@Events
timerStart: Event that is fired when the startTimer function is called the first time
timerTick: Event that is fired every second when there is timeleft
timerEnd: Event that is fired when the timer value is 00:00:00
*/
this.startTimer = (nextTime)=>{
if(this.started) return false;
this.emit("timerStart");
this.started = true;
this.interval = setInterval(()=>{
var diff = nextTime - Date.now();
if(diff < 0) {
clearInterval(this.interval);
this.started = false;
this.emit("timerEnd");
return;
}
var currentTime = getCurrentTime(diff);
this.emit("timerTick",currentTime);
},1000);
return true;
}
/**
Stop timer, remove interval, fire event timerStop
@Events
timerStop: Event that is fired when the stopTimer function is called
*/
this.stopTimer = ()=>{
if(!this.started) return;
clearInterval(this.interval);
this.started = false;
this.emit("timerStop");
}
}
/** Example ussage */
/*
var timer1 = new Timer();
timer1.on("timerStart",()=>{console.log("started")});
timer1.on("timerStop",()=>{console.log("stopped")});
timer1.on("timerEnd",()=>{console.log("finished")});
timer1.on("timerTick",(time)=>{console.log(time)});
timer1.startTimer(getServerTimeStamp());
getServerTimeStamp -> function to retrieve time stamp from server when page loads
*/
|
|
|
01/22/2019, 21:34
|
#5
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Quote:
Originally Posted by elmarcia
A timer in javascript is easy, i made one for you.
How to implement:
When the user load the page, ask for current timestamps, create as many timers as you need.
Code:
/** Gets the current timer time in hh:mm:ss*/
function getCurrentTime(diff){
var sec = Math.round((diff/1000)) % 60;
var min = Math.floor(diff / 1000 / 60) % 60;
var hour = Math.floor(diff/1000/3600)%24
return `${hour < 10 ? '0'+hour : hour}:${min < 10 ? '0'+min : min}:${sec < 10 ? '0'+sec : sec}`
}
/** Add N minutes to current time
This function should be server side, for example (action.php?purchase='modifier1')
this would return a timestamp if the action sucess or error on fail
*/
function addNMinutesToCurrentTime(min){
return Date.now() + min*60*1000;
}
function Timer(){
this._initialize = ()=>{
this.events = {};
}
this._initialize();
/**
Event emmiter code, useful to addEventListeners to objects
######################################################################################
# BEGIN EVENT EMMITER CODE #
######################################################################################
*/
this.on = (event, listener) =>{
if (typeof this.events[event] !== 'object') {
this.events[event] = [];
}
this.events[event].push(listener);
return () => this.removeListener(event, listener);
}
this.removeListener = (event, listener) =>{
if (typeof this.events[event] === 'object') {
const idx = this.events[event].indexOf(listener);
if (idx > -1) {
this.events[event].splice(idx, 1);
}
}
}
this.emit = (event, ...args) => {
if (typeof this.events[event] === 'object') {
this.events[event].forEach(listener => listener.apply(this, args));
}
}
/**
######################################################################################
# END EVENT EMMITER CODE #
######################################################################################
*/
/**
Starts timer with next timestamp, emit events timerStart/timerTick/timerEnd
@Events
timerStart: Event that is fired when the startTimer function is called the first time
timerTick: Event that is fired every second when there is timeleft
timerEnd: Event that is fired when the timer value is 00:00:00
*/
this.startTimer = (nextTime)=>{
if(this.started) return false;
this.emit("timerStart");
this.started = true;
this.interval = setInterval(()=>{
var diff = nextTime - Date.now();
if(diff < 0) {
clearInterval(this.interval);
this.started = false;
this.emit("timerEnd");
return;
}
var currentTime = getCurrentTime(diff);
this.emit("timerTick",currentTime);
},1000);
return true;
}
/**
Stop timer, remove interval, fire event timerStop
@Events
timerStop: Event that is fired when the stopTimer function is called
*/
this.stopTimer = ()=>{
if(!this.started) return;
clearInterval(this.interval);
this.started = false;
this.emit("timerStop");
}
}
/** Example ussage */
/*
var timer1 = new Timer();
timer1.on("timerStart",()=>{console.log("started")});
timer1.on("timerStop",()=>{console.log("stopped")});
timer1.on("timerEnd",()=>{console.log("finished")});
timer1.on("timerTick",(time)=>{console.log(time)});
timer1.startTimer(getServerTimeStamp());
getServerTimeStamp -> function to retrieve time stamp from server when page loads
*/
|
Thank you for your effort.
I'll take a closer look and try to use it as well as I can.
greetings from Switzerland
|
|
|
01/23/2019, 10:54
|
#6
|
elite*gold: 12
Join Date: Feb 2014
Posts: 877
Received Thanks: 272
|
Ich sehe rechts die "Login" und "E-Mail Vergessen" box im angemeldeten Status.
|
|
|
01/24/2019, 17:08
|
#7
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Quote:
Originally Posted by Guron
Ich sehe rechts die "Login" und "E-Mail Vergessen" box im angemeldeten Status.
|
Hab ich nun geändert. Wenn man angemeldet ist, steht nun dort eine Navigationsbox mit den Links zum Claim, Shop usw.
Danke für dein Feedback!
Liebe Grüsse
|
|
|
01/24/2019, 17:23
|
#8
|
elite*gold: 74
Join Date: Aug 2017
Posts: 284
Received Thanks: 151
|
Quote:
Originally Posted by Zaiq
Hab ich nun geändert. Wenn man angemeldet ist, steht nun dort eine Navigationsbox mit den Links zum Claim, Shop usw.
|
Vielleicht wäre es jetzt klug, wenn man die Navigation immer an der selben Stelle hat? Jetzt ist es ja so, dass die Ansicht der Rangliste die Links zum Claim, Shop, etc. in der rechten Sidebar hat, wenn man dann allerdings im eigentlichen Spiel ist, wird es oben in Tabs angeordnet. Das ist auch ein wenig verwirrend.
Darf ich fragen, wie die Werte für Produktion und Verbrauch zustande kommen? Es scheint so, als ließe sich das nicht wirklich ausgleichen. Entweder produzieren Bagger und Wasserpumpe weniger, als die Waschanlage verbrauchen kann, oder es wird übeproduziert. Wobei hier die neue Lagerhalle ggf. Abhilfe schaffen könnte. c:
|
|
|
01/24/2019, 17:27
|
#9
|
elite*gold: 38
Join Date: Sep 2011
Posts: 277
Received Thanks: 42
|
Das Lager hat man Geld verschlungen aber es wurde nicht geupgraded
Cooles Projekt! Könntest du mal den Code zeigen?
|
|
|
01/24/2019, 17:34
|
#10
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Quote:
Originally Posted by theyam
Das Lager hat man Geld verschlungen aber es wurde nicht geupgraded
Cooles Projekt! Könntest du mal den Code zeigen?
|
Es war ein Fehler in der Datenbank. Danke das du mich darauf aufmerksam gemacht hast!
Ich hab dir das Geld wieder auf den Account geladen.
Quote:
Originally Posted by type.
Vielleicht wäre es jetzt klug, wenn man die Navigation immer an der selben Stelle hat? Jetzt ist es ja so, dass die Ansicht der Rangliste die Links zum Claim, Shop, etc. in der rechten Sidebar hat, wenn man dann allerdings im eigentlichen Spiel ist, wird es oben in Tabs angeordnet. Das ist auch ein wenig verwirrend.
Darf ich fragen, wie die Werte für Produktion und Verbrauch zustande kommen? Es scheint so, als ließe sich das nicht wirklich ausgleichen. Entweder produzieren Bagger und Wasserpumpe weniger, als die Waschanlage verbrauchen kann, oder es wird übeproduziert. Wobei hier die neue Lagerhalle ggf. Abhilfe schaffen könnte. c:
|
Das mit der Navigation werde ich 100%ig noch ausbessern. Ich stimme dir voll und ganz zu, es ist verwirrend.
Das mit der Produktion ist noch so eine Sache. Ich glaube ich könnte das noch vieles besser machen. Im Moment ist der Gedanke dahinter so:
Die Pumpe und der Bagger produzieren soviel bis das Limit erreicht ist. Das Limit wird mit der Lagerhalle erhöht.
Wenn die Wanschanlage weniger verbraucht ist jetzt möglich die Ressourcen zusammen zu sparen. Sobald die Waschanlage mehr benötigt weder Produziert wird, greift es auf die gelagerten Ressourcen zurück.
Die Idee dahinter war, dass die Möglichkeit besteht die Dauer bis zur bessere Pumpe und Bagger überbrückbar ist. Jedoch ist das bestimmt nicht die eleganteste Methode.
|
|
|
01/24/2019, 17:52
|
#11
|
elite*gold: 211
Join Date: Oct 2017
Posts: 648
Received Thanks: 156
|
Das fehlende Feedback bei Registrierung und Login ist wirklich etwas störend.
Bei mir kommt beim Signup in der Adresszeile ständig:
Code:
https://www.goldrush-online.de/signup.php?signup=invalid
Kein Plan, was ich falsch mache. ^^
Edit: Und nein, ich habe keine Sonderzeichen im Namen.
|
|
|
01/24/2019, 17:58
|
#12
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Quote:
Originally Posted by chr1zzLy
Das fehlende Feedback bei Registrierung und Login ist wirklich etwas störend.
Bei mir kommt beim Signup in der Adresszeile ständig:
Code:
https://www.goldrush-online.de/signup.php?signup=invalid
Kein Plan, was ich falsch mache. ^^
Edit: Und nein, ich habe keine Sonderzeichen im Namen. 
|
Kannst du es nochmals versuchen  ? Habe etwas geändert.
|
|
|
01/24/2019, 18:01
|
#13
|
elite*gold: 211
Join Date: Oct 2017
Posts: 648
Received Thanks: 156
|
Quote:
Originally Posted by Zaiq
Kannst du es nochmals versuchen  ? Habe etwas geändert.
|
Funktioniert leider immer noch net. Habe auch mal versucht mich einzuloggen mit den Daten, die ich bei der Registrierung angegeben haben, aber dort bekomme ich ebenfalls: "?login=error".
|
|
|
01/24/2019, 18:32
|
#14
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by Zaiq
Kannst du es nochmals versuchen  ? Habe etwas geändert.
|
Quote:
Originally Posted by chr1zzLy
Funktioniert leider immer noch net. Habe auch mal versucht mich einzuloggen mit den Daten, die ich bei der Registrierung angegeben haben, aber dort bekomme ich ebenfalls: "?login=error". 
|
Das ist das was ich auch meinte, es ist nicht ersichtlich was genau falsch gelaufen ist.
Wenn du im die Eingaben prüfst und merkst das was falsch gelaufen ist dann gibt auch eine Meldung aus was falsch gelaufen ist (optimalerweise wird auch das passende Feld markiert (z.b. dadurch das das Input rot umrandet ist).
Ebenso wäre es super das wenn etwas falsch eingetippt wurde, das die Werte die man eingetippt hatte (bis auf Fehlerhafte/das Passwort) auch wieder in den Eingabefeldern stehen.
|
|
|
01/24/2019, 19:01
|
#15
|
elite*gold: 80
Join Date: Oct 2012
Posts: 191
Received Thanks: 25
|
Quote:
Originally Posted by .ƒaℓsє.
Das ist das was ich auch meinte, es ist nicht ersichtlich was genau falsch gelaufen ist.
Wenn du im die Eingaben prüfst und merkst das was falsch gelaufen ist dann gibt auch eine Meldung aus was falsch gelaufen ist (optimalerweise wird auch das passende Feld markiert (z.b. dadurch das das Input rot umrandet ist).
Ebenso wäre es super das wenn etwas falsch eingetippt wurde, das die Werte die man eingetippt hatte (bis auf Fehlerhafte/das Passwort) auch wieder in den Eingabefeldern stehen.
|
Ich habe jetzt provisorische Fehlermeldungen eingebaut.
Leider bin ich immernoch beschäftigt mit der Javascript ausgabe etc. Damit die Performance besser wird.
Liebe Grüsse
|
|
|
Similar Threads
|
If yuo want lern more abaut binary
07/14/2009 - CO2 Private Server - 0 Replies
Ok if yuo need some info abaut binary yuo can go to epvpers/eudemuns online/eudemuns online private server hosting. Here are a lot of info abaut binary of eo private serve,but info yuo can using in co binary
|
All times are GMT +1. The time now is 14:41.
|
|