Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Gra przeglądarkowa i walka
darkking
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


Witajcie !
Pisze własna grę przez przeglądarkę. Jednak natknąłem się na pewien problem. Chciałbym zrobić aby walka w grze nie byłą aż tak przewidywalna, tz. o wygranej nie mają decydować czynniki tj. obrona, atak itp. Chciałbym jakoś dodać do walki elementy losowe.
Czy znacie może jakieś algorytmy które się do tego przydadzą ? Jedyne co mi przychodzi do głowy to algorytm prawdopodobieństwa przy przewidywaniu ataków.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
greycoffey
post
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


rand i algorytm szybszy: mt_rand
Go to the top of the page
+Quote Post
darkking
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


nie chodziło mi o losowanie, lecz o obliczenie prawdopodobieństwa wybrania danego ataku przez gracza biorąc pod uwagę cechy postaci (atrybuty). Czyli, jeśli gracz ma dużą szybkość ataku, zaatakuje szybkim ciosem, jeśli dużą siłę to prawdopodobnie będzie to najpierw silny cios, a później szybki.
Go to the top of the page
+Quote Post
krowal
post
Post #4





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


...a prawdopodobieństwo obliczysz korzystając z rand() (IMG:style_emoticons/default/biggrin.gif)

taki najprostszy algorytm:
  1. $sila = 100;
  2. $zrecznosc = 150;
  3. if (rand(0, $sila+$zrecznosc) > $sila){
  4. //szybki atak
  5. }else{
  6. //silny atak
  7. }


Ten post edytował krowal 18.02.2011, 20:39:01
Go to the top of the page
+Quote Post
Piogola
post
Post #5





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


To ty musisz stworzyć algorytm, który obliczy szansę ataku. Bierzesz pod uwagę wszystkie lub część umiejętności, ekwipunku i tworzysz odpowiedni algorytm.
Go to the top of the page
+Quote Post
darkking
post
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


