Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
CBot - kilka spraw
Autor Wiadomość
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 08-01-2010, 21:52   CBot - kilka spraw

Wyszło przy pisaniu validatora cbot, po kolei:

1. goto - ile argumentów moze mieć?
na pewno może byc tak:
Kod:
point a;
goto(a);

ale czy moze być tak:
Kod:
point a;
goto(a.x,a.y);
//albo
float b,c;
goto(b,c);

?

2. ipf - co dokładnie robi?
No właśnie niby zmienia szybkość wykonywanie instrukcji, ale co to za szybkość?
Szybkość na 1 sekunde? Czy moze inaczej?
I jaka jest domyślna wartość?
Jaką maksymalną wartość można ustawic?

3. coś o .load
Z moich obserwacji wynika że poprawny jest zapis:
Kod:
object a;
if(a.load.load.load==null) message("a");

bo load jest objectem, ale nie wiem czy:
a) wywali błąd
b) warunek będzie zawsze prawdziwy
Jeżeli b) jets poprawne, to ile razy można tak dopisywac ".load"

4. Jaki jest maksymalny poziom zagnieżdżenia ifów, itp?
Kiedyś w pascalu było chyba 256...

5. Czy istnieje limit zagnieżdżenia funkcji w funkcji?
Tzn ile razy można:
Kod:
turn(direction(radar(losujjObcego(costam(...)))));


To chyba wszystko na dziś ;)
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
C ruels! 
Neokid


Twoja ulubiona misja: user levels,swobodna gra i KO
Wiek: 22
Dołączył: 08 Paź 2009
Posty: 185
Skąd: Devil MachineXD
Wysłany: 08-01-2010, 22:00   

To chyba powinno być w dziale Programy ale nie jestem pewien.
_________________
http://doladujse.pl/7415 -doładowania na koma
http://www.minecraftaccounts.com?join=34132 - darmowe konta do gry Minecraft
 
     
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: 08-01-2010, 22:05   

ad 1)
goto() moze miec 4 parametry: cel(pozycja), wysokosc(nad poziomem gruntu, czyli altitude, ignorowane przez roboty nielatajace), sposob dotarcia(zatrzymywanie sie czy jazda "na pale", dobrze widac na przykladzie robotow latajacych, dla wartosci 0 jedzie normalnie, dla wartosci 1 nie zatrzymuje sie - nawet po osiagnieciu pozycji docelowej!) oraz zderzenie (dla wartosci 0 normalnie, dla wartosci 1 ignoruje wszystkie obiekty po drodze).
ad 2)
Cytat:
No właśnie niby zmienia szybkość wykonywanie instrukcji, ale co to za szybkość?

Cytat:
Jaką maksymalną wartość można ustawic?

Ograniczona jest tylko specyfikacja sprzetu i takimi [cenzura]. Ja najczesciej ustawiam 1000 dla robotow korzystajacych z instrukcji motor() oraz na biezaco liczacych pozycje, oraz w kazdej funkcji daje 1000. Dla robotow korzystajacych z funkcji ktore zajmuja pewien czas (goto(), wait(), turn())i nie liczacych na biezaco pozycji zostawiam domyslna wartosc.
ad 3)
Zakladajac, ze a to robot lub osa ktora akurat cos przenosi:
a.load odwoluje sie do tego co dany obiekt przenosi.
a.load.load zawsze zwroci null - przedmiot przenoszony przez robota nie moze przenosic innego przedmiotu.
a.load.load.load - prawdopodobnie wywali blad - obiekt o wartosci null nie ma czegos takiego jak load.
Cytat:
I jaka jest domyślna wartość?

Okolo 100-200.
ad 4)
Jesli limit istnieje, to mi sie nie udalo jeszcze go osiagnac.
ad 5)
Bez problemu powinno lyknac ponad 10 funkcji, co najwyzej fps spadnie. Problem w napisaniu takich funkcji O_O. Jeszcze jest mozliwosc przepelnienia stosu (zaobserwowac mozna, jesli jako parametr do funkcji podamy dana funkcje)
Instructions per frame - instrukcje/klatka.
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 08-01-2010, 22:23   

Berserker napisał/a:
ad 1)
goto() moze miec 4 parametry: cel(pozycja), wysokosc(nad poziomem gruntu, czyli altitude, ignorowane przez roboty nielatajace), sposob dotarcia(zatrzymywanie sie czy jazda "na pale", dobrze widac na przykladzie robotow latajacych, dla wartosci 0 jedzie normalnie, dla wartosci 1 nie zatrzymuje sie - nawet po osiagnieciu pozycji docelowej!) oraz zderzenie (dla wartosci 0 normalnie, dla wartosci 1 ignoruje wszystkie obiekty po drodze).

To wiem, ale gdzieś tu na forum widziałem goto(x,y); i nie wiem czy to jest poprwane, tzn: czy zamiast jednego argumentu typu point moga być 2 argumenty typu float?
Bo możnaby coś takiego zrobić pzrez pzreciążenie funkcji goto.
Berserker napisał/a:

Instructions per frame - instrukcje/klatka.

