-
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsgate1.onet.pl!niusy
.onet.pl
From: "fiR" <p...@p...onet.pl>
Newsgroups: pl.comp.programming
Subject: IL (rozważania o fail)
Date: Mon, 27 Jul 2009 12:58:47 +0200
Organization: Onet.pl
Lines: 192
Sender: k...@n...test.onet.pl
Message-ID: <0...@n...onet.pl>
NNTP-Posting-Host: newsgate1.onet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: 8bit
X-Trace: newsgate1.test.onet.pl 1248692327 9239 213.180.130.17 (27 Jul 2009 10:58:47
GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Mon, 27 Jul 2009 10:58:47 +0000 (UTC)
Content-Disposition: inline
X-Mailer: http://niusy.onet.pl
X-Forwarded-For: 10.5.0.62, 83.18.201.138, 192.168.243.176
X-User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB5)
Xref: news-archive.icm.edu.pl pl.comp.programming:182816
[ ukryj nagłówki ]
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
Następne wpisy z tego wątku
- 27.07.09 21:47 Mariusz Marszałkowski
- 28.07.09 08:46 fiR
- 28.07.09 10:02 Paweł Kierski
- 28.07.09 10:20 fiR
- 28.07.09 12:06 Mariusz Marszałkowski
- 28.07.09 12:36 A.L.
- 28.07.09 13:34 Michal Kleczek
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-22 Gdańsk => System Architect (Java background) <=
- 2025-01-22 Katowice => Senior Field Sales (system ERP) <=
- 2025-01-22 Warszawa => Java Developer <=
- 2025-01-22 pokolenie Z
- 2025-01-22 Wyświtlacz ramki cyfrowej
- 2025-01-22 Białystok => Architekt rozwiązań (doświadczenie w obszarze Java, A
- 2025-01-22 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2025-01-22 Ostrów Wielkopolski => Konsultant Wdrożeniowy Comarch XL/Optima (Ksi
- 2025-01-22 oferta na ubezpieczenie OC życie prywatne
- 2025-01-22 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-01-22 Warszawa => International Freight Forwarder <=
- 2025-01-22 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-21 Zgromadzenie użytkowników pojazdów :-)
- 2025-01-21 bateria na żądanie
- 2025-01-21 Warszawa => IT Business Analyst <=