Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
5 w jednym |
Autor |
Wiadomość |
Majkel
Wiek: 40 Dołączył: 26 Gru 2011 Posty: 9 Skąd: z kontenera
|
Wysłany: 26-12-2011, 01:57 5 w jednym
|
|
|
Witam, stworzyłem kilka funkcji i postanowiłem zmienić trochę styl programowania, staram się wszystkie procedury pisać w jednej tak aby główny program pisać w pierwszym module
chciałbym wiedzieć czy wszystko jest ok, czy można coś poprawić, skrócić, ulepszyć i jakiej długości kod może się zmieścić w jednym pliku ? Program będzie nadal rozbudowywany.
Wszystko robiłem latającym robotem i było ok, jedynym problemem była natura (roslinki) pozatym wszystko ok.
Program - tu piszemy główny program
Procedury:
Zasilaj(miejsce) - robot wyszukuje pełną baterię i zasila nią budynek lub robota
IdzDo(miejsce) - robocik podąża do wybranego miejsca lub obiektu albo mobka
LadujBaterie(miejsce, punkt) robot szuka niepełnych baterii ładuje i zwozi do jednego miejsca, punkt - jeżeli true to zostawia baterie w dokładnie w miejscu w które mu wskażemy, jeżeli false to od miejsca które wskażemy znajdzie najbliższe wolne.
Zbieraj(rzecz, miejsce, punkt) - zbiera przedmioty które mu wskażemy i zanosi do danego miejsca (punkt true lub false j/w)
SprawdzBaterie - sprawdza stan akumulatorka i robi co trzeba
pamiętamy o używaniu flag np jako miejsca zwożenia itemów albo wskazywania drogi
poza tym wszystkie funkcje wzbogaciłem o komunikaty
Kod: | extern void object::Program()
{
/////////////Tu piszemy cały program
/////////////Koniec programu
}
void object::Zasilaj(float miejsce)
{
object item;
int zasieg;
zasieg=1;
while ( zasieg != 50 )
{
item = radar(PowerCell,0,360,zasieg,zasieg+1,-1);
if (item != null)
{
if (item.energyLevel == 1)
{
goto(item.position);
grab();
IdzDo(miejsce);
drop();
message(this.category + ": -Obiekt zasilony", DisplayInfo);
zasieg=49;
}
}
zasieg=zasieg+1;
}
}
void object::IdzDo(float miejsce)
{
object item;
item = radar(miejsce);
goto(item.position);
message(this.category + ": -Cel osiagniety: " + item.category, DisplayInfo);
}
void object::LadujBaterje(float miejsce, bool punkt)
{
object item;
int zasieg;
zasieg=1;
while ( zasieg != 50 )
{
IdzDo(miejsce);
item = radar(PowerCell,0,360,zasieg,zasieg+1,-1);
if (item != null)
{
if (item.energyLevel < 0.9)
{
goto(item.position);
grab();
IdzDo(PowerStation);
while (item.energyLevel<1)
{}
IdzDo(miejsce);
if (punkt == false)
{
goto(space(position));
}
drop();
message(this.category + ": -" + item.category + " na miejscu.", DisplayInfo);
}
}
zasieg=zasieg+1;
}
}
void object::Zbieraj(float rzecz, float miejsce, bool punkt)
{
object item;
IdzDo(miejsce);
item = radar(rzecz,0,360,20,50099,-1);
goto(item.position);
grab();
message(this.category + ": -" + item.category +" podniesiony.", DisplayInfo);
IdzDo(miejsce);
if (punkt == false)
{
goto(space(position));
}
drop();
message(this.category + ": -" + item.category + " na miejscu.", DisplayInfo);
}
void object::SprawdzBaterie()
{
if (energyCell.energyLevel < 1)
{
message (this.category + ": -Bateria rozladowana.");
IdzDo(PowerStation);
while (energyCell.energyLevel != 1)
{}
}
message(this.category + ": -Bateria pelna");
} |
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 26-12-2011, 13:10
|
|
|
Zamiast tego:
Kod: | while (item.energyLevel<1)
{} | Pisz tak: Kod: | while (item.energyLevel<1) wait(0.1); |
Nie spamuj tak tymi wiadomościami. Dobry program to taki o którym możesz zapomnieć po jego uruchomieniu.
Używaj tego:Takie programy są odporne na błędy więc nie trzeba się w ogóle nimi przejmować.
Nie lubię programów uniwersalnych, wolę wyspecjalizowane. |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 26-12-2011, 14:22
|
|
|
Formatuj:
<czyta dalej program>
Nie bede wszystkiego wyszczegolnial, przede wszystkim formatuj zawsze tak samo, a nie co funkcja to inaczej.
Przy nawiasach spacji sie nie daje, nie robisz
Kod: |
move ( 5 ) ;
goto( position );
while (true)
|
tylko
Kod: |
move(5);
goto(position);
while(true)
|
W ten sposob nie odciagasz uwagi od rzeczy wazniejszej, ktora sa operacje matematyczne i logiczne. Zawsze oddzielamy je spacja od zmiennych (oprocz / i %, ktore ja lubie pisac razem).
Czyli przyklad ktory MROCZA dal:
Kod: | while (item.energyLevel<1) wait(0.1); |
Ja bym zapisal:
Kod: | while(item.energyLevel < 1) wait(0.1); |
I teraz jakbym przypadkiem pomylil sie i postawil znak > zamiast <, to nie szukalbym kupki pixeli w zbitym tekscie, tylko ladnie mam wydzielone spacjami.
Nazwy zmiennych. Maja byc krotkie i sensownie nazwane. 80% moich zmiennych lamie ten drugi punkt, ale to juz kwestia jak orientujesz sie w swoim programie. Co do dlugosci, to jak widzisz 10znakowego potwora pojawiajacego sie w co drugiej funkcji, to potrafi troche zniesmaczyc, ale najgorsza rzecza sa wlasnie operacje na takich zmiennych. Inaczej wyglada:
Kod: |
dist = len * len - sin(dir) * 3/(x + len);
|
A inaczej.
Kod: |
zasieg = odleglosc * odleglosc - sin(azymut) * 3/(odleglosc + info);
|
A to jest proste dzialanie.
Wiec lepiej nazwac zmienna z, a przy deklaracji dac komentarz "to jest zasieg", niz przez caly program pisac "zasieg".
@up
Z errmode(0) trzeba uwazac, program potrafi cale funkcje przeskakiwac i mozna dziwne rezultaty uzyskac. |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 26-12-2011, 17:26
|
|
|
Berserker napisał/a: | Przy nawiasach spacji sie nie daje, nie robisz
Kod: | move ( 5 ) ;
goto( position );
while (true) |
tylko
Kod: | move(5);
goto(position);
while(true) |
|
ja piszę to tak:
Kod: | move (5);
goto (position);
while(true) |
Tamten przykład dałem z jego programu sam też daje spacjeprzy znakach takich jak: < > - + =.
Jeżeli chodzi o zmienne to używam tylko słów angielskich takich jak "item" czy "flag" albo skrótów typu "err"
[ Dodano: 26-12-2011, 17:30 ]
Co do errmode(0); to nieumiejętnie wykożystane może narobic sporego bigosu.
Lepiej żeby program został przerwany po błędzie niż później robił jakieś bzdury.
Dlatego jak się tego używa to trzeba się przygotowac na każdą ewentualnośc. |
|
|
|
|
Majkel
Wiek: 40 Dołączył: 26 Gru 2011 Posty: 9 Skąd: z kontenera
|
Wysłany: 26-12-2011, 20:22
|
|
|
super, dzięki za uwagi, zaraz zrobię z tym porządek, jednak program w jednym module - tak wolę, bo chyba nie da się zrobić odwołania do innych modułów (plików) - niewiem za bardzo jak to nazwać
message postanowiłem pozostawić gdyż czasami zdarza się że program się wykrzacza a wtedy wiem na jakim etapie
mam też problem z radarowaniem, robot radaruje z miejsca w którym się znajduje, a czy da sie taj zrobić żeby radarował z innego miejsca ? bez jechania do niego ? |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 26-12-2011, 21:04
|
|
|
Cytat: | mam też problem z radarowaniem, robot radaruje z miejsca w którym się znajduje, a czy da sie taj zrobić żeby radarował z innego miejsca ? bez jechania do niego ? |
Funkcja search().
Cytat: | message postanowiłem pozostawić gdyż czasami zdarza się że program się wykrzacza a wtedy wiem na jakim etapie |
Nie lepiej pisac odrazu dobrze?
Cytat: | super, dzięki za uwagi, zaraz zrobię z tym porządek, jednak program w jednym module - tak wolę, bo chyba nie da się zrobić odwołania do innych modułów (plików) - niewiem za bardzo jak to nazwać |
Wydaje mi sie, ze chodzi ci o funkcje, wtedy to kazdy tak robi, ze jest glowna funkcja ktora odpowiada za program i funkcje pomocnicze sluzace porzadkowaniu programu.
MROCZA napisał/a: |
wykożystane |
Warna bys chcial? |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 26-12-2011, 21:14
|
|
|
Przepraszam. To dlatego, że teraz piszę z laptopa kuzynki z Internet Eksplorera a to to nie ma słownika. Z resztą yrażnie widac jaki mam system i przeglądarkę. Zazwyczaj używam opery. |
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 27-12-2011, 10:31
|
|
|
Berserker napisał/a: | Warna bys chcial? |
Oj tam, każdemu może się zdarzyć jeden błąd. To jeszcze nie powód do warna, gorzej, gdy nie widać nawet chęci poprawy. |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|