Ale czy colobot posiada jakis limiter fpsów?
Jak nie ma to jest źle.
Bo na nowym komputerze będzie mi dziłać tak jak asteroids: zanim zdążyłem cokolwiek zrobic to już pzregrywałem, bo gra była przystosowana do dużo wolniejszych kompów.
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
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: 08-01-2010, 22:27   

Cytat:
To wiem, ale gdzieś tu na forum widziałem goto(x,y); i nie wiem czy to jest poprwane, tzn: czy zamiast jednego argumentu typu point moga być 2 argumenty typu float?
Bo możnaby coś takiego zrobić pzrez pzreciążenie funkcji goto.

Mozna, ale wydaje mi sie, ze powinno to sie brac w dodatkowy nawias. Nie wiem, czy przy podaniu nastepnych parametrow gra bedzie wiedziala co jest jeszcze pozycja, a co juz wysokoscia.
Cytat:
Ale czy colobot posiada jakis limiter fpsów?
Jak nie ma to jest źle.

Ja mam w miare dobrego kompa, a mam ~35 fps, wiec wydaje mi sie, ze jest. Z drugiej strony, mam wrazenie, ze predkosc fizyki w colobocie jest w odniesieniu do czasu rzeczywistego, a nie klatek.
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 08-01-2010, 22:37   

Berserker napisał/a:
Cytat:
To wiem, ale gdzieś tu na forum widziałem goto(x,y); i nie wiem czy to jest poprwane, tzn: czy zamiast jednego argumentu typu point moga być 2 argumenty typu float?
Bo możnaby coś takiego zrobić pzrez pzreciążenie funkcji goto.

Mozna, ale wydaje mi sie, ze powinno to sie brac w dodatkowy nawias. Nie wiem, czy przy podaniu nastepnych parametrow gra bedzie wiedziala co jest jeszcze pozycja, a co juz wysokoscia.

Można łatwo odróżnić. np przez 2 deklaracje funkcji goto:
Kod:
int goto(point pos,[float att,[int dot, [int zde]]]);
int goto(float x, float y,[float att,[int dot, [int zde]]]);

Berserker napisał/a:

Cytat:
Ale czy colobot posiada jakis limiter fpsów?
Jak nie ma to jest źle.

Ja mam w miare dobrego kompa, a mam ~35 fps, wiec wydaje mi sie, ze jest. Z drugiej strony, mam wrazenie, ze predkosc fizyki w colobocie jest w odniesieniu do czasu rzeczywistego, a nie klatek.

Kiedyś to przetestuje.
Jeżeli masz racje, to przy 5fps dotarcie od 1ednego do drugiego końca mapy powinno robotowi zająć tyle samo czasu rzeczywistego (mierzionego zegarkiem na ręce) co przy 30fps
Kiedyś zrobie mojemu windowsowi takiego loada że ledwo wytrzymie, włącze colobota i sprawdze.
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 08-01-2010, 22:44   

sajmon313 napisał/a:
Bo na nowym komputerze będzie mi dziłać tak jak asteroids: zanim zdążyłem cokolwiek zrobic to już pzregrywałem, bo gra była przystosowana do dużo wolniejszych kompów.

Nie ma limitu FPS ale za to oblicza sobie speed factor (tak to nazwałem).
Czyli bierze czas generowania ostatniej klatki i po podzieleniu przez jakąś stałą i pomnożeniu przez szybkość (F4,F5,F6) ustawia wartość speed factor.
Teraz np. przy ruchu robotem wektor Δposition (zmiana pozycji) jest mnożony przez ten speed factor.

Co to daje:
Załóżmy że mamy 10 FPS, czas generacji klatki wynosi zatem 100ms - 0.1s
Powiedzmy że stała wynosi 1.
Więc w jednej klatce jeśli prędkość wynosi 4.5m/s to po pomnożeniu przez 0.1s wyjdzie nam 0.45m - i o tyle przesunie się robot w jednej klatce.

Załóżmy że mamy 100 FPS (ambitne...), czas generacji klatki wynosi zatem 10ms - 0.01s
Stała wynosi 1.
Prędkość wynosi 4.5m/s to po przemnożeniu przez 0.01s wychodzi nam 0.045m - o tyle przesunie się robot w jednej klatce.

W ciągu sekundy robot przesunie się o ten sam wektor.

Jest to najlepsze rozwiązanie, bo korzysta z poprzedniej klatki - czyli realtime. Jeśli robilibyśmy odwrotność FPS (tak jak w opisie) to aktualizacja odbywałaby się co sekundę czyli np. przy gwałtownym zamuleniu procesora (np. antywirus) i odmuleniu z początkiem następnej sekundy prędkość strasznie by się zwiększała.
Niestety to 'najlepsze rozwiązanie' nie jest dostępne na komputerach z zegarem o słabej rozdzielczości (np. Atari XE) lub bez zegara.

Bibliografia:
'OpenGL i wprowadzenie do programowania gier', wyd. Nakom, autorów i rok wydania sam se znajdź :P
_________________
1Tbps Project && Telecomix Network

 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012