Einzelnen Beitrag anzeigen
Alt 05.08.2008, 15:53   #9 (permalink)
Megger
Erfahrener Benutzer
 

Standard

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]<=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]<=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==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 16:20 Uhr).
Megger ist offline   Mit Zitat antworten An Facebook senden