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
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 :lol:
+ 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... :roll:
_________________
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
Wysłany: 31-07-2010, 11:25   

Chodzi o źródło energii... baterię, jak wolisz :roll:

Fakt, już poprawiam...
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
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ć) :lol:
_________________
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
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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