|
Polski Portal COLOBOTa COLOBOT Polish Portal |
 |
Problemy [programowanie] - Program do osy.
FE4R - 09-01-2010, 22:26 Temat postu: Program do osy. Hej hej,
Stworzyłem bardzo prosty program dla osy i mam kilka problemów, dotyczących zmiennych.
Lecz przedtem chciałem przedstawić kilka cech programu:
:arrow: Program nie używa goto();, lecz motor();, więc osa jest szybka i praktycznie się nie zatrzymuje.
Osa jest 'celna'
Można używać go na wielu osach jednocześnie.
Ale czasami się psuje, osa się zatrzymuje albo ma jakieś inne głupie zajawki.
Wysokość zrzutu materii organicznej jest 5x większa niż u zwykłej osy, więc bardzo trudno zestrzelić ją z
ziemi.
Problem jest taki, że chciałem podzielić program na 1 funkcję główną extern oraz 3 funkcje poboczne, lecz nie wiem, jak zrobić, aby wszystkie zmienne były dostępne dla wszystkich funkcji.
Na początku zastosowałem sposób, aby wszystkie zmienne były w publicznej klasie.
Jednak w ten sposób tylko jedna osa może mieć ten program, gdyż nie można zadeklarować tej samej klasy kilka razy, tylko jej egzemplarze.
W C++, z tego co przeczytałem można umieścić (zadeklarować) zmienne przed funkcją main, jako 'główne', aby można było ich używać we wszystkich funkcjach.
Jakieś propozycje? ^_^
Kod: | extern void object::WaspPrototype()
{
point start = position;
object ammo;
object enemy;
float alt1;
float alt2;
float len1;
float len2;
float dir;
float m1;
int list[], i = 0;
list[i++] = Me;
list[i++] = WheeledGrabber;
list[i++] = TrackedGrabber;
list[i++] = WingedGrabber;
list[i++] = LeggedGrabber;
list[i++] = WheeledSniffer;
list[i++] = TrackedSniffer;
list[i++] = WingedSniffer;
list[i++] = LeggedSniffer;
list[i++] = WheeledShooter;
list[i++] = TrackedShooter;
list[i++] = WingedShooter;
list[i++] = LeggedShooter;
list[i++] = WheeledOrgaShooter;
list[i++] = TrackedOrgaShooter;
list[i++] = WingedOrgaShooter;
list[i++] = LeggedOrgaShooter;
list[i++] = Subber;
list[i++] = Thumper;
list[i++] = Recycler;
list[i++] = Shielder;
list[i++] = PhazerShooter;
list[i++] = Houston;
list[i++] = ExchangePost;
list[i++] = RadarStation;
list[i++] = Derrick;
list[i++] = Converter;
list[i++] = PowerPlant;
list[i++] = NuclearPlant;
list[i++] = BotFactory;
list[i++] = RepairCenter;
list[i++] = PowerStation;
list[i++] = DefenseTower;
list[i++] = PowerCaptor;
list[i++] = AutoLab;
list[i++] = ResearchCenter;
list[i++] = Titanium;
list[i++] = PowerCell;
list[i++] = NuclearCell;
while(true)
{
ammo = radar(OrgaMatter);
if( load == null)
{
if( ammo == null)
{
motor(1*rand(), 1);
}
else
{
alt1 = 8;
alt2 = altitude;
len1 = distance2d(start, ammo.position);
len2 = distance2d(start, position);
m1 = (len1-len2) / 20;
dir = direction(ammo.position);
jet( (alt1 - alt2) / 2);
if(m1 < 0) m1 = -m1;
if(distance2d(position, ammo.position) > 1.25) motor(m1-dir/90, m1+dir/90);
else
{
while(altitude > 0)
{
jet(-1);
}
jet(0);
grab();
}
}
}
else
{
enemy = radar(list);
if(enemy == null)
{
motor(1*rand(), 1);
alt1 = 20;
alt2 = altitude;
jet( (alt1 - alt2) / 2);
}
else
{
alt1 = 100;
alt2 = altitude;
len1 = distance2d(start, enemy.position);
len2 = distance2d(start, position);
m1 = (len1-len2) / 2;
dir = direction(enemy.position);
jet( (alt1 - alt2) / 2);
if(m1 < 0) m1 = -m1;
if(distance2d(position, enemy.position) > 1) motor(m1-dir/90, m1+dir/90);
else
{
drop();
}
}
}
}
} |
Berserker - 10-01-2010, 00:13
Mnostwo niepotrzebnego bajzlu...
Po co na poczatku zapisujesz pozycje startowa, a pozniej wszystko liczysz wzgledem tej pozycji? 3/4 zmiennych zniknie, jest zamiast odejmowac distance2d(xx, start)-dist2d(yy, start) zrobisz dist2d(yy, xx).
Ja bym zrobil cos takiego, ze potrzebne zmienne bym uzyl jako parametry funkcji pobocznych. Z drugiej strony nie mam pomyslu, jak to dokladnie rozwiazac, bo bym nie wpadl na pomysl, zeby tak se komplikowac robote
sajmon313 - 10-01-2010, 10:13
taka osa powinna sobie wyprodukowac orgamatter jak nie znajdzie zamiast losowo sie poruszać bez celu
wtedy nie trzebaby sie męczyć z umieszczaniem orgamatter na mapie
FE4R - 10-01-2010, 11:43
Nie wiem, czy takie rozwiązanie przyjęłoby się w zwykłych misjach.
Zakładałem, że Gniazdo Obcych będzie obecne na mapie.
Berserker - 10-01-2010, 13:25
Cytat: | taka osa powinna sobie wyprodukowac orgamatter jak nie znajdzie zamiast losowo sie poruszać bez celu
wtedy nie trzebaby sie męczyć z umieszczaniem orgamatter na mapie |
1) Trzeba ustalic, gdzie ma sobie produkowac.
2) Idac tym torem myslenia, po co komukolwiek osy, skoro mozna gdzies sobie dac robala jak na elysium i spawnowac pajaki, mrowki i robale wokol astronauty i w srodku bazy :S
Skutecznosc skutecznoscia, ale niech beda jakies granice. Kazdy umie zrobic mrowke, ktora stoi 100m od bazy i nawala jak glupia. Ale sztuka jest osiagnac taka sama efektywnosc trzymajac sie fabularnych ograniczen.
adiblol - 10-01-2010, 13:31
Ja w swoich misjach zrobiłem, że mrówki srają materią organiczną, a osy z niej korzystają
Bartek c++ - 10-01-2010, 17:49
Ja przetestowalem ten program, i osa modlila sie nad materia organicznom.
Berserker - 10-01-2010, 19:42
@up
Fear pieknie ustawil funkcje motor() zeby leciala osa w kierunku materii organicznej, bardzo sprytnie jednak zapomnial wyzerowac silniki, zeby osa zatrzymala sie nad materia.
FE4R - 10-01-2010, 21:18
Berserker napisał/a: | @up
Fear pieknie ustawil funkcje motor() zeby leciala osa w kierunku materii organicznej, bardzo sprytnie jednak zapomnial wyzerowac silniki, zeby osa zatrzymala sie nad materia. |
To jest kod ze spowalniacza. Osa spowalnia przed materią organiczną, a potem ląduje. Było to jedyne sensowne rozwiązanie według mnie, gdyż osa ma dużą bezwładność, a jej zatrzymanie w powietrzu od tak jest prawie niemożliwe.
Berserker - 10-01-2010, 21:35
Cytat: | To jest kod ze spowalniacza. Osa spowalnia przed materią organiczną, a potem ląduje. Było to jedyne sensowne rozwiązanie według mnie, gdyż osa ma dużą bezwładność, a jej zatrzymanie w powietrzu od tak jest prawie niemożliwe. |
Nie lepiej w czasie zlatywania w dol dac jakis kolejny kod motor(), ktory utrzyma ose w miejscu? Osa nie zatrzyma sie od tak nad materia organiczna chocbys dal jej hamowanie 50m przed celem. Zatrzymanie sie chocby o 0.1m za daleko to kolo ktore dzieki wyrazeniu dir/90 osa zakreci. Pomijam opcje innych os, ktore siedza nad gniazdem.
Emxx52 - 05-08-2010, 20:33
Ale się uśmiałem jak czytam te posty.
adiblol napisał/a: | Ja w swoich misjach zrobiłem, że mrówki srają materią organiczną, a osy z niej korzystają | Bardzo dobry pomysł!
Bartek c++ napisał/a: | Ja przetestowalem ten program, i osa modlila sie nad materia organicznom. |
Berserker napisał/a: | bardzo sprytnie jednak zapomnial wyzerowac silniki, zeby osa zatrzymala sie nad materia. |
Fajny program, ale czy trafi w ruchomy cel?
Korniszon - 02-10-2010, 08:34
A ja widzę tu kolejne błędy.
Po co ustawiasz zmienne tak, aby osa wzniosła się na określoną wysokość!
Ona sama ustawia się na odpowiednią wysokość od ziemi.
Zauwarzyłem jeszcze, że zapisałeś dwie zmienne typu object.
// Firefox sprawdza pisownię! -adiblol
Simbax - 02-10-2010, 11:33
Korniszon napisał/a: | ZauwaRZyłem |
Wiem, że masz 9 lat i jeszcze (chyba) dobrze nie znasz ortografii, ale po prostu nie mogę się powstrzymać od wytknięcia tak rażącego błędu Pisze się "zauwaŻyłem".
Korniszon - 03-10-2010, 08:31
@Simbax
Dzięki
@adiblol
Ja nie mam Firefoxa!!!!!
adiblol - 03-10-2010, 13:47
Cytat: | Ja nie mam Firefoxa!!!!! |
Mamusia zabrania zainstalować?
Simbax - 03-10-2010, 14:44
Ano, Korniszon dlaczego korzystasz z IE? To jest zasobożerny i powolny potwór Microsoftu! Zainstaluj sobie lepiej inną przeglądarkę, np. tak jak adiblol pisze Firefox, albo Google Chrome (moim zdaniem o wiele lepszy od FF, który włącza się po paręnaście sekund i w ogóle zamula ;/). Ew. Operę, też niezła, ale jak kto woli
Korniszon - 03-10-2010, 16:57
adiblol napisał/a: | Mamusia zabrania zainstalować? |
Nie, ale mam drugi komputer(!) i tam jest Firefox(piszę teraz na tym drugim komputerze).
adiblol - 03-10-2010, 17:06
Nie możesz zainstalować i używać lepszej przeglądarki na wszystkich komputerach?
Emxx52 - 08-10-2010, 19:43
Simbax napisał/a: | To jest zasobożerny i powolny potwór Microsoftu! Zainstaluj sobie lepiej inną przeglądarkę, np. tak jak adiblol pisze Firefox, albo Google Chrome (moim zdaniem o wiele lepszy od FF, który włącza się po paręnaście sekund i w ogóle zamula ;/) |
zgadzam się i to jeszcze jak
____________
PS: Witam z powrotem po zainstalowaniu nowego antywirusa (mój "Powrót_Dżedaja" )
|
|