| |
 |
|
|
|
 |
|
 |
| |
17.02.2008, 22:41
|
#1 (permalink)
|
|
Benutzer
Registriert seit: 30.01.2008
Beiträge: 75
|
Fragen zum Browsergame-Tutorial[Teil 2]
Wenn ihr Fragen zum Browsergame-Tutorial Teil 2 habt, dann ist das der richtige Thread für euch.
|
|
|
|
|
04.08.2008, 14:57
|
#2 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 04.08.2008
Beiträge: 129
|
Hi
Is ja schon ganz gut, finde ich es blöd ein Array anzulegen, wo die Werte hinterlegt sind um wieviel sich die Verteidigung steigert. Mit einer kleinen Berechnung, bei dir müsste man ja nur 1 plus 0,(Stufe) machen, also bei 0 würde 1,0 rauskommen und bei 1 würde dann 1,1 rauskommen. (Nur ein Beispiel, weiß das es mit Stufe 10 nicht mehr funktioniert)
Somit kannst du eigentlich unendlich viele Stufen machen, du brauchst nur die passende Berechnung anzustellen, dadurch sparst du dir ein Array
|
|
|
|
|
04.08.2008, 20:04
|
#3 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Danke für deine Idee. Ich werde sie heute Abend mal umsetzen und den Codeschnipsel dort ebenfalls posten.
|
|
|
|
|
04.08.2008, 23:12
|
#4 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 04.08.2008
Beiträge: 129
|
Aber ich muss sagen, die Idee so ein Tutorial zu erstellen finde ich sehr gut, immer in kleinen Schritten vorran gehen und alles langsam aufbauen und genau drauf eingehen, das finde ich toll
|
|
|
|
|
04.08.2008, 23:38
|
#5 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 19.02.2008
Beiträge: 155
|
Ich bin nun ma ganz fies und nehme die Antwort bischen vorweg.
Dein Array:
PHP-Code:
$wert = array("0" => "0", "1" => "0.1", "2" => "0.2", "3" => "0.3", "4" => "0.4");
Jede Stude hat somit nun einen Wert. Für was auch immer der is
So, dein Gebäuder ist nun Level 0. Muss also so aussehen:
PHP-Code:
$level = 0;
echo $wert[$level];
Ausgabe: "0"
Nun gradest du das Haus auf Level 1.
PHP-Code:
$level = 1;
echo $wert[$level];
Ausgabe: 0.1
Soweit kla? Das ist eigentlich alles, was du brauchst. Ich glaub, dass man es sich sogar einfacher machen kann un den Array so aussehen lassen kann:
PHP-Code:
$wert = array("0", "0.1", "0.2", "0.3", "0.4");
|
|
|
|
05.08.2008, 00:36
|
#6 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
@Sn0opy: Danke das du mir immer die ganze Arbeit abnimmst. Dann werde ich in der Zeit mal gucken was ich noch für ein kleines Tutorial zum Thema Browsergames posten kann.
|
|
|
|
|
05.08.2008, 07:32
|
#7 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 04.08.2008
Beiträge: 129
|
So war das aber nicht gemeint ^^
Ich gehe eher davon aus, dass das Gebäude zum Beipsiel eine Basisverteidigung hat, sagen wir 300.
Bei Level 0: 0*300 = 0
Bei Level 1: 1*300 = 300
Bei Level 2: 2*300 = 600
usw. (Natürlich sind das extreme Werte und man sollte nciht unbedingt mit dem Level multiplizieren.)
Dadurch brauchst du kein Array mehr, sondern nur noch irgendwo die Info, wie dein Basiswert aussieht, von dem du ausgehst und damit rechnest.
Edit:
Habe glaube ich noch einen Fehler gefunden, bei deinem Nachtbonus muss glaube ich ein AND hin und kein OR.
Übrigens ist pow($defwall,1/10) als Formel gar nicht schlecht.
Edit2:
So sieht mein Code aus ^^ Lasst auch nicht von den Ponys überrennen ^^
PHP-Code:
<?php $sword = 0; $bow = 0; $draw = 0; // Angreifer // Schwertkämpfer erstellen $schwert['name'] = "Helle Ponys"; // Name $schwert['anz'] = 120; // Anzahl $schwert['atk'] = 30; // Angriff $schwert['def'] = 20; // Verteidigung // Verteidiger // Bogenschütze erstellen $bogen['name'] = "Dunkle Ponys"; // Name $bogen['anz'] = 80; // Anzahl $bogen['atk'] = 25; // Angiff $bogen['def'] = 35; // Verteidigung //Übersicht ausgeben echo "-------------------------------------------------------------------<br />"; echo "Angreifer:<br />"; echo "Name: ".$schwert['name']."<br />"; echo "Anzahl: ".$schwert['anz']."<br />"; echo "Liebe: ".$schwert['atk']."<br />"; echo "Zufriedenheit: ".$schwert['def']."<br />"; echo "-------------------------------------------------------------------<br />"; echo "Verteidiger:<br />"; echo "Name: ".$bogen['name']."<br />"; echo "Anzahl: ".$bogen['anz']."<br />"; echo "Liebe: ".$bogen['atk']."<br />"; echo "Zufriedenheit: ".$bogen['def']."<br />"; echo "-------------------------------------------------------------------<br /><br />"; //Simulationsschleife for($i=1;$i<=100;$i++) { $atk_anz = $schwert['anz']; //Anzahl übernehmen $def_anz = $bogen['anz']; //Anzahl übernehmen $abort=false; //Kein Abbruch $defwall = 8; //Stufe der Mauer //Rundenschleife for($k=1;$k<=10;$k++) { echo "Runde ".$k." ANFANG Anzahl der ".$schwert['name'].": ".$atk_anz." Anzahl der ".$bogen['name'].": ".$def_anz."<br />"; // Verteidigungsbonus bei Nacht berechnen if(date("H") <= 23 AND date("H") >= 7){ $bonustime = 1; } else { $bonustime = 2; } // Angriffs Angriffspunkte berechnen $atk_atk = $schwert['atk'] * $atk_anz; //Per Zufall bis zu 10% addieren oder subtrahieren if(rand(0,1)) { $atk_atk += $atk_atk*(rand(1,10)/100); } else { $atk_atk -= $atk_atk*(rand(1,10)/100); } // Angriffs Verteidigungsspunkte berechnen $atk_def = $schwert['def'] * $atk_anz; //Per Zufall bis zu 10% addieren oder subtrahieren if(rand(0,1)) { $atk_def += $atk_def*(rand(1,10)/100); } else { $atk_def -= $atk_def*(rand(1,10)/100); } // Verteidigungs Angriffspunkte berechnen $def_atk = $bogen['atk'] * $def_anz; //Per Zufall bis zu 10% addieren oder subtrahieren if(rand(0,1)) { $def_atk += $def_atk*(rand(1,10)/100); } else { $def_atk -= $def_atk*(rand(1,10)/100); } // Verteidigungs Verteidigungspunkte berechnen //Wenn Mauer gleich 0 dann nicht berücksichtigen, da sonst eh 0 rauskommen würde if($defwall > 0) { $def_bonus = pow($defwall,1/2) * $bonustime; } else { $def_bonus = $bonustime; } $def_normal = $bogen['def'] * $def_anz; $def_def = $def_normal * $def_bonus; //Per Zufall bis zu 10% addieren oder subtrahieren if(rand(0,1)) { $def_def += $def_def*(rand(1,10)/100); } else { $def_def -= $def_def*(rand(1,10)/100); } //Verschiedene ausgaben (Da wir hier Ponys haben, kein Angriff und Verteidigung ;D) echo "Liebe(".$schwert['name']."): ".$atk_atk."<br />"; echo "Zufriedenheit(".$schwert['name']."): ".$atk_def."<br />"; echo "Liebe(".$bogen['name']."): ".$def_atk."<br />"; echo "Zufriedenheit(".$bogen['name']."): ".$def_def."<br />"; //Angriff von der Verteidigung abziehen, sowohl für die Verteidigung als auch für den Angriff $def_new = $def_def - $atk_atk; $atk_new = $atk_def - $def_atk; //Wenn beide unter 0 sind, ist es ein unentschieden if($def_new<=0 AND $atk_new<=0) { $draw++; $abort=true; echo "<b>Unentschieden</b><br />"; echo "Runde ".$k." ENDE Anzahl der ".$schwert['name'].": 0 Anzahl der ".$bogen['name'].": 0<br /><br />"; break; //Nur die Verteidigung unter 0, haben die Angreifer gewonnen } else if($def_new<=0) { $sword++; $abort=true; echo "<b>".$schwert['name']." gewinnen</b><br />"; $atk_anz = ceil($atk_def/$atk_new); echo "Runde ".$k." ENDE Anzahl der ".$schwert['name'].": ".$atk_anz." Anzahl der ".$bogen['name'].": 0<br /><br />"; break; //Angreifer unter 0 haben die Verteidiger gewonnen } else if($atk_new<=0) { $bow++; $abort=true; echo "<b>".$bogen['name']." gewinnen</b><br />"; $def_anz = ceil($def_def/$def_new); echo "Runde ".$k." ENDE Anzahl der ".$schwert['name'].": 0 Anzahl der ".$bogen['name'].": ".$def_anz."<br /><br />"; break; //Ansonsten geht es weiter } else { //Neu berechnen, wieviel Angreifer und Verteidiger noch dabei sind, Werte werden aufgerundet $def_anz = ceil($def_def/$def_new); $atk_anz = ceil($atk_def/$atk_new); } echo "Runde ".$k." ENDE Anzahl der ".$schwert['name'].": ".$atk_anz." Anzahl der ".$bogen['name'].": ".$def_anz."<br /><br />"; } //Wenn nach 10 Runden keine Entscheidung gefallen ist, gibt es ein Unentschieden if($def_anz>0 AND $atk_anz>0 AND !$abort) { $draw++; } echo "<b>Simulation ".$i." Ende. Stallmauerstufe war: ".$defwall."</b><br /><br />"; } echo "<br />".$schwert['name'].": ".$sword."% ".$bogen['name'].": ".$bow."% Unentschieden: ".$draw."%<br />"; ?>
|
|
Geändert von Megger (05.08.2008 um 12:23 Uhr).
|
|
|
05.08.2008, 14:48
|
#8 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Danke ich werde mir den Code nachher mal angucken. Allerdings ist dieser Code auch nicht mehr so einfach gehalten. Als Anfänger könnte man da schon Probleme bekommen es zu verstehen. Aber das Prinzip was du meinst habe ich jetzt verstanden.
|
|
|
|
|
05.08.2008, 16:53
|
#9 (permalink)
|
|
Erfahrener Benutzer
Registriert seit: 04.08.2008
Beiträge: 129
|
Auf den Code kann man ja langsam hinarbeiten, habe viel eingebaut, was nicht wirklich benötigt wird. War ja auch nur ein Vorschlag um dir es zu verdeutlichen ^^
Arbeite gerade an einem Code, wo Angreifer und Verteidiger mehrere Einheiten besitzen usw.
Was du mir noch erklären könntest, warum sind Bogenschützen in der Nacht besser?
Edit:
So hier is der Code, allerdings noch ein bisschen buggy, aber kannst ja mal drüberschauen, ob du durchblickst und etwas verbessern kannst (falls du etwas verbesserst, würde ich es gerne sehen)
PHP-Code:
<?php $attacker_wins = 0; $defender_wins = 0; $draws = 0; $aborted = false; $einheiten = array(array("ID"=>1, "name"=>"Schwertkämpfer", "atk"=>35, "def"=>20), array("ID"=>2, "name"=>"Bogenschütze", "atk"=>25, "def"=>30)); $attacker = array(array("unitID"=>1, "anz"=>50), array("unitID"=>2, "anz"=>30)); $defender = array(array("unitID"=>1, "anz"=>50), array("unitID"=>2, "anz"=>30)); //for($k=1;$k<=100;$k++) { // echo "<big><b>Simulation ".$k."</b></big><br />"; $attacker_attack = array(); $attacker_defend = array(); $attacker_anzahl = array(); $defender_attack = array(); $defender_defend = array(); $defender_anzahl = array(); $attacker_attack2 = array(); $attacker_defend2 = array(); $attacker_anzahl2 = array(); $defender_attack2 = array(); $defender_defend2 = array(); $defender_anzahl2 = array(); $attacker_ID = array(); $defender_ID = array(); foreach($attacker as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $attacker_attack[$unit['unitID']] = round(MoralDerGruppe($unit['anz'] * $einheit['atk'])); $attacker_attack2[$unit['unitID']] = $attacker_attack[$unit['unitID']]; $attacker_defend[$unit['unitID']] = round(MoralDerGruppe($unit['anz'] * $einheit['def'])); $attacker_defend2[$unit['unitID']] = $attacker_defend[$unit['unitID']]; $attacker_anzahl[$unit['unitID']] = $unit['anz']; $attacker_anzahl2[$unit['unitID']] = $attacker_anzahl[$unit['unitID']]; array_push($attacker_ID,$unit['unitID']); } } } foreach($defender as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $defender_attack[$unit['unitID']] = round(MoralDerGruppe($unit['anz'] * $einheit['atk'])); $defender_attack2[$unit['unitID']] = $defender_attack[$unit['unitID']]; $defender_defend[$unit['unitID']] = round(MoralDerGruppe($unit['anz'] * $einheit['def'])); $defender_defend2[$unit['unitID']] = $defender_defend[$unit['unitID']]; $defender_anzahl[$unit['unitID']] = $unit['anz']; $defender_anzahl2[$unit['unitID']] = $defender_anzahl[$unit['unitID']]; array_push($defender_ID,$unit['unitID']); } } } for($i=1;$i<=6;$i++) { echo "<big><b>Runde ".$i."</b></big><br />"; echo "<b>Angreifer:</b><br />"; echo "Angriff:<br />"; print_r($attacker_attack); echo "<br />Verteidigung:<br />"; print_r($attacker_defend); echo "<br />"; foreach($attacker_attack as $attack) { $notattacked = true; $next = false; //for($x=0;$x<10;$x++) { while($notattacked AND !$next) { shuffle($defender_ID); $choose = array_pop($defender_ID); //$choose = rand(1,count($defender_defend)); if($defender_anzahl2[$choose]>0) { $defender_defend2[$choose] = $defender_defend[$choose] - $attack; if($defender_defend2[$choose]<=0 OR $defender_defend[$choose]<=0) { $defender_anzahl2[$choose] = 0; } else { $tmp = $defender_defend[$choose] - $defender_defend2[$choose]; if($tmp<=0) { $defender_anzahl2[$choose] = 0; } else { $defender_anzahl2[$choose] = ceil($defender_defend[$choose]/$tmp); } } echo $attacker_anzahl[array_search($attack,$attacker_attack)]." ". $einheiten[array_search($attack,$attacker_attack)-1]['name']. " mit einem Angriff von ".$attack." haben ".$defender_anzahl[$choose]." ". $einheiten[$choose-1]['name']. " mit einer Verteidigung von ". $defender_defend[$choose]. " angegriffen<br />"; $notattacked = false; } if(count($defender_ID)<=0) { $next = true; } //echo "NotAttacked: ".$notattacked." Winner: ".$winner."<br />"; } foreach($defender as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $defender_defend[$unit['unitID']] = round(MoralDerGruppe($defender_anzahl2[$unit['unitID']] * $einheit['def'])); $defender_defend2[$unit['unitID']] = $defender_defend[$unit['unitID']]; $defender_anzahl[$unit['unitID']] = $defender_anzahl2[$unit['unitID']]; if($defender_anzahl2[$unit['unitID']]>0) { array_push($defender_ID,$unit['unitID']); } } } } } echo "<br /><b>Verteidiger:</b><br />"; echo "Angriff:<br />"; print_r($defender_attack); echo "<br />Verteidigung:<br />"; print_r($defender_defend); echo "<br />"; foreach($defender_attack as $attack) { $notattacked = true; $next = false; //for($x=0;$x<10;$x++) { while($notattacked AND !$next) { shuffle($attacker_ID); $choose = array_pop($attacker_ID); //$choose = rand(1,count($attacker_defend)); if($attacker_anzahl2[$choose]>0) { $attacker_defend2[$choose] = $attacker_defend[$choose] - $attack; if($attacker_defend2[$choose]<=0 OR $attacker_defend[$choose]<=0) { $attacker_anzahl2[$choose] = 0; } else { $tmp = $attacker_defend[$choose] - $attacker_defend2[$choose]; if($tmp<=0) { $attacker_anzahl2[$choose] = 0; } else { $attacker_anzahl2[$choose] = ceil($attacker_defend[$choose]/$tmp); } } echo $defender_anzahl[array_search($attack,$defender_attack)]." ". $einheiten[array_search($attack,$defender_attack)-1]['name']. " mit einem Angriff von ".$attack." haben ".$attacker_anzahl[$choose]." ". $einheiten[$choose-1]['name']. " mit einer Verteidigung von ". $attacker_defend[$choose]. " angegriffen<br />"; $notattacked = false; } if(count($attacker_ID)<=0) { $next = true; } //echo "NotAttacked: ".$notattacked." Winner: ".$winner."<br />"; } foreach($attacker as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $attacker_defend[$unit['unitID']] = round(MoralDerGruppe($attacker_anzahl2[$unit['unitID']] * $einheit['def'])); $attacker_defend2[$unit['unitID']] = $attacker_defend[$unit['unitID']]; $attacker_anzahl[$unit['unitID']] = $attacker_anzahl2[$unit['unitID']]; if($attacker_anzahl2[$unit['unitID']]>0) { array_push($attacker_ID,$unit['unitID']); } } } } } $defend_win = 0; foreach($attacker as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $attacker_attack[$unit['unitID']] = round(MoralDerGruppe($attacker_anzahl2[$unit['unitID']] * $einheit['atk'])); $attacker_attack2[$unit['unitID']] = $attacker_attack[$unit['unitID']]; $attacker_defend[$unit['unitID']] = round(MoralDerGruppe($attacker_anzahl2[$unit['unitID']] * $einheit['def'])); $attacker_defend2[$unit['unitID']] = $attacker_defend[$unit['unitID']]; $attacker_anzahl[$unit['unitID']] = $attacker_anzahl2[$unit['unitID']]; if($attacker_anzahl[$unit['unitID']]<=0) { $defend_win++; } if($attacker_anzahl2[$unit['unitID']]>0) { array_push($attacker_ID,$unit['unitID']); } } } } $attack_win = 0; foreach($defender as $unit) { foreach($einheiten as $einheit) { if($unit['unitID']!=$einheit['ID']) { continue; } else { $defender_attack[$unit['unitID']] = round(MoralDerGruppe($defender_anzahl2[$unit['unitID']] * $einheit['atk'])); $defender_attack2[$unit['unitID']] = $defender_attack[$unit['unitID']]; $defender_defend[$unit['unitID']] = round(MoralDerGruppe($defender_anzahl2[$unit['unitID']] * $einheit['def'])); $defender_defend2[$unit['unitID']] = $defender_defend[$unit['unitID']]; $defender_anzahl[$unit['unitID']] = $defender_anzahl2[$unit['unitID']]; if($defender_anzahl[$unit['unitID']]<=0) { $attack_win++; } if($defender_anzahl2[$unit['unitID']]>0) { array_push($defender_ID,$unit['unitID']); } } } } if($defend_win>=count($attacker_anzahl)) { $defend_win = 1; } else { $defend_win = 0; } if($attack_win>=count($defender_anzahl)) { $attack_win = 1; } else { $attack_win = 0; } if($defend_win==1 AND $attack_win==1) { $draws++; $aborted = true; break; } else if($defend_win==1) { $defender_wins++; $aborted = true; break; } else if($attack_win==1) { $attacker_wins++; $aborted = true; break; } echo "<br /><br />"; } //} echo "<br />Attacker: ".$attacker_wins." Defender: ".$defender_wins." Unentschieden: ".$draws; function MoralDerGruppe($value) { $prozent_max = 10; if(rand(0,1)) { $value+=$value*(rand(1,$prozent_max)/100); } else { $value-=$value*(rand(1,$prozent_max)/100); } return $value; } function ausgabe($value) { echo $value."<br />"; } ?>
Alle anderen können sich das ja natürlich auch anschauen, is aber bisschen komplex ^^
|
|
Geändert von Megger (05.08.2008 um 17:20 Uhr).
|
|
|
05.08.2008, 17:28
|
#10 (permalink)
|
|
Pixelschieber
Registriert seit: 18.04.2008
Ort: Detmold
Beiträge: 343
|
Zitat:
Zitat von Megger
Was du mir noch erklären könntest, warum sind Bogenschützen in der Nacht besser?
|
Bei fast jedem Browsergame hat der Verteidiger ner Nachtbonus, da es immer wieder Leute gibt die um 4 Uhr nachts angreifen damit der Verteidiger es nicht merkt.
Das ist halt fast Standard in BGs.
In Wahrheit müsste wohl der Angreifer noch nen Bonus bekommen, da er nicht so schnell entdeckt wird^^
|
|
|
|
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
Forumregeln
|
|
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:52 Uhr.
| |
| |