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
Przesunięty przez: Abadon
20-02-2010, 14:12
Ciekawe programy dla Obcych
Autor Wiadomość
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: 26-04-2008, 10:51   Ciekawe programy dla Obcych

Oto moje produkcje - programy dla Obcych, wykorzystane we własnych poziomach (niedługo te własne poziomy będzie można ściągnąć).

Program 1. To jest program dla mrówek. Jeśli nie ma żadnego robota itp. to podchodzi do innej mrówki, strzela do niej, a jeśli będzie za blisko to odchodzi.
Kod:

// składnia cmdline: czułość;max_pitch;nav_x;nav_y

extern void object::Attack() {
errmode(0);
float d1, d2;
int i=0;
object item;
int list[];
list[i++] = WingedGrabber;
list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber;
list[i++] = WingedShooter;
list[i++] = TrackedShooter;
list[i++] = WheeledShooter;
list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer;
list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer;
list[i++] = Thumper;
list[i++] = PhazerShooter;
list[i++] = Recycler;
list[i++] = Shielder;
list[i++] = Subber;
list[i++] = Me;
list[i++] = Derrick;
list[i++] = BotFactory;
list[i++] = PowerStation;
list[i++] = Converter;
list[i++] = RepairCenter;
list[i++] = DefenseTower;
list[i++] = ResearchCenter;
list[i++] = RadarStation;
list[i++] = ExchangePost;
list[i++] = PowerPlant;
list[i++] = AutoLab;
list[i++] = NuclearPlant;

i=0;

float sens=cmdlineDef(0,70);
point nav1;
point prevpos;

if ((cmdline(3)<-1000) or (cmdline(3)>1000)) {
nav1.x=position.x;
nav1.y=position.y;
} else {
nav1.x=cmdline(2);
nav1.y=cmdline(3);
}
wait(1);
prevpos=space(position);
float dir;
point dpnt;

while(ismovie()!=0) wait(1);

//message(nav1.x);
//message(nav1.y);
while(true) {
i++;
item=radar(list,0,360,0, sens);
if (item==null) {
if ((topo(PozPrzed(position,orientation,4))>0) and (abs(pitch)<cmdlineDef(1,15))) {
prevpos=position;
item=radar(AlienAnt, 0,360,0,8);
if (item!=null) {
if (distance(item.position,position)>4) {
fire(item.position);
dir=direction(item.position);
if (abs(dir)>10) {
if (dir<0) motor(1,0.5*rand()); else motor(0.5*rand(),1);
} else motor(0.7, 0.7);
} else {
//fire(item.position);
//dpnt=PozPrzed(item.position,item.orientation, -3);
dpnt=space(item.position, 5, 14, 5);
/*dir=direction(dpnt);
if (abs(dir)>10) {
if (dir<0) motor(0.5,0.4*rand()); else motor(0.4*rand(),0.5);
} else motor(0.4, 0.4);*/
//goto(dpnt);
turn(OppDir(item.position));
motor(0.8,0.8);
//wait(rand()*2+1);
}
} else {
motor((rand()*0.3)+0.7, (rand()*0.3)+0.7);
}
wait((rand()*0.65)+0.5);
//motor(0.9, 0.9);
} else {
//message("DEBUG: za stromo lub woda!");
turn(direction(prevpos));
motor(0.8,0.8);
}
wait((rand()*1.5)+0.5);
if (distance(prevpos,position)<1) turn((rand()*360)-180); //jesli trafil na przeszkode
if (distance(nav1, position)>sens) {
//message("DEBUG: za daleko od bazy!");
turn(direction(nav1));
//move(7);
}
continue;
}
turn(direction(item.position));
if (distance(position, item.position)<30) {
fire(item.position);
}
if (distance(position, item.position)>15) {
if (topo(PozPrzed(position,orientation, 4))>0) {
prevpos=position;
motor(1,1);
} else {
goto(prevpos);
//fire(item.position);
}
wait(0.65+rand());
}
}
}

float object::cmdlineDef(int nr, float def) {
float par;
par=cmdline(nr);
if (abs(par)>10000) {
return def;
} else {
return par;
}
}

point object::PozPrzed(point pos, float ang, float dist) {
point zpos;
zpos.x=cos(ang)*dist+pos.x;
zpos.y=sin(ang)*dist+pos.y;
return zpos;
}

float object::OppDir(point pos) {
float opdir;
float stdir=direction(pos);
if (stdir<0) {
opdir=stdir+180;
} else {
opdir=stdir-180;
}
}


Funkcje:
PozPrzed: wylicza pozycję przed punktem, użyte do wykrywania wody/lawy
OppDir: kierunek przeciwny, do uciekania przed czymś

Program 2. Program dla os. Niszczy osłony obiektów poprzez uderzanie ich. Napisałem go dawno i jest trochę niedoskonały.
Kod:

