Program do osy. |
Autor |
Wiadomość |
FE4R
Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy Wiek: 24 Dołączył: 21 Paź 2009 Posty: 144
|
Wysłany: 09-01-2010, 22:26 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
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 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
Jedi Master
Wiek: 28 Dołączył: 16 Gru 2009 Posty: 42 Skąd: /dev/uarndom
|
Wysłany: 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 |
_________________ Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10 |
|
|
|
|
FE4R
Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy Wiek: 24 Dołączył: 21 Paź 2009 Posty: 144
|
Wysłany: 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
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 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
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: 10-01-2010, 13:31
|
|
|
Ja w swoich misjach zrobiłem, że mrówki srają materią organiczną, a osy z niej korzystają |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Bartek c++
Twoja ulubiona misja: Tropica - Czas na atak
Pomógł: 6 razy Wiek: 20 Dołączył: 07 Lip 2009 Posty: 390
|
Wysłany: 10-01-2010, 17:49
|
|
|
Ja przetestowalem ten program, i osa modlila sie nad materia organicznom. |
_________________
|
|
|
|
|
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: 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
Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy Wiek: 24 Dołączył: 21 Paź 2009 Posty: 144
|
Wysłany: 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
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 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
W istocie
Twoja ulubiona misja: Tropica
Dołączył: 04 Kwi 2010 Posty: 207 Skąd: Z istotnych pobudek
|
Wysłany: 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? |
_________________ Windows w szacie Linuxa
|
|
|
|
|
Korniszon
Me Gusta: PPC
Twoja ulubiona misja: Spying...
Pomógł: 1 raz Wiek: 17 Dołączył: 01 Paź 2010 Posty: 108 Skąd: Stamtąd, gdzie ty.
|
Wysłany: 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 |
_________________ Nazywajcie mnie KL582 (nick w Minecraft) |
Ostatnio zmieniony przez adiblol 02-10-2010, 12:09, w całości zmieniany 1 raz |
|
|
|
|
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: 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". |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
Korniszon
Me Gusta: PPC
Twoja ulubiona misja: Spying...
Pomógł: 1 raz Wiek: 17 Dołączył: 01 Paź 2010 Posty: 108 Skąd: Stamtąd, gdzie ty.
|
Wysłany: 03-10-2010, 08:31
|
|
|
@Simbax
Dzięki
@adiblol
Ja nie mam Firefoxa!!!!! |
_________________ Nazywajcie mnie KL582 (nick w Minecraft) |
|
|
|
|
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
|
|
|
|
|
|