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
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.
:arrow: Osa jest 'celna'
:arrow: Można używać go na wielu osach jednocześnie.
:arrow: Ale czasami się psuje, osa się zatrzymuje albo ma jakieś inne głupie zajawki.
:arrow: 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 :P
_________________
 
 
     
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. :D
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
Wysłany: 03-10-2010, 13:47   

Cytat:
Ja nie mam Firefoxa!!!!!

Mamusia zabrania zainstalować?
_________________
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