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 dla obcych - Ciekawe programy dla Obcych

adiblol - 26-04-2008, 10:51
Temat postu: 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;
}

Tomesy - 26-04-2008, 22:06
Temat postu: 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.
adiblol - 26-04-2008, 22:19
Temat postu: RE: Ciekawe programy dla Obcych
Wtedy w ogóle nie widać struktury, bo spacje są zamieniane na białe znaki. Możesz zrobić cytowanie.
adiblol - 01-11-2008, 16:14
Temat postu: 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


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