eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › IL (rozważania o fail)
Ilość wypowiedzi w tym wątku: 8

  • 1. Data: 2009-07-27 10:58:47
    Temat: IL (rozważania o fail)
    Od: "fiR" <p...@p...onet.pl>


    drobne rozwazania o fail, skryptach / IL (intermediate language) itp
    (bardziej w sumie o fail niz o IL)

    Onegdaj wspominalem o regule (próbnej bo nie przemyslanej)
    aby argumenty funkcji sprawdzac wewnatrz funkcji juz
    po wywolaniu nie przed i ogolniej zeby jak najwięcej
    mechaniki programu obslugiwać wewnatrz funkcji.

    Względnie ostatnio wspominalem tu o użyteczności faila
    - juz nie pamietam wszystkiego dokladnie ale było tam
    m in o tym ze o ile trzymac w tablicy szereg instancji
    roznych typow to wywolanie jakiejś metody którą obsługuje
    część tych instancji powinno sie cicho niepowiesć -
    nie być errorem a dać faila - bylo tam dokladniej opisane.

    Wczoraj jezdząc na rowerze (moze z tym przesadzam bo boli
    mnie mocno serce po boreliozie) rozmyślałem o ew
    zaimplementowaniu jezyka skryptowego w grze roguelike
    (nic ta skrypterka to w porownaniu z kodem w c
    nie wnosi ale byloby to bardzo ciekawe ze wzgledu
    na UZYTKOWNIKA) i tez ogolnie o idei skryptów
    (bo temat obslugi dzialan postaci na mapie w
    grze roguelike daje naprawde ciekawy punkt wyjsciowy do
    obmyslania tematu skryptów/IL) i ew mozliwosci
    przynajmniej czesciowego pozbycia sie ifów w
    takim jezyku skryptowym, czy spostrzezenie
    ze w kazdym programie wykonuje sie jakby ruch
    dwukierunkowy 'w przód' gdy kod cos wykonuje i 'w
    tył' gdy kod coś odczytuje, na przykład każdy if
    jest jakby takim krokiem w tył ('readem')

    Nie mam tu za wiele do powiedzenia ale z zastanawiania
    sie nad tym wyniknela mozliwosc jakby elementow
    nieco nowej techniki programowania do rozwazenia
    ktora tu moge przedstawić.

    Postac jest odpalana cyklicznie w petli i to co sie
    dzieje w tej metodzie .onUpdate() moze juz byc
    tematem skryptu - postac moze na przykład wypic
    potion odnowy zdrowia, uciekac z pola o ile stoi w
    ogniu, podniesc przedmiot o ile ma pod nogami jakis
    przedmiot itd generalnie jest to realnie lista setek
    mozliwych zachowań z okresloną rozumowo kolejnoscią/
    hierarchią tych wywołań (bo kolejnośc tych wywolan
    swiadczy o inteligencji postaci - jesli stoi w ogniu
    to nie powinna jesc chleba ani czytac ksiazki)
    normalnie w c kod wyglada w schemacie jakos tak

    if(...) uciekaj(...);
    if(...) pickUp(...);
    if(...) rest(...);
    if(...) drink(...);



    [[[[[[[[

    moj stary zaczatkowy kod (napisany z 7 lat temu)
    realnie wyglada tak (moge w sumie tu wkleic jako
    ciekawostke, jest to sam elementarny zaczątek - w sumie
    niestety o ile teraz mam wiecej doswiadczen z roboty
    w programowaniu to co do * skupienia * na kodzie bylem
    w lepszej formie i teraz nieustannie boje sie czy
    uda mi sie do takiej dobrej (co do skupienia i myslenia
    jak CodeManiac) wrócić :-/

    void PoruszBota(int i) // no tu sie objawia glownie inteligencja bota
    {

    int angr=postac[i].postac_cel; // po pierwsze uciekaj
    albo gon
    if(angr==NIEMA)
    {
    angr=RozejrzyjSieBocieZaWrogiemWOkolicy(i, 10);
    if(angr!=NIEMA) UczynWrogim(i, angr);
    }

    if (angr!=NIEMA && postac[i].ustos==wrogi)
    {
    if(typpostaci[postac[i].typ].czymiotacz) TryThrowWKogosPierwszymCoMasz
    (i, angr);
    IdzKu(i, postac[angr].pozx, postac[angr].pozy); return;
    }

    if (angr!=NIEMA && postac[i].ustos==przestraszony) { IdzOd(i, postac
    [angr].pozx, postac[angr].pozy); return; }

    int nro = RozejrzyjSieBocieZaJakasPostaciaWOkolicy(i, 5);
    if (nro!=NIEMA)
    if(AnimozjaTest(i, nro)) {postac[i].postac_cel=nro; return;}


    int nrp = RozejrzyjSieBocieZaJakimsPrzedmiotemNaZiemiiWOkolicy
    (i, 5);
    if (nrp!=NIEMA)
    if (przedmiot[nrp].pozx==postac[i].pozx && przedmiot[nrp].pozy==postac
    [i].pozy)
    PickUpItem(i, nrp);
    else
    IdzKu(i, przedmiot[nrp].pozx, przedmiot[nrp].pozy);
    else
    SlaniajSie(i);

    }


    ]]]]]]]]


    pominawszy te dygresje w swietle owego zastanawiania sie w
    temacie faila wydaje mi sie ze takie kody mozna by uproscić
    (zauwazalna jest akurat wlasnie wielka ilosc ifów) jesli by
    dac jako normalna mozliwosc wywolywania funkcji ktore mogą
    failnąć o ile nie zajdą specyficzne okreslone warunki

    uciekaj(); // jesli trzeba
    idz_woda
    idz_trawa
    pickUp(); // jesli mozna
    podnies_ciezkie
    podnies_lekkie
    drink(); // jesli trzeba
    rest(); //jesli trzeba
    attack(); //jesli costam

    nie przemyslem tego specjalnie poza ogolnym pomyslem ale
    pomysl jest w zarysie taki ze implementuje i wypisuje sie
    hierarchicznie liste kolejnych mozliwych czynnosci i w
    zaleznosci od okreslonej kondycji/sytuacji wiekszosc
    z nich da faile a okreslone sie wywolaja, np jesli zadziala
    uciekaj to w zaleznosci od typu przeleglego pola
    wykona sie idz_woda albo idz_trawa a reszta nizej sie
    tez wywola albo nie wywola - np w zaleznosci od wolnego czasu
    w turze i innych warunkow, przeniesienie mechaniki ('logiki'
    jak niektorzy mowia) z poziomu wywolan na sprawdzanie
    kondycji i obslugę faili mogloby chyba znacznie uproscić
    tu sprawy - choc nie obmyslalem tego do konca jest to
    taki pomysl - raczej do zaimplementowania w skrypcie choć
    moze i jako mechanizm w c2. Ew mozna jeszcze pomyslec
    o mechanizmie takiego automatycznego łączenia wywoalan

    onUpdate()
    {
    eat() | drink();
    pickup() | jump() | sleep();
    }

    ("|" znaczy wywolaj tylko jedną z szeregu - pierwsza ktora
    nie da faila)

    co przeniosloby troche roboty z wewnwtrznego sprawdzania
    kondycji i być moze przydaloby sie jako ogolny mechanizm
    pzry kodowaniu z failowanymi funkcjami, choć tutaj w tym
    kontekscie (wewnetrzne kondycje na faile)

    onUpdate()
    {
    eat();
    drink();
    pickup();
    jump();
    sleep();
    }
    byloby chyba lepsze



    fiR


    --
    odliczanie do 10 wg fana gwiezdnych wojen:

    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    7 7
    8 8
    9 9
    10 01







    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 2. Data: 2009-07-27 21:47:35
    Temat: Re: IL (rozważania o fail)
    Od: "Mariusz Marszałkowski" <b...@g...SKASUJ-TO.pl>

    fiR <p...@p...onet.pl> napisał(a):

    >
    > drobne rozwazania o fail, skryptach / IL (intermediate language) itp
    > (bardziej w sumie o fail niz o IL)

    A może tak:

    class Akcja {
    bool test() = 0;
    void wykonaj() = 0;
    };

    class Bieg : Akcja {
    bool test() { ... };
    void wykonaj() { ... };
    }

    class Drink : Akcja {
    bool test() { ... };
    void wykonaj() { ... };
    }

    ..........

    Akcja *a[10] = { new Bieg, new Drink, .... };

    for( i=0 ; i<10 ; i++ )
    if( a[i]->test() )
    a[i]->wykonaj();


    Pozdrawiam


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 3. Data: 2009-07-28 08:46:09
    Temat: Re: IL (rozważania o fail)
    Od: "fiR" <p...@p...onet.pl>

    > fiR <p...@p...onet.pl> napisał(a):
    >
    > >
    > > drobne rozwazania o fail, skryptach / IL (intermediate language) itp
    > > (bardziej w sumie o fail niz o IL)
    >
    > A może tak:
    >
    > class Akcja {
    >  bool test() = 0;
    >  void wykonaj() = 0;  
    > };
    >
    > class Bieg : Akcja {
    >  bool test() { ... };
    >  void wykonaj() { ... };  
    > }
    >
    > class Drink : Akcja {
    >  bool test() { ... };
    >  void wykonaj() { ... };  
    > }
    >
    > ..........
    >
    > Akcja *a[10] = { new Bieg, new Drink, .... };
    >
    > for( i=0 ; i<10 ; i++ )
    >  if( a[i]->test() )
    >     a[i]->wykonaj();
    >
    >
    > Pozdrawiam

    Ładny kod ("jak na c++") i faktycnie implementuje to o czym mówiłem :) -
    nie wiem jednak czy probowac implementowac "ową technikę" w swojej gierce czy
    programach - na ile jest ona użyteczna i czy nie lepsza niż gąszcz ifów (?)
    Ktoś moze coś sądzi na ten temat?
    Wogole jednak zaciekawił mnie temat tych "faili" Wie ktoś czy jest
    jakis język który wspiera takie "programowanie z failami" (?)

    fiR

    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 4. Data: 2009-07-28 10:02:42
    Temat: Re: IL (rozważania o fail)
    Od: Paweł Kierski <n...@p...net>

    fiR wrote:
    [...]
    > onUpdate()
    > {
    > eat() | drink();
    > pickup() | jump() | sleep();
    > }
    >
    > ("|" znaczy wywolaj tylko jedną z szeregu - pierwsza ktora
    > nie da faila)

    Dokładnie to możesz zrobić za pomocą ||. Operator || jest obliczany od
    lewej do prawej, dopóki któryś z członów wyrażenia nie da true w wyniku.

    --
    Paweł Kierski
    n...@p...net


  • 5. Data: 2009-07-28 10:20:20
    Temat: Re: IL (rozwaĹźania o fail)
    Od: "fiR" <p...@p...onet.pl>

    > fiR wrote:
    > [...]
    > > onUpdate()
    > > {
    > >       eat() | drink();
    > >       pickup() | jump() | sleep();
    > > }
    > >
    > > ("|" znaczy wywolaj tylko jedną z szeregu - pierwsza ktora
    > > nie da faila)
    >
    >   Dokladnie to mozesz zrobic za pomoca ||. Operator || jest obliczany od
    > lewej do prawej, dopoki ktorys z czlonow wyrazenia nie da true w wyniku.
    >

    No to swietnie nie wiedzilem w ogole o takiej mozliwosci
    programowania - wydawalo mi sie ze te sprawy nie są dobrze ustalone.
    Czyli z tego co mowisz mozna spokojnie pisac kody w stylu

    "( (Pobiegnij() || PobiegnijSzybko() || Idz() ) && ( WyciagnijPistolet() ||
    WyciagnijRevolver() ) ) || ChronSie();"

    I wszystko bedzie ok?

    Pominawszy temat samego "faila" to by dawalo duze uproszczenia
    w gąszczu ifów.

    fiR

    > --
    >     Pawel Kierski
    >     n...@p...net


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 6. Data: 2009-07-28 12:06:50
    Temat: Re: IL (rozważania o fail)
    Od: "Mariusz Marszałkowski" <b...@g...SKASUJ-TO.pl>

    fiR <p...@p...onet.pl> napisał(a):

    > programach - na ile jest ona użyteczna i czy nie lepsza niż gąszcz ifów (?)
    > Ktoś moze coś sądzi na ten temat?

    Co tu sądzić... gąszcz if-ów też może być zrobiony przejrzyście i
    czytelnie, ale przez wyspecjalizowane funkcje zawsze będzie trochę
    lepiej.

    Pozdrawiam


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 7. Data: 2009-07-28 12:36:24
    Temat: Re: IL (rozważania o fail)
    Od: A.L. <a...@a...com>

    On Mon, 27 Jul 2009 12:58:47 +0200, "fiR"
    <p...@p...onet.pl> wrote:

    >
    >drobne rozwazania o fail, skryptach / IL (intermediate language) itp
    >(bardziej w sumie o fail niz o IL)
    >
    >Onegdaj wspominalem o regule (próbnej bo nie przemyslanej)
    >aby argumenty funkcji sprawdzac wewnatrz funkcji juz
    >po wywolaniu nie przed i ogolniej zeby jak najwięcej
    >mechaniki programu obslugiwać wewnatrz funkcji.
    >

    Zdaje sei ze odkrywasz zarowke. Czy slyszales o programming by
    contract?... Jak nei to se poczytaj

    A.L.


  • 8. Data: 2009-07-28 13:34:43
    Temat: Re: IL (rozwa o fail)
    Od: Michal Kleczek <k...@g...com>

    fiR wrote:

    [ciach]
    >
    > pominawszy te dygresje w swietle owego zastanawiania sie w
    > temacie faila wydaje mi sie ze takie kody mozna by uproscić
    > (zauwazalna jest akurat wlasnie wielka ilosc ifów) jesli by
    > dac jako normalna mozliwosc wywolywania funkcji ktore mogą
    > failnąć o ile nie zajdą specyficzne okreslone warunki
    >
    > uciekaj(); // jesli trzeba
    > idz_woda
    > idz_trawa
    > pickUp(); // jesli mozna
    > podnies_ciezkie
    > podnies_lekkie
    > drink(); // jesli trzeba
    > rest(); //jesli trzeba
    > attack(); //jesli costam

    Mnie sie zdaje, ze nie ma co tutaj wymyslac, bo od opisywania takich rzeczy
    jest:
    http://en.wikipedia.org/wiki/Finite-state_machine

    --
    Michal

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: