Colobot Forum - International Colobot Community
Zabójca by Tomesy doesn't work - Printable Version

+- Colobot Forum - International Colobot Community (https://colobot.info/forum)
+-- Forum: [Archive] New forum (2015-2019) (https://colobot.info/forum/forumdisplay.php?fid=76)
+--- Forum: Polish Forums (https://colobot.info/forum/forumdisplay.php?fid=73)
+---- Forum: O wszystkim (https://colobot.info/forum/forumdisplay.php?fid=74)
+---- Thread: Zabójca by Tomesy doesn't work (/showthread.php?tid=712)



Zabójca by Tomesy doesn't work - Knight_in_Fire - 01-16-2016

Code:
// Program jest przeznaczony dla robotów latających z działkami!
// Funkcja liczenia celi stworzona przez YanPL.
// Funkcja "nielądowania" na wodzie i celownik na osy zapożyczony od Epsitec.
// Źródło: http://www.epsitec.ch/colobot/program/prog042.txt

int Compte (int cat)
{
int i, total = 0;
object p;

for ( i = 0; i < 1000; i++ )
{
p = retobject(i);
if ( p == null ) break;
if ( p.category == cat ) total ++;
}
return total;
}
extern void object::Zabójca()
{
int    Alien[],OverlandAlien[], i = 0, av = Compte(AlienAnt), sv = Compte(AlienSpider), wv = Compte(AlienWasp);
int    temp1, temp2, tempdir, tempdis, time = 0;
float  angle, dir, dist, lvl, curdir, a;
point  start, togo;
object target;
string key, t;
file   Data();
bool   exist;

if (category != WingedShooter & category != WingedOrgaShooter)
{
message("Zły typ robota dla tego programu!", DisplayError);
return;
}

exist = Data.open("Data.txt","r");
if (!exist)
{
Data.open("Data.txt", "w");
Data.writeln(" ");
Data.close();
}
else Data.close();
Data.open("Data.txt","r");
key = strleft(Data.readln(), 1);
Data.close();

OverlandAlien[i++] = AlienAnt;
OverlandAlien[i++] = AlienSpider;

Alien[i++] = AlienAnt;
Alien[i++] = AlienWasp;
Alien[i++] = AlienSpider;

if (key != " ")
{
Data.open("X", "r");
start.x = strval(Data.readln());
Data.close();

Data.open("Y", "r");
start.y = strval(Data.readln());
Data.close();

Data.open("Data.txt", "r");
t = strmid(Data.readln(), 2, 10);
Data.close();
if ( t != "" + topo(start) )
{
Data.open("Data.txt", "w");
Data.writeln(" ");
Data.close();

key = " ";
}
else message("Kontynuuje przerwany program...");
}

if (radar(Alien) != null)
{
if (key != "1")
{
start.x = position.x;
start.y = position.y;
a = topo(position);

Data.open("X", "w");
Data.writeln(""+start.x);
Data.close();
Data.open("Y", "w");
Data.writeln(""+start.y);
Data.close();

Data.open("Data.txt", "w");
Data.writeln("1"+" "+a);
Data.close();

message("Począdkowa liczba celi wynosi:"+" "+(av+sv+wv)+"!", DisplayWarning);
}
while (position.z-topo(position) < 6) jet(1);
}
if (radar(Alien) == null)
{
if ( key == " " )
{
message("Brak celów do zniszczenia", DisplayError);
deletefile("Data.txt");
return;
}

Data.open("Data.txt", "r");
t = strmid(Data.readln(), 2, 10);
Data.close();

Data.open("Data.txt", "w");
Data.writeln("2"+" "+t);
Data.close();
}

while ( true )
{
if (radar(Alien) == null)
{
lvl = 1;

Data.open("Data.txt", "r");
key = strleft(Data.readln(), 1);
Data.close();

if (key == "1")
{
wait(1);
message("Wszystkie cele zniszczone", DisplayInfo);
}
}
else lvl = 0.45;

if (energyCell.category == PowerCell & energyCell.energyLevel < lvl)
{
target = radar(PowerStation);
if ( target != null )  
{
message("Lece naładować ogniwo");
goto(target.position, 7, 0);
while ( energyCell.energyLevel != 1 ) wait(0.1);  
if (radar(Alien) != null) message("Wracam do walki");
while (position.z-topo(position) < 6) jet(1);
}
target = radar(PowerCaptor);
if ( target != null )
{
message("Lece naładować ogniwo");
goto(target.position, 7);
message("Czekam na naładowanie ogniwa");
while ( energyCell.energyLevel != 1 ) wait(0.1);
if (radar(Alien) != null) message("Wracam do walki");
move(7);
while (position.z-topo(position) < 6) jet(1);
}
}

target = radar(RepairCenter);
if ( shieldLevel < lvl & target != null)
{                        
message("Lece się naprawić");
goto(target.position, 7, 0);
while ( shieldLevel != 1 ) wait(0.1);
if (radar(Alien) != null) message("Wracam do walki");
while (position.z-topo(position) < 6) jet(1);
}

target = radar(Alien);

if (target == null)
{
aim(0);

exist = Data.open("X", "r");
if (!exist)
{
message("Plik ze współżędną X został usunięty przed zakończeniem pracy programu", DisplayError);
jet(0);

deletefile("Y");
deletefile("Data.txt");

return;
}
start.x = strval(Data.readln());
Data.close();

exist = Data.open("Y", "r");
if (!exist)
{
message("Plik ze współżędną Y został usunięty przed zakończeniem pracy programu", DisplayError);
jet(0);

deletefile("X");
deletefile("Data.txt");

return;
}
start.y = strval(Data.readln());
Data.close();

goto(start, 7);
message("Dotarłem na pozycję startową");

wait(1);

deletefile("Data.txt");
deletefile("X");
deletefile("Y");

message("Wyłączam program");
return;
}
else dist = distance2d(position, target.position);

// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
// <<<<<<<<<<<<<<<<<<<Oddzielacz>>>>>>>>>>>>>>>>>>>>
// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

dir = direction(target.position);
if ( dir < 0 ) motor(1, 1+dir/90);
else motor(1-dir/90, 1);

if ( temperature > 0.8 )
{
temp1 = 0;
target = radar(Alien,temp1,45,30,150);

while ( target != null )
{
temp1 = temp1 + 45;
target = radar(Alien,temp1,45,30,150);
}
turn(temp1);

togo.x = (4*cos(orientation))+position.x;
togo.y = (4*sin(orientation))+position.y;
togo.z = position.z;

while ( temperature > 0 )
{
curdir = orientation;
if ( topo(position) > 0 )
{
motor(1,1);
jet(-0.1);

togo.x = (8*cos(curdir))+position.x;
togo.y = (8*sin(curdir))+position.y;
togo.z = position.z;

if ( topo(togo) <= 0.0 )
{
temp1 = 0;
while ( topo(togo) <= 0 )
{
temp1 = temp1 + 15;
target = radar(Alien,temp1,10,30,150);

while ( target != null )
{
temp1 = temp1 + 15;
target = radar(Alien,temp1,10,30,150);
}

togo.x = (8*cos(curdir+temp1))+position.x;
togo.y = (8*sin(curdir+temp1))+position.y;
togo.z = position.z;
}

togo.x = (8*cos(curdir))+position.x;
togo.y = (8*sin(curdir))+position.y;
togo.z = position.z;

temp2 = 0;

while ( topo(togo) <= 0 )
{
temp2 = temp2 - 15;
target = radar(Alien,temp2,10,30,150);

while( target != null )
{
temp2 = temp2 - 15;
target = radar(Alien,temp2,10,30,150);
}
togo.x = (8*cos(curdir+temp2))+position.x;
togo.y = (8*sin(curdir+temp2))+position.y;
togo.z = position.z;
}
if(-temp2 > temp1) tempdir = temp1;
if(-temp2 <= temp1) tempdir = temp2;

turn(tempdir);
}
}

if ( topo(position) <= 0 )
{
motor(1, 1);

if ( topo(togo) < 0 )
{
temp1 = 0;
tempdis = 10;

while ( topo(togo) < 0 )
{
temp1 = temp1 + 45;

togo.x = (tempdis*cos(curdir+temp1))+position.x;
togo.y = (tempdis*sin(curdir+temp1))+position.y;
togo.z = position.z;

if ( temp1 >= 360 )
{
temp1 = 0;
tempdis = tempdis + 15;
}
}
turn(temp1);
}
}
}
}

// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
// <<<<<<<<<<<<<<<<<<<Oddzielacz>>>>>>>>>>>>>>>>>>>>
// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

target = radar(Alien);

if ( target == radar(AlienWasp) )
{
target = radar(AlienWasp);
if ( target == null ) continue;

jet(0);

if (target.position.z > 1.5)
{
if (target.position.z < 1.5) continue;

if(position.z > target.position.z + 2) jet(-0.4);
if(position.z < target.position.z - 2) jet(0.4);
if(position.z-topo(position) < 4) jet(1);

wait(0.01);

if ( dist < 35 ) aim((atan((position.z+1.5-target.position.z)/(dist))*-1)-pitch);
else aim(0);

if ( dist < 20 )
{
angle = direction(target.position);
turn(angle);
if (angle < 0) motor(1,0.-0.5);
else motor(-0.5,1);

if (radar(AlienWasp, 0, 7) != null) fire(0.3);
}
}
else
{
aim(-20);
turn(direction(target.position));
motor(1, 1);

if (position.z > 1.5)
{
if (position.z-topo(position) < 5) jet(0.8);
else jet(-0.4);
wait(0.1);
}

target = radar(AlienWasp);
if (target.position.z > 1) continue;

if ( distance(position, target.position) < 25.5 & radar(AlienWasp, 0, 5) != null ) fire(0.3);

if ( dist < 10 )
{
while ( distance2d(position, target.position) < 20 )
{
if (target == null) break;
if (target.position.z > 1) break;
if (position.z-topo(position) < 2) jet(0.8);
motor(1, 1);
}
}
}
}

// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
// <<<<<<<<<<<<<<<<<<<Oddzielacz>>>>>>>>>>>>>>>>>>>>
// _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

else
{
jet(0);

if (position.z < target.position.z + 9 or position.z-topo(position) < 5) jet(0.4);
if (position.z > target.position.z + 10 & position.z-topo(position) > 7) jet(-0.4);

wait(0.05);

if ( dist < 40 & position.z < target.position.z + 10)
{
turn(direction(target.position));
motor(1, 1);

aim((52 - dist)/-1);
fire(0.5);
wait(0.3);
}

target = radar(OverlandAlien);
if (target == null) continue;

if ( dist < 10)
{
jet(0);

while (distance2d(position, target.position) < 35)
{
if (position.z < target.position.z + 9 or position.z-topo(position) < 5) jet(0.4);
if (position.z > target.position.z + 10 & position.z-topo(position) > 7) jet(-0.4);

wait(0.05);

motor(1, 1);

time++;
if ( time > 60 ) break;
}
time = 0;
}
}
}
}

Przy próbie utworzenia pliku wiesza się na "otwieraniu" programu, a powinien tworzyć plik i zapisywać w nim dane.