|
Forum - Polski Portal COLOBOTa |
|
|
BotCreator |
Autor |
Wiadomość |
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: 30-07-2010, 19:52 BotCreator
|
|
|
Co robi program?
Zastępuje gracza w procesie tworzenia robota. Potrafi przetopić rudę, dać robotowi baterię i cierpliwie czekać na stworzenie robota Nie jest on przystosowany do transporterów latających, ale ten typ w ogóle się moim zdaniem do tej roboty nie nadaje
+ Sam wytwarza tytan jeśli go nie znalazł
+ Sam wytwarza baterie jeśli jej nie znalazł
+ W kulturalny sposób informuje o niepowodzeniu
+ Możesz w tym czasie robić coś innego np. dajmy na to, pozwiedzać okolicę
- Może mieć problem z dojściem do fabryki (wyświetli błąd, że miejsce docelowe niedostępne), nie wiem od czego to zależy (to pewnie wina instrukcji goto albo radar)
- Nie zrobi za nas wszystkiego... poprosi nas o rozpoczęcie produkcji robota, ale to kwestia dwóch kliknięć...
- Nowym robotem musimy sami wyjechać
EDIT: Robot już potrafi wytwarzać baterie, ale testowałem tylko na ogniwach atomowych. Znalazłem też parę błędów, więc poprawiłem nieco program.
Kod źródłowy:
Kod: | // funckje ----------------------------------------------------------------
int object::Przetop()
{
object item, item2;
// sprawdzanie czy mozliwe jest wykonanie funkcji
// -----------------------------------------------
item = radar(TitaniumOre); // znajdz rude
item2 = radar(Converter); // znajdz hute
if (item == null || item2 == null) // jesli nie ma rudy LUB huty wyswietl blad i przerwij program
{
message("Nie mozna wytworzyc kostki tytanu.", DisplayError);
return 1;
}
// ------------------------------------------------
// jesli warunki zostaly spelnione wykonaj
message("Wytwarzam kostkę tytanu.", DisplayInfo);
item = radar(TitaniumOre);
goto(item.position);
grab(); // znajdz i podnies rude tytanu
item = radar(Converter);
goto(item.position);
drop();
move(-2.5);
wait(15);
move(2.5);
grab(); // wytworz :P
}
int object::Power()
{
object item, item2;
item = radar(NuclearCell);
if (item == null) // Czy istnieje atomowe ogniwo?
{
// Sprawdzanie czy mozliwe jest stworzenie ogniwa atomowego
item = radar(UraniumOre);
item2 = radar(NuclearPlant);
if (item == null || item2 == null)
{
message("Nie mozna wytworzyc ogniwa atomowego.", DisplayError);
}
// ----------------------------------
else // jesli tak
{
item = radar(UraniumOre);
goto(item.position);
grab();
item = radar(NuclearPlant);
goto(item.position);
drop();
move(-3);
wait(32);
move(3);
grab(); //wytworz
return 0;
}
}
else // jesli istnieje ogniwo
{
goto(item.position);
grab();
return 0;
}
item = radar(PowerCell);
if (item == null) // czy istnieje zwykle ogniwo?
{
// sprawdzanie czy mozliwe jest stworzenie zwyklego ogniwa
item = radar(PowerPlant);
item2 = radar(Titanium);
if (item == null)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
if (item2 == null)
{
if (Przetop() == 1)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
}
// ---------------------------------------
else
{
goto(item2.position);
grab();
}
goto(item.position);
drop();
move(-3);
wait(14);
move(3);
grab();
}
else
{
goto(item.position);
grab();
}
}
// ----------------------------------------------------
extern void object::BotCreator()
{
object item; // zmienna pomocnicza
int robot[21]; // <-- robot ktory ma zostac stworzony
robot[0] = WheeledGrabber; //Transporter na kołach
robot[1] = TrackedGrabber; //Transporter na gąsienicach
robot[2] = WingedGrabber; //Transporter latający
robot[3] = LeggedGrabber; //Transporter na nogach
robot[4] = WheeledSniffer; //Szperacz na kołach
robot[5] = TrackedSniffer; //Szperacz na gąsienicach
robot[6] = WingedSniffer; //Szperacz latający
robot[7] = LeggedSniffer; //Szperacz na nogach
robot[8] = WheeledShooter; //Działo na kołach
robot[9] = TrackedShooter; //Działo na gąsienicach
robot[10] = WingedShooter; //Działo latające
robot[11] = LeggedShooter; //Działo na nogach
robot[12] = WheeledOrgaShooter; //Działo organiczne na kołach
robot[13] = TrackedOrgaShooter; //Działo organiczne na gąsienicach
robot[14] = WingedOrgaShooter; //Latające działo organiczne
robot[15] = LeggedOrgaShooter; //Działo organiczne na nogach
robot[16] = Subber; //Robot nurek
robot[17] = Recycler; //Robot recykler
robot[18] = Shielder; //Robot osłaniacz
robot[19] = Thumper; //Robot uderzacz
robot[20] = PhazerShooter; //Działo fazowe
item = radar(Titanium); // znajdz tytan
if (item == null) // jesli nie znaleziono, zrob go
{
message("Nie znaleziono tytanu", DisplayWarning);
if (Przetop() == 1) return;
}
// znaleziono
else
{
item = radar(Titanium);
goto(item.position);
grab();
// podnies tytan
}
item = radar(BotFactory);
goto(item.position);
drop();
move(-3); // znajdz fabryke i zostaw tytan, nastepnie cofnij sie
message("Prosze rozpoczac produkcje robota", DisplayWarning); // prosba o rozpoczecie produkcji
if (Power() == 1) return; // tym czasem robot "idzie" po zrodlo energii
goto(item.position);
move(-3);
message("Przynioslem ogniwo.", DisplayWarning); // informacja
while (true)
{
item = radar(robot,0,90,0,8); // szukaj robota (kategoria w zmiennej robot)
if (item == null) // jesli nie ma, powiadom, ze czekasz ;) i czekaj chwile, jesli nadal nie ma, to znowu powiadom itd.
{
message("Czekam na robota.", DisplayWarning);
wait(5);
}
else // jesli jest wloz mu baterie i pozwol wyjechac
{
move(3);
drop();
move(-10);
break;
}
}
message("Robot zostal stworzony!", DisplayInfo); // powiadomienie o powodzeniu :)
} |
A, i proszę się nie czepiać, jestem kompletnym nowicjuszem ;P Ciekawe, komu się to przyda... |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
Ostatnio zmieniony przez Simbax 04-11-2010, 15:17, w całości zmieniany 4 razy |
|
|
|
|
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: 31-07-2010, 03:45
|
|
|
Idz i podnies zrodlo ftw.
Po cholere robot ma szukac wolne miejsce i tam polozyc tytan, skoro zaraz go podniesie? Strata czasu. |
_________________
|
|
|
|
|
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
|
|
|
|
|
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:06
|
|
|
Fajny program.
Możesz dodać jeszcze komendę Kod: | produce(space(), orientation, TitaniumOre, ""); | jeżeli nie będzie żadnej rudy tytanu.
(trochę możesz oszukać) |
_________________ 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: 09-10-2010, 11:54
|
|
|
Emxx52 napisał/a: | produce(space(),orientation,TitaniumOre,""); |
Emxx52, ten program polega na nie oszukiwaniu, a nie przeciwnie. |
_________________ Nazywajcie mnie KL582 (nick w Minecraft) |
Ostatnio zmieniony przez Korniszon 10-10-2010, 08:43, w całości zmieniany 1 raz |
|
|
|
|
Emxx52
W istocie
Twoja ulubiona misja: Tropica
Dołączył: 04 Kwi 2010 Posty: 207 Skąd: Z istotnych pobudek
|
Wysłany: 09-10-2010, 14:28
|
|
|
Korniszon napisał/a: | Emxx52, ten program polega nie oszukiwaniu, a nie przeciwnie. |
Dobra, ale ułóż to zdanie bardziej po naszemu |
_________________ 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: 10-10-2010, 08:43
|
|
|
@up: Poprawiłem
Simbax napisał/a: | int object::Power()
{
object item, item2;
item = radar(NuclearCell);
if (item == null) // Czy istnieje atomowe ogniwo?
{
// Sprawdzanie czy mozliwe jest stworzenie ogniwa atomowego
item = radar(UraniumOre);
item2 = radar(NuclearPlant);
if (item == null || item2 == null)
{
message("Nie mozna wytworzyc ogniwa atomowego.", DisplayError);
return 1;
}
// ----------------------------------
else // jesli tak
{
item = radar(UraniumOre);
goto(item.position);
grab();
item = radar(NuclearPlant);
goto(item.position);
drop();
move(-3);
wait(32);
move(3);
grab(); //wytworz
return 0;
}
}
else // jesli istnieje ogniwo
{
goto(item.position);
grab();
return 0;
}
item = radar(PowerCell);
if (item == null) // czy istnieje zwykle ogniwo?
{
// sprawdzanie czy mozliwe jest stworzenie zwyklego ogniwa
item = radar(PowerPlant);
item2 = radar(Titanium);
if (item == null)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
if (item2 == null)
{
if (Przetop() == 1)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
}
// ---------------------------------------
else
{
goto(item2.position);
grab();
}
goto(item.position);
drop();
move(-3);
wait(14);
move(3);
grab();
}
else
{
goto(item.position);
grab();
}
}
|
Simbaxie, ta funkcja wytworzy tylko atomowe ogniwo, jeśli będzie można je wytworzyć, a jeśli je znajdzie to tylko je weźmie i zakończy funkcję. Popraw ją. |
_________________ Nazywajcie mnie KL582 (nick w Minecraft) |
|
|
|
|
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: 11-10-2010, 17:01
|
|
|
Analizując mój program nie widzę żadnego błędu, wystarczy spojrzeć do głównej funkcji, po if (Power() == 1) return; (czyli po wykonaniu całej tej funkcji bez błędu) są linijki, które każą robotowi iść do fabryki, więc funkcja zdaje się jest napisana dobrze. Na razie nie testuje, bo nie zainstalowałem jeszcze Colobot-a, później sprawdzę dokładnie ten program.
Może mi ktoś powiedzieć czy działa ta część, w której wytwarza zwykłą baterię? Jeśli dobrze pamiętam, to tego akurat na pewno nie sprawdzał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: 14-10-2010, 11:19
|
|
|
Poprawa:
Kod: | // funckje ----------------------------------------------------------------
int object::Przetop()
{
object item, item2;
// sprawdzanie czy mozliwe jest wykonanie funkcji
// -----------------------------------------------
item = radar(TitaniumOre); // znajdz rude
item2 = radar(Converter); // znajdz hute
if (item == null || item2 == null) // jesli nie ma rudy LUB huty wyswietl blad i przerwij program
{
message("Nie mozna wytworzyc kostki tytanu.", DisplayError);
return 1;
}
// ------------------------------------------------
// jesli warunki zostaly spelnione wykonaj
message("Wytwarzam kostkę tytanu.", DisplayInfo);
item = radar(TitaniumOre);
goto(item.position);
grab(); // znajdz i podnies rude tytanu
item = radar(Converter);
goto(item.position);
drop();
move(-2.5);
wait(15);
move(2.5);
grab(); // wytworz :P
}
int object::Power()
{
object item, item2;
item = radar(NuclearCell);
if (item == null) // Czy istnieje atomowe ogniwo?
{
// Sprawdzanie czy mozliwe jest stworzenie ogniwa atomowego
item = radar(UraniumOre);
item2 = radar(NuclearPlant);
if (item == null || item2 == null)
{
message("Nie mozna wytworzyc ogniwa atomowego.", DisplayError);
return 1;
}
// ----------------------------------
else // jesli tak
{
item = radar(UraniumOre);
goto(item.position);
grab();
item = radar(NuclearPlant);
goto(item.position);
drop();
move(-3);
wait(32);
move(3);
grab(); //wytworz
return 0;
}
}
else // jesli istnieje ogniwo
{
goto(item.position);
grab();
return 0;
}
}
int object::Power2()
{
object item, item2;
item = radar(PowerCell);
if (item == null) // czy istnieje zwykle ogniwo?
{
// sprawdzanie czy mozliwe jest stworzenie zwyklego ogniwa
item = radar(PowerPlant);
item2 = radar(Titanium);
if (item == null)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
if (item2 == null)
{
if (Przetop() == 1)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
}
// ---------------------------------------
else
{
goto(item2.position);
grab();
}
goto(item.position);
drop();
move(-3);
wait(14);
move(3);
grab();
}
else
{
goto(item.position);
grab();
}
}
// ----------------------------------------------------
extern void object::BotCreator()
{
object item; // zmienna pomocnicza
int robot[21]; // <-- robot ktory ma zostac stworzony
robot[0] = WheeledGrabber; //Transporter na kołach
robot[1] = TrackedGrabber; //Transporter na gąsienicach
robot[2] = WingedGrabber; //Transporter latający
robot[3] = LeggedGrabber; //Transporter na nogach
robot[4] = WheeledSniffer; //Szperacz na kołach
robot[5] = TrackedSniffer; //Szperacz na gąsienicach
robot[6] = WingedSniffer; //Szperacz latający
robot[7] = LeggedSniffer; //Szperacz na nogach
robot[8] = WheeledShooter; //Działo na kołach
robot[9] = TrackedShooter; //Działo na gąsienicach
robot[10] = WingedShooter; //Działo latające
robot[11] = LeggedShooter; //Działo na nogach
robot[12] = WheeledOrgaShooter; //Działo organiczne na kołach
robot[13] = TrackedOrgaShooter; //Działo organiczne na gąsienicach
robot[14] = WingedOrgaShooter; //Latające działo organiczne
robot[15] = LeggedOrgaShooter; //Działo organiczne na nogach
robot[16] = Subber; //Robot nurek
robot[17] = Recycler; //Robot recykler
robot[18] = Shielder; //Robot osłaniacz
robot[19] = Thumper; //Robot uderzacz
robot[20] = PhazerShooter; //Działo fazowe
item = radar(Titanium); // znajdz tytan
if (item == null) // jesli nie znaleziono, zrob go
{
message("Nie znaleziono tytanu", DisplayWarning);
if (Przetop() == 1) return;
}
// znaleziono
else
{
item = radar(Titanium);
goto(item.position);
grab();
// podnies tytan
}
item = radar(BotFactory);
goto(item.position);
drop();
move(-3); // znajdz fabryke i zostaw tytan, nastepnie cofnij sie
message("Prosze rozpoczac produkcje robota", DisplayWarning); // prosba o rozpoczecie produkcji
if (Power() == 1) if(Power2()==1) return; // tym czasem robot "idzie" po zrodlo energii
goto(item.position);
move(-3);
message("Przynioslem ogniwo.", DisplayWarning); // informacja
while (true)
{
item = radar(robot,0,90,0,8); // szukaj robota (kategoria w zmiennej robot)
if (item == null) // jesli nie ma, powiadom, ze czekasz ;) i czekaj chwile, jesli nadal nie ma, to znowu powiadom itd.
{
message("Czekam na robota.", DisplayWarning);
wait(5);
}
else // jesli jest wloz mu baterie i pozwol wyjechac
{
move(3);
drop();
move(-10);
break;
}
}
message("Robot zostal stworzony!", DisplayInfo); // powiadomienie o powodzeniu :)
}
|
|
_________________ Nazywajcie mnie KL582 (nick w Minecraft) |
|
|
|
|
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: 04-11-2010, 15:25
|
|
|
Aha... Już wiem o co ci chodzi, źle cię poprzednio zrozumiałem xD Twoja poprawa jest dobra, ale po co tworzyć kolejną funkcję, wystarczyło jedynie usunąć linijkę:
Kod: | int object::Power()
{
object item, item2;
item = radar(NuclearCell);
if (item == null) // Czy istnieje atomowe ogniwo?
{
// Sprawdzanie czy mozliwe jest stworzenie ogniwa atomowego
item = radar(UraniumOre);
item2 = radar(NuclearPlant);
if (item == null || item2 == null)
{
message("Nie mozna wytworzyc ogniwa atomowego.", DisplayError); |
return 1;
Kod: |
}
// ----------------------------------
else // jesli tak
{
item = radar(UraniumOre);
goto(item.position);
grab();
item = radar(NuclearPlant);
goto(item.position);
drop();
move(-3);
wait(32);
move(3);
grab(); //wytworz
return 0;
}
}
else // jesli istnieje ogniwo
{
goto(item.position);
grab();
return 0;
}
item = radar(PowerCell);
if (item == null) // czy istnieje zwykle ogniwo?
{
// sprawdzanie czy mozliwe jest stworzenie zwyklego ogniwa
item = radar(PowerPlant);
item2 = radar(Titanium);
if (item == null)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
if (item2 == null)
{
if (Przetop() == 1)
{
message("Nie mozna wytworzyc ogniwa elektrycznego.", DisplayError);
return 1;
}
}
// ---------------------------------------
else
{
goto(item2.position);
grab();
}
goto(item.position);
drop();
move(-3);
wait(14);
move(3);
grab();
}
else
{
goto(item.position);
grab();
}
} |
Wtedy program automatycznie przejdzie do fragmentu z PowerCell, dlatego że cały program do tworzenia baterii jest w instrukcji if i else Pozdrawiam! |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|