Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Silnik walk
Forum PHP.pl > Forum > Przedszkole
sirgomo
  1. <?php
  2. $stra = 0;
  3. $stro = 0;
  4. $aosl = 0;
  5. $oosl = 0;
  6. $aatak = 0;
  7. $oatak = 0;
  8. function battle_log($stringData){
  9. $myFile = "battle_log.txt";
  10. $fh = fopen($myFile, 'a') or die("can't open file");
  11. fwrite($fh, $stringData."\n");
  12. fclose($fh);
  13.  
  14. }
  15. function uniqRand( $min, $max, $count ) { //funkcja za kazym razem generuje inna kolejnosc elementow
  16. $aItems = array();
  17. while( count( $aItems ) < $count ) {
  18. $iRand = mt_rand( $min, $max );
  19. if( !in_array( $iRand, $aItems ) ) {
  20. $aItems[] = $iRand;
  21. }
  22. }
  23. return $aItems;
  24. }
  25.  
  26. function MissionCaseAttack($fleetrow,$log=true){
  27. global $lang,$resource,$reslist,$CombatCaps,$pricelist;
  28. $parse = $lang;
  29. //ataker
  30. $typ = array();
  31. $ile = array();
  32. foreach(explode(';',$fleetrow['array']) as $array){
  33. $fleet = explode(',',$array);
  34. $typ[] = $fleet[0];
  35. $ile[] = $fleet[1];
  36.  
  37. }/*
  38. foreach(explode(';',$fleetrow['array']) as $statki){
  39. $vale = explode(',',$statki);
  40. $typ[] = $vale[0];
  41. $ile[] = $vale[1];
  42. }*/
  43. $techa = doquery("SELECT '".$resource[109]."','".$resource[110]."','".$resource[111]."','".$resource[601]."' FROM {{table}} WHERE `id` = '".$fleetrow['owner_userid']."' LIMIT 1;",'users',true);
  44. //obronca
  45. $typo = array();
  46. $ileo = array();
  47. $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '".$fleetrow['target_id']."' LIMIT 1 ;",'planets',true);
  48. $techo = doquery("SELECT '".$resource[109]."','".$resource[110]."','".$resource[111]."','".$resource[601]."' FROM {{table}} WHERE `id` = '".$fleetrow['target_userid']."' LIMIT 1 ;",'users',true);
  49. foreach($reslist['dbattle'] as $e){ if($CurrentPlanet[$resource[$e]] > 0){ $typo[] = $e; $ileo[] = $CurrentPlanet[$resource[$e]]; } }
  50. foreach($reslist['fleet'] as $e){ if($CurrentPlanet[$resource[$e]] > 0){ $typo[] = $e; $ileo[] = $CurrentPlanet[$resource[$e]]; } }
  51.  
  52. $ilea = count($typ);
  53. $ileb = count($typo);
  54. $bo = $ileb;
  55. $wielkie = 0;
  56. if($ilea > $ileb){
  57. $wielkie = $ilea;
  58. }else{
  59. $wielkie = $ileb;
  60. }
  61. $raport = ' bitwa tu i tam ';
  62.  
  63. for($i =0; $i < 8; $i++){
  64. $r++;
  65. if($ilea > 1){
  66. $ka = uniqRand(0, $ilea, $ilea);
  67. }else{
  68. $ka =0;
  69. }
  70. if($ileb > 1){
  71. $ko = uniqRand(0, $ileb, $ileb);
  72. }else{
  73. $ko = 0;
  74. }
  75. //spradzamy czy jest jeszcze przeciwnik
  76. if(array_sum($ile) == 0){
  77. break;
  78. }
  79. if(array_sum($ileo) == 0){
  80. break;
  81. }
  82. $raport .= ' Runda : ' . $r;
  83. for($j = 0; $j < $wielkie; $j++){
  84. if(!array_key_exists($ka[$j],$ile)){
  85. if($ilea > 1){
  86. $a = mt_rand(0,$ilea);
  87. }else{
  88. $a = 0;
  89. }
  90. //ataker
  91.  
  92. $stra = round($ile[$ka[$a]] * (($pricelist[$typ[$ka[$a]]]['metal'] + $pricelist[$typ[$ka[$a]]]['crystal'] + $pricelist[$typ[$ka[$a]]]['deuterium']) / 10) * (1.05 * $techa[$resource[110]]));
  93. $aosl = round($ile[$ka[$a]] * $CombatCaps[$typ[$ka[$a]]]['shield'] * (1.05 * $techa[$resource[111]]));
  94. $aatak = round(($ile[$ka[$a]] * $CombatCaps[$typ[$ka[$a]]]['attack'] * $CombatCaps[$typ[$ka[$a]]]['sd'][$typo[$ko[$j]]]) * (1.05 * $techa[$resource[109]]));
  95. //obronca
  96. $stro = round($ileo[$ko[$j]] * (($pricelist[$typo[$ko[$j]]]['metal'] + $pricelist[$typo[$ko[$j]]]['crystal'] + $pricelist[$typo[$ko[$j]]]['deuterium']) / 10) * (1.05 * $techo[$resource[110]]));
  97. $oosl = round($ileo[$ko[$j]] * $CombatCaps[$typo[$ko[$j]]]['shield'] * (1.05 * $techo[$resource[111]]));
  98. $oatak = round(($ileo[$ko[$j]] * $CombatCaps[$typo[$ko[$j]]]['attack'] * $CombatCaps[$typo[$ko[$j]]]['sd'][$typ[$ka[$j]]]) * (1.05 * $techo[$resource[109]]));
  99. battle_log(' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ');
  100. $raport .= ' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ';
  101.  
  102. }elseif(!array_key_exists($ko[$j],$ileo)){
  103. if($ileb > 1){
  104. $a = mt_rand(0,$ileb);
  105. }else{
  106. $a=0;
  107. }
  108. $stra = round($ile[$ka[$j]] * (($pricelist[$typ[$ka[$j]]]['metal'] + $pricelist[$typ[$ka[$j]]]['crystal'] + $pricelist[$typ[$ka[$j]]]['deuterium']) / 10) * (1.05 * $techa[$resource[110]]));
  109. $aosl = round($ile[$ka[$j]] * $CombatCaps[$typ[$ka[$j]]]['shield'] * (1.05 * $techa[$resource[111]]));
  110. $aatak = round(($ile[$ka[$j]] * $CombatCaps[$typ[$ka[$j]]]['attack'] * $CombatCaps[$typ[$ka[$j]]]['sd'][$typo[$ko[$j]]]) * (1.05 * $techa[$resource[109]]));
  111. //obronca
  112. $stro = round($ileo[$ko[$a]] * (($pricelist[$typo[$ko[$a]]]['metal'] + $pricelist[$typo[$ko[$a]]]['crystal'] + $pricelist[$typo[$ko[$a]]]['deuterium']) / 10) * (1.05 * $techo[$resource[110]]));
  113. $oosl = round($ileo[$ko[$a]] * $CombatCaps[$typo[$ko[$a]]]['shield'] * (1.05 * $techo[$resource[111]]));
  114. $oatak = round(($ileo[$ko[$a]] * $CombatCaps[$typo[$ko[$a]]]['attack'] * $CombatCaps[$typo[$ko[$a]]]['sd'][$typ[$ka[$j]]]) * (1.05 * $techo[$resource[109]]));
  115. battle_log(' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ');
  116. $raport .= ' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ';
  117. }else{
  118. $stra = round($ile[$ka[$j]] * (($pricelist[$typ[$ka[$j]]]['metal'] + $pricelist[$typ[$ka[$j]]]['crystal'] + $pricelist[$typ[$ka[$j]]]['deuterium']) / 10) * (1.05 * $techa[$resource[110]]));
  119. $aosl = round($ile[$ka[$j]] * $CombatCaps[$typ[$ka[$j]]]['shield'] * (1.05 * $techa[$resource[111]]));
  120. $aatak = round(($ile[$ka[$j]] * $CombatCaps[$typ[$ka[$j]]]['attack'] * $CombatCaps[$typ[$ka[$j]]]['sd'][$typo[$ko[$j]]]) * (1.05 * $techa[$resource[109]]));
  121. $stro = round($ileo[$ko[$j]] * (($pricelist[$typo[$ko[$j]]]['metal'] + $pricelist[$typo[$ko[$j]]]['crystal'] + $pricelist[$typo[$ko[$j]]]['deuterium']) / 10) * (1.05 * $techo[$resource[110]]));
  122. $oosl = round($ileo[$ko[$j]] * $CombatCaps[$typo[$ko[$j]]]['shield'] * (1.05 * $techo[$resource[111]]));
  123. $oatak = round(($ileo[$ko[$j]] * $CombatCaps[$typo[$ko[$j]]]['attack'] * $CombatCaps[$typo[$ko[$j]]]['sd'][$typ[$ka[$j]]]) * (1.05 * $techo[$resource[109]]));
  124. battle_log(' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ');
  125. $raport .= ' atak atakera : ' .$aatak .' oslona atakera : ' . $aosl . ' pkt struktury : ' . $stra . '<br /> atak obroncy : ' . $oatak . ' oslona obroncy : ' . $oosl . ' pkt. struktury : ' . $stro . ' ';
  126. }//koniec ifa
  127. if($techa[$resource[601]] != 0){
  128. $aosl += $aosl * 0.05;
  129. $aatak += $aatak * 0.05;
  130. }
  131. if($techo[$resource[601]] != 0){
  132. $oosl += $oosl * 0.05;
  133. $oatak += $oatak * 0.05;
  134. }
  135.  
  136. $aatak -= $oosl;
  137. $oatak -= $aosl;
  138.  
  139. //bitwa:P
  140. if($aatak >= $stro){
  141. $aatak -= $stro;
  142. $ileo[$ko[$j]] = 0;
  143. }else{
  144. $stro -= $aatak;
  145. $ileo[$ko[$j]] = ceil($stro / (($pricelist[$typo[$ko[$j]]]['metal'] + $pricelist[$typo[$ko[$j]]]['crystal'] + $pricelist[$typo[$ko[$j]]]['deuterium']) * 10) / (1.05 * $techo[$resource[110]]));
  146. }
  147. //bitwa
  148. if($oatak >= $stra){
  149. $oatak -= $stra;
  150. $ile[$ka[$j]] = 0;
  151. }else{
  152. $stra -= $oatak;
  153. $ile[$ka[$j]] = ceil($stra / (($pricelist[$typ[$ka[$j]]]['metal'] + $pricelist[$typ[$ka[$j]]]['crystal'] + $pricelist[$typ[$ka[$j]]]['deuterium']) * 10) / (1.05 * $techa[$resource[110]]));
  154. }
  155.  
  156. }// koniec walki w rundzie
  157.  
  158.  
  159. }// koniec rund
  160.  
  161.  




No wiec tak napisane przez poczatkujacego tongue.gif, wiec konstruktywna krytyka mile widziana, druga czesc jest w 2 poscie !
a teraz tak, dlaczego raport za kazdym razem pokazuje 0, brak zawartosci zmiennych, co ciekawe raz liczy walke raz nie a raz tak!l bledow brak, pliku rowniez brak informacji wszystkie zmienne wyswietla jako 0, ale czemu ?
a do tego mimo ze w raporcie jest wszedzie 0, to walka np jest policzona, hmm to tyle czekam na konstruktywne wypowiedzi
CuteOne
wrzuć to w tagi [ php ] [ / php ] (bez spacji) bo czytać tego nie idzie. Po drugie jak ktoś z zewnątrz ma ocenić czy kod działa tak jak byś chciał (nie mówię o tych zerach tylko o całości)?


EDIT: właśnie widzę, że nie "napisane przez początkującego" tylko zerżnięte z gotowego silnika... chociaż być dopisał, że to nie twoje sleep.gif
Daimos
i naprawdę myślisz, że znajdzie się znudzony maniak, który w ogóle przeczyta niepokolorowany, niedziałający (bo bez bazy itd) kod, do tego napisany praktycznie ciurkiem bez żadnych komentarzy i jakiegoś sensu logicznego?! Połowa Twoja, połowa czyjaś? Bo te komentarze.... ahhh
  1. (...)
  2. //funkcja za kazym razem generuje inna kolejnosc elementow
  3. (...)
  4. //How much can we take as a percent?
  5. (...)
  6. //tymczasowe rozwiazanie
  7. (...)

Proponuje jeszcze kilka komentarzy w Suahili i po Rosyjsku, kod nabiera wtedy kolorów smile.gif
sirgomo
Czesc dalsza bo nie miesci sie w 1 poscie.

  1.  
  2.  
  3. $ilea = count($typ);
  4. $ileb = count($typo);
  5.  
  6. if(array_sum($ile) > 0 && array_sum($ileo) == 0){
  7. $stealmax = array($CurrentPlanet['metal'] * MAX_ATTACK_RAID,
  8. $CurrentPlanet['crystal'] * MAX_ATTACK_RAID,
  9. $CurrentPlanet['deuterium'] * MAX_ATTACK_RAID
  10. );
  11.  
  12. $cargo['total'] = 0;
  13. foreach($typ as $typs){
  14. foreach($ile as $iles){
  15. $cargo['total'] += $iles * $pricelist[$typs]['capacity'];
  16. }
  17. }
  18. $cargo['total'] -= $fleetrow['metal'] + $fleetrow['crystal'] + $fleetrow['deuterium'];
  19. //So how much can we take?
  20. $totaltake = $stealmax[0] + $stealmax[1] + $stealmax[2];
  21. $stolen = array(0,0,0);
  22. // foreach($cargo as $id => $space){
  23. // if($id != 'total'){
  24. //Is there enough res to go around?
  25. if($cargo['total'] >= $totaltake){
  26. $stolen[0] += $stealmax[0];
  27. $stolen[1] += $stealmax[1];
  28. $stolen[2] += $stealmax[2];
  29.  
  30. }else{
  31. //How much can we take as a percent?
  32. $pc = ($cargo['total'] / ($stealmax[0] + $stealmax[1] + $stealmax[2]));
  33.  
  34. //Add the resources to the fleetrow
  35. $stolen[0] += ($stealmax[0] * $pc);
  36. $stolen[1] += ($stealmax[1] * $pc);
  37. $stolen[2] += ($stealmax[2] * $pc);
  38.  
  39.  
  40. // }
  41. //}
  42.  
  43. }
  44.  
  45. $parse['result'] = sprintf($lang['A_won'],pretty_number($stolen[0]),$lang['Metal'],pretty_number($stolen[1]),$lang['Crystal'],pretty_number($stolen[2]),$lang['Deuterium']);
  46. doquery("UPDATE {{table}} SET `metal` = `metal` + '".$stolen[0]."', `crystal` = `crystal` + '".$stolen[1]."', `deuterium` = `deuterium` + '".$stolen[2]."' WHERE `partner_fleet` = '".$fleetrow['fleet_id']."' LIMIT 1 ;",'fleets',false);
  47. doquery("UPDATE {{table}} SET `metal` = `metal` - '".$stolen[0]."', `crystal` = `crystal` - '".$stolen[1]."', `deuterium` = `deuterium` - '".$stolen[2]."' WHERE `id` = '".$CurrentPlanet['id']."' LIMIT 1 ;",'planets',false);
  48. }
  49. if(array_sum($ile) > 0){
  50. for($k = 0; $k < $ilea; $k++){
  51. if($ile[$k] > 0){
  52. $fleetarray[] = $typ[$k] . ',' .$ile[$k];
  53. }
  54. }
  55. $fleetarray = implode(';',$fleetarray);
  56.  
  57. doquery("UPDATE {{table}} SET `shipcount` = '".$ilea."',`array` = '".mysql_real_escape_string($fleetarray)."' WHERE `partner_fleet` = '".$fleetrow['fleet_id']."' LIMIT 1;",'fleets', true);
  58. DeleteFleet($fleetrow['fleet_id']);
  59. }else{
  60. DeletePartnerFleet($fleetrow['fleet_id']);
  61. DeleteFleet($fleetrow['fleet_id']);
  62. }
  63. if($bo == 0){
  64. $raport .= ' Na planecie nie bylo obrony';
  65. }else{
  66. $qry = "UPDATE {{table}} SET ";
  67. for($k = 0; $k < $ileb -1; $k++){
  68. if($ileo[$k] < 0){ $ileo[$k] = 0; }
  69.  
  70. $qry .= "`".$resource[$typo[$k]]."` = '".$ileo[$k]."', ";
  71.  
  72. }
  73. $qry .= "`".$resource[$typo[$ileb -1]]."` = '".$ileo[$ileb -1]."' ";
  74. $qry .= "WHERE `id` = '".$fleetrow['target_id']."' LIMIT 1 ;";
  75. doquery($qry,'planets');
  76. }
  77. $message .= $lang['fleet_1_tit']." [".$CurrentPlanet['galaxy'].":".$CurrentPlanet['system'].":".$CurrentPlanet['planet']."]</font></a>";
  78. $message2 .= $lang['fleet_1_tit']." [".$CurrentPlanet['galaxy'].":".$CurrentPlanet['system'].":".$CurrentPlanet['planet']."]</font></a>";
  79. $message .= $raport; //tymczasowe rozwiazanie
  80. $message2 .= $raport;
  81.  
  82. PM($fleetrow['owner_userid'],0,$message2,$lang['fleet_1_tit'],$lang['fleet_control'],2);
  83. PM($fleetrow['target_userid'],0,$message,$lang['fleet_1_tit'],$lang['fleet_control'],2);
  84.  
  85. }
