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

Zasoby - Prosty programik baterii atomowej

William - 09-05-2011, 22:46
Temat postu: Prosty programik baterii atomowej
Tak jak to jest w wersji tytanu, tak ja mam z uranem :mrgreen:

Kod:
extern void object::CollectPowerCell3()
{
    // 1) Definicja zmiennej
    object  item;            // informacja o obiekcie
   
    while (true)             // powtarzaj w nieskończoność
    {
        // 2) Idź do rudy uranu i podnieś ją
        item = radar(UraniumOre);// znajdź rudę uranu
        goto(item.position);     // idź do pozycji
        grab();                  // podnieś porcję rudy
       
        // 3) Idź do elektrowni i zostaw rudę
        item = radar(PowerStation); // znajdź elektrownię
        goto(item.position);     // idź do pozycji
        drop();                  // zostaw rudę
        move(-2.5);              // cofnij się o 2,5 m
       
        // 4) Poczekaj na przetopienie rudy i zabierz baterię
        do
        {
            wait(1);              // poczekaj na kostkę baterii
            item = radar(PowerCell, 0, 45, 0, 5);
        }
        while ( item == null );
       
        goto(item.position);
        grab();                   // weź ją
       
        // 5) Idź do wolnego miejsca i zostaw ją
        goto(space(position));    // idź do wolnego miejsca
        drop();                   // zostaw baterię
       
        // Naładuj ogniwo elektryczne, jeśli jest w połowie zużyte
        if ( energyCell.energyLevel < 0.5 )
        {                         // jeśli tak:
            item = radar(PowerStation);
            if ( item != null )   // czy znaleziono elektrownię?
            {
                goto(item.position); // idź tam
                while ( energyCell.energyLevel < 1 )
                { // do czasu naładowania:
                    wait(1);      // czekaj
                }
            }
        }
    }
}


Jak coś nie działa to pisać. Mi jak coś to działa
Załączam plik notatnika z tym programem.

Berserker - 09-05-2011, 23:10

Alleluja!

Czas na (wyjatkowa lagodna) krytyke.

Kod:
        // 3) Idź do elektrowni i zostaw rudę
         item = radar(PowerStation); // znajdź elektrownię
         goto(item.position);     // idź do pozycji
         drop();                  // zostaw rudę
         move(-2.5);              // cofnij się o 2,5 m
         
 


Ruda uranu raczej wedruje do elektrowni atomowej, a nie zwyklej.

Od elektrowni atomowej trzeba sie cofnac na wiecej niz 2,5m, zalecane 4.

Kod:
        do
         {
             wait(1);              // poczekaj na kostkę baterii
             item = radar(PowerCell, 0, 45, 0, 5);
         }
         while ( item == null );
 


radar() nie wykryje gotowego ogniwa elektrycznego w jakiejkolwiek elektrowni.

adiblol - 09-05-2011, 23:11

William napisał/a:
Mi jak coś to działa
Eeeee...?

Cytat:
// 2) Idź do rudy uranu i podnieś ją
(...)
item = radar(PowerStation); // znajdź elektrownię
(...)
item = radar(PowerCell, 0, 45, 0, 5);


I to ma szansę działać? :lol:

Raptor - 09-05-2011, 23:16

Fail!
1. Nazwa programu winna być CollectNuclearCell.

2. UraniumOre zanosisz do NuclearPlant, a nie do PowerStation.

3. Nie czekasz za pomocą pętli, aż ogniwo Ci się wytworzy, tylko nakazujesz czekać ok. 33 sekund. W CoLoBoT jest błąd, który uniemożliwia wykrycie radarem ogniwa znajdującego się w NuclearPlant.

4. To nic nowego.


EDIT: Merde! Znowu się spóźniłem!

Berserker - 09-05-2011, 23:58

Cytat:
3. Nie czekasz za pomocą pętli, aż ogniwo Ci się wytworzy, tylko nakazujesz czekać ok. 33 sekund. W CoLoBoT jest błąd, który uniemożliwia wykrycie radarem ogniwa znajdującego się w NuclearPlant.

Dziwne, ja tego nie zauwazylem. Po prostu dawalem warunek w stylu while(p.load == p.energyCell) {...}, bo nie chcialo mi sie sprawdzac, czy odpowiada za to load czy energyCell. Swoja droga, chyba w PowerPlant inaczej jest niz w NuclearPlant.

Cytat:
1. Nazwa programu winna być CollectNuclearCell.

Czepiamy sie nazw czy bledow w skladni? ;)

William - 10-05-2011, 09:26

Berserker napisał/a:
Alleluja!