extern void object::Attack() {
errmode(0);

int list[];
int i=0;
list[i++] = WingedGrabber;
list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber;
list[i++] = WingedShooter;
list[i++] = TrackedShooter;
list[i++] = WheeledShooter;
list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer;
list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer;
list[i++] = Thumper;
list[i++] = PhazerShooter;
list[i++] = Recycler;
list[i++] = Shielder;
list[i++] = Subber;
//list[i++] = Me;
list[i++] = Derrick;
list[i++] = BotFactory;
list[i++] = PowerStation;
list[i++] = Converter;
list[i++] = RepairCenter;
list[i++] = DefenseTower;
list[i++] = ResearchCenter;
list[i++] = RadarStation;
list[i++] = ExchangePost;
list[i++] = PowerPlant;
list[i++] = AutoLab;
list[i++] = NuclearPlant;

object item;
point lastpos;
float victim_z;

while(ismovie()!=0) { wait(2); }

while(true) {
item=radar(list,0,360,0, 70);
if (item==null) { // jeśli nic nie ma, to się nudź ...
jet(-0.4);
while(altitude>0) wait(0.8);
motor(rand()-0.5, rand()-0.5);
wait(rand()*3);
continue;
}
victim_z=item.position.z+1; // wysokość n.p.m. uderzeń
turn(direction(item.position));
//motor(1,1);

wait(0.1);

motor(1,1);
wait(0.5);
// while ((distance(lastpos, position)>0.3) and (item!=null) and (abs(direction(item.position))<70)) {
if (abs(victim_z-position.z)>0.1) { // korekcja wysokości
if (victim_z > position.z) { jet(0.3); } else { jet(-0.3); }
}
wait(0.3);
jet(0);
motor(1,1);
lastpos=position;
wait(0.5);
// }
if (distance(lastpos,position)<0.3) {
motor(-1, -1);
wait(5);
}
}

}


Program 3. Program dla Królowej. Produkuje robaki, a w sytuacji zagrożenia jakimś robotem wytwarza dodatkowo mrówki i osy do walki z tym robotem, dodatkowo idzie za tym robotem. Należy zmienić nazwy programów w parametrach funkcji produce.
Kod:

extern void object::WormProd() {
errmode(0);

int list[];
int i=0;
list[i++] = WingedGrabber;
list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber;
list[i++] = WingedShooter;
list[i++] = TrackedShooter;
list[i++] = WheeledShooter;
list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer;
list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer;
list[i++] = Thumper;
list[i++] = PhazerShooter;
list[i++] = Recycler;
list[i++] = Shielder;
list[i++] = Subber;
list[i++] = Me;

point srodek;
srodek.x=cmdline(1);
srodek.y=cmdline(2);
point prevpos;
point dest;
prevpos=srodek;
object item;
string kidscript;
int kidcat;
float randnum;
while(ismovie()!=0) wait(1);

while(true) {
motor(0.5+(rand()*0.3), 0.5+(rand()*0.3));
if ((rand()<0.2) and (ObjCount(AlienWorm)<14)) {
produce(position, orientation, AlienWorm, "%user%\\worm01.txt");
}
if (position.z<0) {
goto(prevpos);
} else {
prevpos=position;
}
wait(rand()+0.5);
if (distance(position, prevpos)<1) {
turn((rand()-0.5)*170);
}
item=radar(list,0,360,0, 80);
if (item!=null) {
turn(direction(item.position));
motor(1,1);
wait(1);
if ((rand()<0.8) and (TotalAliensCount()<30)) {
randnum=rand();
if (randnum<0.33) {
kidcat=AlienAnt;
kidscript="%user%\\ant01.txt";
} else if (randnum<0.66) {
kidcat=AlienAnt;
kidscript="%user%\\ant02.txt";
} else {
kidcat=AlienWasp;
kidscript="%user%\\wasp01.txt";
}
produce(position, orientation, kidcat, kidscript);
}
} else if (distance(srodek, position)>cmdline(0)) {
turn(direction(srodek));
}
}
}

int object::ObjCount(int cat) {
int i=0;
int num=0;
object item;
while(true) {
item=retobject(i);
if (item==null) break;
if (item.category==cat) num++;
i++;
}
return num;
}

int object::TotalAliensCount() {
int num=0;
num+=ObjCount(AlienAnt);
num+=ObjCount(AlienWasp);
num+=ObjCount(AlienSpider);
num+=ObjCount(AlienWorm);
num+=ObjCount(AlienEgg);
return num;
}
_________________
1Tbps Project && Telecomix Network

 
 
 
Tomesy


Dołączył: 10 Lut 2008
Posty: 103
Skąd: Łomża
Wysłany: 26-04-2008, 22:06   RE: Ciekawe programy dla Obcych

Programy są ok, ale wolałbym, żeby były umieszczone za pomocą code, bo te cyferki po lewej trochę utrudniają życie.
_________________
Piszę bo lubię.
 
 
 
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: 26-04-2008, 22:19   RE: Ciekawe programy dla Obcych

Wtedy w ogóle nie widać struktury, bo spacje są zamieniane na białe znaki. Możesz zrobić cytowanie.
_________________
1Tbps Project && Telecomix Network

 
 
 
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: 01-11-2008, 16:14   RE: Ciekawe programy dla Obcych

Macie te programy w pastebinie bo ten *!^%$@ PhpFusion przerobił niektóre sekwencje na emotikony.

http://adiblol.pastebin.com/f2672d1c3
http://adiblol.pastebin.com/f1897fe1a
http://adiblol.pastebin.com/f5e20f670
_________________
1Tbps Project && Telecomix Network

Ostatnio zmieniony przez adiblol 01-11-2008, 16:14, w całości zmieniany 1 raz  
 
 
 
Wyświetl posty z ostatnich:   
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012