←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

PHP
Algorytm łączący warunki instrukcji w przy...

Zablokowany

Gość_21977_* 30.08.2012

Witam,

Czy ktoś z Was zna algorytm na łączenie warunków instrukcji (najlepiej w PHP) w jakiejś przyzwoitej złożoności?
Mam na myśli łączenie warunków w bloki, np. zamiast
if(gRound>=1){
give_item(id, "weapon_hegrenade");
}
if(gRound>=2 && gRound<=3){
give_item(id, "weapon_flashbang");
}
if(gRound<=2){
give_item(id, "weapon_smokegrenade");
}
if(gRound>=2 && gRound<=4 && get_user_team(id)==2){
give_item(id, "item_thighpack");
}
if(gRound<=2){
give_item(id, "item_nvgs");
}
uzyskać połączone warunki, tj. przykładowo
if(gRound>=1){
give_item(id, "weapon_hegrenade");
}
if(gRound<=2){
give_item(id, "weapon_smokegrenade");
give_item(id, "item_nvgs");
}
if(gRound>=2){
if(gRound<=3){
give_item(id, "weapon_flashbang");
}
if(gRound<=4 && get_user_team(id)==2){
give_item(id, "item_thighpack");
}
}
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 30.08.2012

Dla tego konkretnego przypadku można to zrobić tak:

switch( true )
{
case( gRound >= 1 ): give_item( id, "weapon_hegrenade" )
case( gRound <= 2 ): {
give_item( id, "weapon_smokegrenade" );
give_item( id, "item_nvgs" );
}
case( gRound <= 3 ): give_item(id, "weapon_flashbang");
case( gRound <= 4 ): if( get_user_team( id ) == 2 ) give_item( id, "item_thighpack" );
}
Odpowiedz

Gość_21977_* 31.08.2012

Ogólnie chodzi mi o algorytm, który by wybierał odpowiednie warunki i je łączył w przyzwoitym czasie, bo na razie wyskrobałem funkcje klasy, które generują taki kod:
if(gRound>=1){
give_item(id, "weapon_hegrenade");
}
if(gRound<=3 && gRound>=2){
give_item(id, "weapon_flashbang");
}
if(gRound<=2){
give_item(id, "item_nvgs");
give_item(id, "weapon_smokegrenade");
}
if(gRound<=4 && gRound>=2 && get_user_team(id)==2){
give_item(id, "item_thighpack");
}
Jak widać, niestety, warunek gRound>=2 jest podwójnie, niepotrzebnie powtórzony.
I tutaj tkwi problem, a raczej w optymalizacji kodu / zastosowaniu innego algorytmu.

A oto kod PHP:
Spoiler


I dokumentacja:
Spoiler
Odpowiedz

  • +
  • -
Portek - zdjęcie Portek 31.08.2012

Nie ma chyba czegoś takiego, bo jak niby to miało by wyglądać? Switch w tym wypadku to właściwie ten zapis, przy użyciu innej funkcji, aczkolwiek chyba jako jedyny jako tako spełnia Twoje wymagania.
Odpowiedz

Gość_21977_* 31.08.2012

W takim razie chyba nie ma co się nad tym rozwlekać.
Dzięki za odpowiedź.
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 31.08.2012

Możecie jeszcze skorzystać z rejestru flag. Chyba byłoby to optymalniejsze.
Odpowiedz
Zablokowany