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

Programy pomiarowe - Losowe pozycje

colobotwymiiata - 26-05-2009, 20:22
Temat postu: Losowe pozycje
Oto mój kolejny, mocno skomplikowany program!
Służy on do losowania pozycji, i tworzenia na tych pozycjach dowolnych obiektów(przenośne+ obcy).
Posiada funkcję sprzężenia z(nieco zmodyfikowanym) programem "Zapiszobiekt" autorstwa COLOBOTa, więć może tworzyć losowe obiekty dla własnych poziomów.
Składnia funkcji "LosPoz":
"int spzZO" - sprzężenia z funkcją "Zapiszobiekt". Przy wartości "1" zapisuje pozycje do pliku, przy innych działanie normalne.
"point gdzie" - pozycja w pobliżu której będą tworzone obiekty.
"int cat" - kategoria obiektu.
"int ile" - decyduje ile obiektów zostanie utworzonych.
"float min" - odległość od pozycji, bliżej obiekty nie będą tworzone.
"float ok" - odległość, około której będzie się wachała odległość obiektu od pozycji.
"float mod" - odległość między obiektami.

Przykład:

LosPoz(0,position,Mine,5,25,26,5);

Tworzy 5 min(nie zapisuje do pliku), w odległości większej niż 25m od robota wykonującego program, w odległości plus minus 26m, odległość między minami to conajmniej 5m.


W razie pytań tradycyjnie wypowiadać się w tym temacie :P



PS.:Myślę że to już jeden z ostatnich programów w Colobocie.... Nie ma już natchnienia wszystkie możliwości wyczerpane....



Kod:
extern void object::DL()
{




}
void object::LosPoz(int spzZO, point gdzie, int cat,int ile, float min, float ok, float mod)
{
    point pnt;
    pnt=Los(gdzie,min,ok,mod);
    if(spzZO==1)
    {
        for(int i=0;i<ile;i++)
        {
            pnt=Los(gdzie,min,ok,mod);
            produce(pnt,0,cat,"");
            Zapiszobiekt(pnt);
        }
        return;
    }
    else
    {
        for(int i=0;i<ile;i++)
        {
            pnt=Los(gdzie,min,ok,mod);
            produce(pnt,0,cat,"");
        }
        return;
    }
}
point object::Los(point pos, float min, float ok, float mod)
{
    float p;
    point w;
    bool juz;
    juz=false;
    while(juz!=true)
    {
        p=rand();
        if(p>0.00 and p<0.25)
        {
            w.x=pos.x+rand()*rand()*ok+rand()*3.2;
            w.y=pos.y+rand()*rand()*ok+rand()*3.2;
        }
        if(p>0.25 and p< 0.50)
        {
            w.x=pos.x-rand()*rand()*ok+rand()*3.2;
            w.y=pos.y-rand()*rand()*ok+rand()*3.2;
        }
        if(p>0.50 and p< 0.75)
        {
            w.x=pos.x+rand()*rand()*ok+rand()*3.2;
            w.y=pos.y-rand()*rand()*ok+rand()*3.2;
        }
        if(p>0.75 and p< 1.00)
        {
            w.x=pos.x-rand()*rand()*ok+rand()*3.2;
            w.y=pos.y+rand()*rand()*ok+rand()*3.2;
        }
        if(distance2d(position,w)>min and szuk(w, mod)==true)juz=true;
    }
    return w;
}
bool object::szuk(point q, float mod)
{
    object w;
    w=search(0,q);
    if(w!=null)
    {
        if(distance(q,w.position)>mod)return true;
    }
    else return false;
}
void object::Zapiszobiekt(point pos)
{
   
    string msg, poz;
    float dir;
    int i;
   
    dir = 2 - (orientation / 180);
    if (dir > 1.99) dir = 0.00;
   
    poz = pos.x+";"+pos.y;
   
    file plik();
    file p2();
   
    if (!plik.open("Obiekty.txt", "r"))
    {
        plik.open("Obiekty.txt", "w");
        plik.writeln("CreateObject pos="+poz+" dir="+dir+" type=");
        plik.close();
        message(pos.x+" ; "+pos.y+" , "+dir);
        return;
    }
    p2.open("Obiekty2.txt", "w");
   
    while(!plik.eof())
    {
        msg = plik.readln();
        if (msg != "") p2.writeln(msg);
    }
   
    plik.close();
    p2.close();
   
    plik.open("Obiekty.txt", "w");
    p2.open("Obiekty2.txt", "r");
   
    while(!p2.eof())
    {
        msg = p2.readln();
        if (msg != "") plik.writeln(msg);
    }
   
    plik.writeln("CreateObject pos="+poz+" dir="+dir+" type=");
   
    plik.close();
    p2.close();
   
    message(pos.x+" ; "+pos.y+" , "+dir);
   
}


PS.2: Wiem, że podobne efekty można uzyskać za pomocą "space", ale "space" robi to dość dziwnie(przynajmniej u mnie). Ten program ma trochę więcej funkcji, i mam nadzieję że się spodoba.

Abadon - 26-05-2009, 20:24

Ciekawy ten twój program. Widać że się trochę napracowałeś i pomysłów ci nie brak. Brawa.

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group