Dziękuję bardzo za odpowiedzi (IMG:style_emoticons/default/smile.gif) już się wziąłem za projektowanie tego "ustrojstwa" (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Kiedyś znalazłem w sieci takie cudo, może Ci się przyda:
  1. function bitwa($a_spy, $a_archer, $a_sword, $a_knight, $a_spear, $a_snob, $d_spy, $d_archer, $d_sword, $d_knight, $d_spear, $d_snob, $luck, $a_a_tech, $a_s_tech, $a_k_tech, $a_sp_tech, $d_a_tech, $d_s_tech, $d_k_tech, $d_sp_tech, $pal) {
  2. $luck+=100;
  3. $luck/=100;
  4.  
  5. $atak_zwiad=$a_spy;
  6. $atak_zwiad*=$luck;
  7. $bon=$pal*5+100;
  8. $bon/=100;
  9. $atak=$a_archer*(5+$a_a_tech*5)+$a_sword*(15+$a_s_tech*5)+$a_knight*(105+$a_k_tech*5)+$a_spear*(100+$a_sp_tech*5)+$a_snob*150;
  10.  
  11. $atak*=$luck;
  12. $a_suma=$a_spy+$a_archer+$a_sword+$a_knight+$a_spear+$a_snob;
  13. if($atak_zwiad==null){$atak_zwiad=1;}
  14. if($atak==null){$atak=1;}
  15.  
  16. $obrona_zwiad=$d_spy;
  17.  
  18. $obrona_vszwarcie=$d_archer*(90+$d_a_tech*5)+$d_sword*(60+$d_s_tech*5)+$d_knight*(20+$d_k_tech*5)+$d_spear*(20+$d_sp_tech*5)+$d_snob*50+$pal*100;
  19. $obrona_vszwarcie*=$bon;
  20. $obrona_vsdystans=$d_archer*(30+$d_a_tech*5)+$d_sword*(95+$d_s_tech*5)+$d_knight*(20+$d_k_tech*5)+$d_spear*(25+$d_sp_tech*5)+$d_snob*40+$pal*100;
  21. $obrona_vsdystans*=$bon;
  22. if($obrona_vszwarcie<0){$obrona_vszwarcie=0;}
  23. if($obrona_vsdystans<0){$obrona_vsdystans=0;}
  24.  
  25. $d_suma=$d_zwiad+$d_archer+$d_sword+$d_knight+$d_spear+$d_snob;
  26.  
  27. if($obrona_vszwarcie==null){$obrona_vszwarcie=1;}
  28. if($obrona_vsdystans==null){$obrona_vsdystans=1;}
  29.  
  30. if($obrona_zwiad<$atak_zwiad){
  31. $k=$obrona_zwiad/$atak_zwiad;
  32. $diff_k=1-($atak_zwiad-$obrona_zwiad)/$atak_zwiad;
  33. $a_spys=($a_spy*$k)*$diff_k;}
  34. else{$a_spys=$a_spy;}
  35.  
  36. $diff_z=$atak/$obrona_vszwarcie;
  37. $diff_d=$atak/$obrona_vsdystans;
  38. $t=0;
  39. if($diff_d>=1){$a_archers=$a_archer*($obrona_vsdystans/$atak); $t+=$a_archers;} else {$a_archers=$a_archer;}
  40. if($diff_z>=1){$a_swords=$a_sword*($obrona_vszwarcie/$atak); $t+=$a_swords;} else {$a_swords=$a_sword;}
  41. if($diff_z>=1){$a_knights=$a_knight*($obrona_vszwarcie/$atak); $t+=$a_knights;} else {$a_knights=$a_knight;}
  42. if($diff_d>=1){$a_spears=$a_spear*($obrona_vsdystans/$atak); $t+=$a_spears;} else {$a_spears=$a_spear;}
  43. if($diff_z>=1){$a_snobs=$a_snob*($obrona_vszwarcie/$atak); $t+=$a_snobs;} else {$a_snobs=$a_snob;}
  44. if($t>=$a_suma){$t=true;}
  45. if($atak>1){if($diff_d>=1||$t==true){$d_spys=$d_spy;} else {$d_spys=$d_spy*$diff_z;}}
  46. if($diff_z>=1||$t==true){$d_archers=$d_archer;} else {$d_archers=$d_archer*$diff_z;}
  47. if($diff_d>=1||$t==true){$d_swords=$d_sword;} else {$d_swords=$d_sword*$diff_d;}
  48. if($diff_d>=1||$t==true){$d_knights=$d_knight;} else {$d_knights=$d_knight*$diff_d;}
  49. if($diff_z>=1||$t==true){$d_spears=$d_spear;} else {$d_spears=$d_spear*$diff_z;}
  50. if($diff_d>=1||$t==true){$d_snobs=$d_snob;} else {$d_snobs=$d_snob*$diff_d;}
  51.  
  52.  
  53. $a_spys=round($a_spys);
  54. $d_spys=round($d_spys);
  55. $d_archers=round($d_archers);
  56. $d_swords=round($d_swords);
  57. $d_knights=round($d_knights);
  58. $d_spears=round($d_spears);
  59. $d_snobs=round($d_snobs);
  60. $a_archers=round($a_archers);
  61. $a_swords=round($a_swords);
  62. $a_knights=round($a_knights);
  63. $a_spears=round($a_spears);
  64. $a_snobs=round($a_snobs);
  65. if($a_spys>$a_spy){$a_spys=$a_spy;}
  66. if($a_archers>$a_archer){$a_archers=$a_archer;}
  67. if($a_swords>$a_sword){$a_swords=$a_sword;}
  68. if($a_knights>$a_knight){$a_knights=$a_knight;}
  69. if($a_spears>$a_spear){$a_spears=$a_spear;}
  70. if($d_spys>$d_spy){$d_spys=$d_spy;}
  71. if($d_archers>$d_archer){$d_archers=$d_archer;}
  72. if($d_swords>$d_sword){$d_swords=$d_sword;}
  73. if($d_knights>$d_knight){$d_knights=$d_knight;}
  74. if($d_spears>$d_spear){$d_spears=$d_spear;}
  75. $straty="$a_spys, $a_archers, $a_swords, $a_knights, $a_spears, $a_snobs, $d_spys, $d_archers, $d_swords, $d_knights, $d_spears, $d_snobs";
  76. return $straty;
  77. }
  78.  
  79. $straty=bitwa($rozk[5], $rozk[6], $rozk[7], $rozk[8], $rozk[9], $rozk[11], $village2[8], $village2[9], $village2[10], $village2[11], $village2[12], $village2[13], $luck, $tech[0], $tech[1], $tech[2], $tech[3], $village2[14], $village2[15], $village2[16], $village2[17], $village2[19]);
  80. $straty=explode(",",$straty);


Ten post edytował Kshyhoo 18.02.2011, 22:11:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 06:47