Czas na (wyjatkowa lagodna) krytyke.

Kod:
        // 3) Idź do elektrowni i zostaw rudę
         item = radar(PowerStation); // znajdź elektrownię
         goto(item.position);     // idź do pozycji
         drop();                  // zostaw rudę
         move(-2.5);              // cofnij się o 2,5 m
         
 


Ruda uranu raczej wedruje do elektrowni atomowej, a nie zwyklej.

Od elektrowni atomowej trzeba sie cofnac na wiecej niz 2,5m, zalecane 4.

Kod:
        do
         {
             wait(1);              // poczekaj na kostkę baterii
             item = radar(PowerCell, 0, 45, 0, 5);
         }
         while ( item == null );
 


radar() nie wykryje gotowego ogniwa elektrycznego w jakiejkolwiek elektrowni.


O_o No co ty! Kurde dobra uwaga! Serio, to nie sarkazm

William - 10-05-2011, 09:28

^ ^
| |

Sorry, zapomniałem się zalogować :mrgreen:

[ Dodano: 10-05-2011, 09:52 ]
Kod:
extern void object::CollectPowerCell3()
{
    // 1) Definicja zmiennej
    object  item;            // informacja o obiekcie
   
    while (true)             // powtarzaj w nieskończoność
    {
        // 2) Idź do rudy uranu i podnieś ją
        item = radar(UraniumOre);// znajdź rudę uranu
        goto(item.position);     // idź do pozycji
        grab();                  // podnieś porcję rudy
       
        // 3) Idź do elektrowni i zostaw rudę
        item = radar(NuclearPlant); // znajdź elektrownię atomową
        goto(item.position);     // idź do pozycji
        drop();                  // zostaw rudę
        move(-2.5);              // cofnij się o 2,5 m
       
        // 4) Poczekaj na przetopienie rudy i zabierz baterię
        do
        {
            wait(1);              // poczekaj na kostkę baterii
            item = radar(PowerCell, 0, 45, 0, 5);
        }
        while ( item == null );
       
        [b]move(2,5);                // przybliż się o 2,5 m[/b]
        grab();                   // weź ją
       
        // 5) Idź do wolnego miejsca i zostaw ją
        goto(space(position));    // idź do wolnego miejsca
        drop();                   // zostaw baterię
       
        // Naładuj ogniwo elektryczne, jeśli jest w połowie zużyte
        if ( energyCell.energyLevel < 0.5 )
        {                         // jeśli tak:
            item = radar(PowerStation);
            if ( item != null )   // czy znaleziono elektrownię?
            {
                goto(item.position); // idź tam
                while ( energyCell.energyLevel < 1 )
                { // do czasu naładowania:
                    wait(1);      // czekaj
                }
            }
        }
    }
}


Czemu nie chce u mnie działać komenda pogrubiona(move(2,5);)
U was działa?

A tu taki programik który jest tylko do czasu położenia rudy do elektrowni.
Kod:
extern void object::CollectPowerCell3()
{
    // 1) Definicja zmiennej
    object  item;            // informacja o obiekcie
   
    while (true)             // powtarzaj w nieskończoność
    {
        // 2) Idź do rudy uranu i podnieś ją
        item = radar(UraniumOre);// znajdź rudę uranu
        goto(item.position);     // idź do pozycji
        grab();                  // podnieś porcję rudy
       
        // 3) Idź do elektrowni i zostaw rudę
        item = radar(NuclearPlant); // znajdź elektrownię atomową
        goto(item.position);     // idź do pozycji
        drop();                  // zostaw rudę
        move(-2.5);              // cofnij się o 2,5 m
        }
}


[ Dodano: 10-05-2011, 10:00 ]
Kod:
extern void object::MakeBot()
{
// 1) Definicja zmiennej
object  item;            // informacja o obiekcie

while (true)             // powtarzaj w nieskończoność
{
// 2) Idź do rudy uranu i podnieś ją
item = radar(Titanium);// znajdź tytan
goto(item.position);     // idź do pozycji
grab();                  // podnieś porcję rudy

// 3) Idź do warsztatu i zostaw tytan
item = radar(BotFactory); // znajdź warsztat
goto(item.position);     // idź do pozycji
drop();                  // zostaw tytan
move(-3);              // cofnij się o 3 m


// Naładuj ogniwo elektryczne, jeśli jest w połowie zużyte
if ( energyCell.energyLevel < 0.5 )
{                         // jeśli tak:
item = radar(PowerStation);
if ( item != null )   // czy znaleziono elektrownię?
{
goto(item.position); // idź tam
while ( energyCell.energyLevel < 1 )
{ // do czasu naładowania:
wait(1);      // czekaj
}
}
}
}
}


