|
Polski Portal COLOBOTa COLOBOT Polish Portal |
|
Problemy [programowanie] - Lot
Revis - 19-06-2010, 15:12 Temat postu: Lot Witam, jestem dość nowy w to, grałem kiedyś sporo pare lat temu, teraz znów powróciłem i mam problem, robiłem sobie programik, i czasami bot latajacy praktycznie sie nie ruszal probojac wjechac na gorke zamiast podleciec, narazie zrobilem zeby program sie nie przerywal podczas gdy sie "zatnie" bo w koncu mu sie udaje dojsc do celu ale zuzywa prawie cala baterie a to nie wielki dystans , nie mam pojecia jak zrobic aby Transporter Latajacy, przez program uniósł sie na 2 metry, bez zadnego celu, w sensie zeby zrobil to jak turn (90), albo move (5).
Bartek c++ - 19-06-2010, 15:39
hmm z tego co wiem latające boty nie mogąlecieć w bok i do przodu na raz ...
dam propozycję.
Kod: | while ( true )
{
float a,b;
a = position.z;
b = position.z + 2;
jet(1);
if (a < b )
{
break;
}
} |
Program wznosi bota na 2 metry i wyłącza program.
a to aby wszedł na górke.
Kod: | while ( true )
{
float a,b;
a = position.z;
b = position.z + 2;
jet(1);
if (a < b )
{
move(5);
break;
}
} |
adiblol - 19-06-2010, 16:43
Bartek c++: widzę że nie przetestowałeś programu. Nie ma szans na zadziałanie:
1. a = b to instrukcja przypisania a nie porównania!!!
2. gdyby zamienić to na a == b to i tak by nie działało, lepiej dać a < b lub a > b, zależnie od potrzeb.
Berserker - 19-06-2010, 20:22
Nikt tu sie nie postaral, zeby wytlumaczyc jak ogolnie sie lata...
Jest sobie funkcja jet(). Steruje ona moca silnika odrzutowego, w nawiasach podaje sie jaka czesc mocy silnika ma byc wykorzystana i czy ma robot leciec w gore czy w dol. Wartosci ujemne spowoduja opadanie, a dodatnie - domysl sie sam.
A program Bartka nie ma sensu, batonika dostanie ten, kto sie domysli dlaczego.
COLOBOT - 19-06-2010, 21:29
Berserker napisał/a: | A program Bartka nie ma sensu, batonika dostanie ten, kto sie domysli dlaczego. |
Przypisanie wartości a i b powinno być przed pętlą, bo w obecnym programie po każdej iteracji program ustala nowe współrzędne docelowe i w konsekwencji leci "do nieba".
Poza tym a jest zawsze mniejsze od b , zamiast a powinno być position.z
No i przydałoby się jeszcze wait(0.1), żeby procka nie przemęczać. Aha, jeszcze silnik odrzutowy trzeba wyzerować.
Poprawny i zoptymalizowany program wygląda tak:
Kod: | float b;
b = position.z + 2;
jet(1);
while (position.z < b) wait(0.1);
jet(0); |
|
|