Fifi209
Wybacz, nie wiem kto pisał ten kod ale jest przynajmniej 100 lat za murzynami, w pełni strukturalny, przy zapisie do pliku nie jest on nawet zablokowany. Sieczka taka w kodzie, że powątpiewam w to, czy komuś będzie chciało się go analizować.

Na pewno nie nazwał bym tego "silnikiem".
zend
Jeśli kod działa to dobrze, ale napewno nie jest to kod który warto by było oceniać. Nie jest to też kod który warto rozwijać. Podziel kod na jakieś logiczne części, np funkcja wybierająca dopowiednie dane, potem kolejna funkcja przeprowadzająca bitwę, kolejna funkcja wyświetlająca dane, staraj się unikać globali, przekazuj dane przez parametry funkcji. Najlepiej to poczytaj o obiektówce, dużo łatwiej było by ci modyfikować grę gdybyś z niej skorzystał, np
  1.  
  2. $battle[] = new SchematBitwy1();
  3. $battle[] = new SchematBiwy2();
  4.  
  5. //losowe wybieranie przebiegu bitwy
  6. $results = $engine -> startBattle(array_rand($battle));
  7.  

Spawnm
Zend twój pomysł jest mało optymalny.
Lepiej w tablicy dać nazwy klas walki, potem wylosować jeden i dać new $wylosowany().
Co do kodu autora tematu to serio niech go jakoś ogarnie i zainteresuje się oop bo czytać się tego nie da.
zend
Nie chodziło mi o podanie optymalnego przykładu, tylko przykładu który autor tematu jest w stanie łatwo pojąc i potem stosować w innych przypadkach. Kod faktycznie mało optymalny, ale myślę że do tego sirgomo sam by kiedyś doszedł, kiedy bedzie miał choć trochę większe doświadczenie
sirgomo
Ja wiem ze to jest malo optymalne, ale potrzebuje cos dzialajacego na juz, a potem moge pomyslec jak napisac to tak by bylo duzo lepiej tongue.gif. Pozatym brak mi doswiadczenia wiec ucze sie na bledach, a w kodzie wyzej jest gdzies blad albo nawet kilka ktore powoduja ze to raz dziala a raz nie. Blad gdzies jest w drugej petli for ale nie potrafie go znalesc
zend
Skoro ty z postawionym środowiskiem i wszystkimi biblitekami nie jesteś w stanie to myślisz że my bez tego będziemy w stanie? Bez poprawki kodu się nie obejdzie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.