Bierze tytan i dostarcza do warsztatu! Działa 100%

Raptor - 10-05-2011, 10:49

Berserker napisał/a:
Cytat:
1. Nazwa programu winna być CollectNuclearCell.

Czepiamy sie nazw czy bledow w skladni? ;)

Nazwa też jest ważna!
Cytat:
Dziwne, ja tego nie zauwazylem. Po prostu dawalem warunek w stylu while(p.load == p.energyCell) {...}, bo nie chcialo mi sie sprawdzac, czy odpowiada za to load czy energyCell. Swoja droga, chyba w PowerPlant inaczej jest niz w NuclearPlant.

Cieszę się, że taki cep z programowania, jak ja, coś uświadomił :-> ...

Berserker - 10-05-2011, 15:02

Cytat:
Czemu nie chce u mnie działać komenda pogrubiona(move(2,5);)
U was działa?


W programowaniu cyfry zmiennoprzecinkowe oznacza sie kropka, wiec zmien "2,5" na "2.5".

@up
Specjalnie sprawdzilem.

Kod:

extern void object::Test()
{
   object p = radar(UraniumOre);
   goto(p.position);
   grab();
   p = radar(NuclearPlant);
   goto(p.position);
   drop();
   move(-4);
   while(true)
   {
      if(p.load != null && p.load.category == NuclearCell)
      {
         message("1");
         break;
      }
      if(p.energyCell != null && p.energyCell.category == NuclearCell)
      {
         message("2");
         break;
      }
   }
   move(3);
   grab();
}

Odpal ten program, dziala zarowno dla PowerPlant jak i NuclearPlant, za kazdym razem wyswietla 2.

Odrazu, zeby zaden idiota sie nie czepial, to nie jest pelny program tylko maly programik do testow.

William - 10-05-2011, 16:58

O, dzięki :-) Teraz programik działa!

[ Dodano: 10-05-2011, 17:04 ]
Ok, załączam prawidłowy program tej elektrowni itd.
Działa na 1000%

Apus - 10-05-2011, 17:21

Jest sposób żeby wykryć ogniwo w elektrowni atomowej.
Nie szukamy ogniwa stojącego na ziemi. Po prostu budynki do których się cos wkłada (np. ResearchCenter, NuclearPlant, DefenseTower) mają też 'miejsce na ogniwo elektryczne' do którego nie zawsze wkładamy ogniwo, tylko np. uran. A więc szukamy w miejscu na ogniwo (.EnergyCell).
A więc kod:
Kod:
object plant;
plant = radar(NuclearPlant); //(możemy użyć zmiennej z wcześniejszej części programu
while(plant.EnergyCell != NuclearCell) //jeśli ogniwo gotowe, pomijamy pętlę
{
wait(1);
}
move(4);
grab;

Berserker - 10-05-2011, 17:29

@up

No coz. zle, zle, zle. Poza tym juz dalem kod ;)

William - 10-05-2011, 20:32

@up

A ja dałem po prostu bez komendy "radar" :mrgreen:

krzys_h - 10-05-2011, 21:02

@Apus: Colobot jest czuły na wielkość znaków: powinno być energyCell zamiast EnergyCell (EnergyCell to parametr grab oznaczający ogniwo włożone w robocie). Poza tym po grab muszą być nawiasy
Apus - 11-05-2011, 15:50

krzys_h napisał/a:
@Apus: Colobot jest czuły na wielkość znaków: powinno być energyCell zamiast EnergyCell (EnergyCell to parametr grab oznaczający ogniwo włożone w robocie). Poza tym po grab muszą być nawiasy

Co do energyCell to nie wiedziałem jak jest dokładnie, a z grab() to mój błąd, czasami po prostu nie myślę. :mrgreen:

Berserker - 11-05-2011, 16:40

I nikt nie wpadl na to, ze powinno byc energyCell.category, bo raczej energyCell nie jest typem int :>
Apus - 11-05-2011, 19:02

Berserker napisał/a:
I nikt nie wpadl na to, ze powinno byc energyCell.category, bo raczej energyCell nie jest typem int :>

energyCell.category? What the hell? O_o Nie rozumiem. :->

Berserker - 11-05-2011, 19:38

Gdy wypisujesz cos w stylu item.energyCell, odwolujesz sie do ogniwa elektrycznego jako do obiektu. Poniewaz jest to typ object, raczej ciezko porownac go ze stala typu int, jaka jest kategoria NuclearCell, wiec, zeby poznac kategorie ogniwa musisz wpisac item.energyCell.category...

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