Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Kolejnosc warukow i ich optymalnosc


Najlepsza odpowiedź sebul , 15.01.2014 08:24

Tak, kolejność warunków ma znaczenie, w każdym warunku wszystko jest sprawdzane od lewej i jeśli jeszcze przed sprawdzeniem wszystkiego będzie już wiadomo, że dany warunek się spełni lub nie, to kolejne warunki nie będą sprawdzane. Przejdź do postu


  • Zamknięty Temat jest zamknięty
9 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.01.2014 21:15

witam.
Jaka jest najoptymalniejsza kolejnosc warunkow?
Przyklad
public TakeDamage()
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_klase[idattacker])
        return HAM_IGNORED;
    
    if(damagebits & DMG_BULLET)
    {
        new weapon = get_user_weapon(idattacker);
        
        if(weapon == CSW_KNIFE && damage > 20.0 && random_num(1,2) == 1)
    }
}
a moze taka
public TakeDamage()
{
    if(!is_user_connected(idattacker)||!ma_klase[idattacker]||!(damagebits & DMG_BULLET))
        return HAM_IGNORED;
    
        new weapon = get_user_weapon(idattacker);
        
        if(weapon == CSW_KNIFE && damage > 20.0 && random_num(1,2) == 1)
}
lepiej pakowac wszystko do jednego if i jesli jest rozne to ham ignored czy lepiej jest uzyc jednego if i zrobic jeden dlugi warunek za pomoca '&&', a moze podzielic (na poczatku if connected, potem ma klase, potem czy dmg jest z broni (damagebits), a na koncu random itp.). Jak to zrobic optymalnie. proszę o rozwiniecie odpowiedzi bo zzera mnie ciekawosc.
  • +
  • -
  • 0

#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 14.01.2014 22:01

Akurat ten przykład co podałeś, to tam nie ma różnicy w kolejności warunków, tylko kilka warunków zamieniłeś na jeden. Jak jest lepiej? Tak jak Ci wygodniej, bo różnicy w optymalności nie ma lub ona jest na tyle mała, że nie trzeba sobie tym zawracać głowy.
  • +
  • -
  • 3

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 14.01.2014 22:14

Oba przypadki, które podałeś są takie same.

 

W drugim przypadku i tak leci po kolei od lewej czyli sprawdzi po kolei jak wyżej :P.

 

+ Jeżeli ogólnie chodzi o kolejność to zawsze na początku sprawdzaj czy jest połączony - potem czy zmienna jest np. true, a potem twoje inne warunki :D.


  • +
  • -
  • 2

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 14.01.2014 22:44

lepiej pakowac wszystko do jednego if i jesli jest rozne to ham ignored czy lepiej jest uzyc jednego if i zrobic jeden dlugi warunek za pomoca '&&', a moze podzielic (na poczatku if connected, potem ma klase, potem czy dmg jest z broni (damagebits), a na koncu random itp.)

 

różnica jest minimalna i pomijalna a długie ify są trudniejsze do czytania przez programistę więc po prostu łącz obie techniki z głową


  • +
  • -
  • 2

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 15.01.2014 07:51

a to nie jest tak ze jak ze
warunek && warunek
i pierwszy jest falsz to drugi sprawdza wtedy czy nie? Bo wtedy ulozenie warunkow chyba cos daje?
  • +
  • -
  • 0

#6 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 15.01.2014 08:24   Najlepsza odpowiedź

Tak, kolejność warunków ma znaczenie, w każdym warunku wszystko jest sprawdzane od lewej i jeśli jeszcze przed sprawdzeniem wszystkiego będzie już wiadomo, że dany warunek się spełni lub nie, to kolejne warunki nie będą sprawdzane.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 15.01.2014 17:22

Czyli opłaca się używać warunków w jednej linii.

A jak je ustawić?

dajmy na to mam dane:

ma_perk
is_user_connected(id)
random_num (1, 3) == 1
damagebits & DMG_BULLET

Jak je ustawić od lewej do prawej?


sebul (16.01.2014 15:20):
Tak jak już zostało napisane, czy dasz to w jednym warunku, czy w kilku, nie ma praktycznie różnicy, bo nawet jak dasz kilka warunków, to jak pierwszy się nie spełni, to do reszty nawet nie dojdzie.

  • +
  • -
  • 0

#8 Zabijaka Gryps

    Wszechwiedzący

  • Power User

Reputacja: 266
Wszechwidzący

  • Postów:563
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Świdnica
Offline

Napisano 15.01.2014 17:26

is_user_connected(id) && ma_perk && damagebits & DMG_BULLET && random_num (1, 3) == 1
  • +
  • -
  • 2

#9 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 15.01.2014 17:34

Mogłbyś wyjaśnić dlaczego takie kryterium?


  • +
  • -
  • 0

#10 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 15.01.2014 17:56

is_user_connected(id) - oczywiste, sprawdzamy, czy gracz jest połączony - to chyba podstawa

ma_perk[id] - wypadałoby sprawdzić, czy gracz ma ten item, zanim coś zaczniemy działać.

damagebits & DMG_BULLET - gdy już ustalone wszystko, sprawdzamy czy to obrażenia od kul

losowanie - raczej na końcu się daje. Nie ma sensu losować, gdy np. kolejny warunek nie zostanie spełniony. 


  • +
  • -
  • 2




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych