Zdravím, robím si vo volnom čase menší bojový skript ktorý vyberie z databazy jednotky ktoré su schopné bojovať a vykoná boj.
Jedna sa o jednoduchu tabulku /id/populacia jednotiek/hp jednotky/obrana/rychlost/sila
Pokiaľ sa jednalo o boj hráč vs hráč, bolo to naprogramovanie jednoduché, avšak pri vačšom počte jednotiek mi to robí problém a neviem prísť na správne riešenie. Niečo čo mám hotové je ukázane dole. V podstate sa jedná o to že chcem vypísať do pola všetky priradené jednotky, a vypísať ich tolko krát kolko je daná populácia v tabulke. To isté aj u protivníka, a potom vykonať útok pomocou rand_array ktorý vyberie nahodnu jednotku z jedneho pola, a nasledne z druhého a začne sa "súboj" avšak na som na to prikrátky. Bol by som rád za nejaké nasmerovanie alebo aspoň malú radu ako na to lebo dochádzajú mi nápady...
(kvalitu kodu samozrejem nehodnotiť, je to len čisto koncept)
$query_units_info = mysql_query("SELECT * FROM game_army_units_attacking WHERE army_attack = '".$_GET['id']."' AND army_enabled = 1");
while (($unitsinfo = mysql_fetch_assoc($query_units_info)) != NULL) {
$query_unit_info = mysql_query("SELECT * FROM game_army_class WHERE army_class_id = '".$unitsinfo['army_class_id']."' ");
$unit = mysql_fetch_assoc($query_unit_info);
$x = 1;
while($x <= $unitsinfo['army_population']) {
$players_attacker = array(array('attack' => $unitsinfo['army_power'], 'defense' => $unitsinfo['army_def'], 'health' => $unitsinfo['army_power']));
$x++;
}
}
$query_units_info = mysql_query("SELECT * FROM game_army_units WHERE street_user = '".$row_street['attack_defender']."' AND army_enabled = 1");
while (($unitsinfo = mysql_fetch_assoc($query_units_info)) != NULL) {
$query_unit_info = mysql_query("SELECT * FROM game_army_class WHERE army_class_id = '".$unitsinfo['army_class_id']."' ");
$unit = mysql_fetch_assoc($query_unit_info);
$x = 1;
while($x <= $unitsinfo['army_population']) {
$players_defender = array(array('attack' => $unitsinfo['army_power'], 'defense' => $unitsinfo['army_def'], 'health' => $unitsinfo['army_power']));
$x++;
}
}
$count = 0;
while (true) {
$count++;
$players_temp = $players;
$attacker_key = array_rand($players);
$attacker =& $players[$attacker_key];
unset($players_temp[$attacker_key]);
$defender_key = array_rand($players_temp);
$defender =& $players[$defender_key];
$hit = ($attacker['attack']/$defender['defense']) + rand(1, $attacker['level']);
echo "{$count}. Jednotka {$defender_key} ({$defender['health']} hp) bola zranená a dostala {$hit} zranenia jednotkou {$attacker_key} ({$attacker['health']} hp)\n";
$defender['health'] = $defender['health'] - $hit;
if ($defender['health'] <= 0) {
echo "Jednotka {$defender_key} umrela, jednotka {$attacker_key} vyhrala!\n";
break;
}
}