<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent changes to bugs</title><link href="https://sourceforge.net/p/jrobots/bugs/" rel="alternate"/><link href="https://sourceforge.net/p/jrobots/bugs/feed.atom" rel="self"/><id>https://sourceforge.net/p/jrobots/bugs/</id><updated>2005-11-24T23:40:45Z</updated><subtitle>Recent changes to bugs</subtitle><entry><title>Dubbi su possibili stranezze applet</title><link href="https://sourceforge.net/p/jrobots/bugs/2/" rel="alternate"/><published>2005-11-24T23:40:45Z</published><updated>2005-11-24T23:40:45Z</updated><author><name>Anonymous</name><uri>https://sourceforge.net/u/userid-None/</uri></author><id>https://sourceforge.net8b1fd80ec062eb37b49348e9d89ac0b3a644e34a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Scusatemi se il problema che vi pongo può sembrarvi &lt;br /&gt;
banale per un esperto, ma, dopo essermi appassionato &lt;br /&gt;
all'idea di partecipare a JRobots, sono sorti in me &lt;br /&gt;
tutta una serie di dubbi sul funzionamento dei robots &lt;br /&gt;
e soprattutto sul modo in cui l'applet gestisce le &lt;br /&gt;
partite.&lt;/p&gt;
&lt;p&gt;Ho corredato l'esposizione dei miei dubbi con codice &lt;br /&gt;
d'esempio che serva a chiarire i concetti.&lt;br /&gt;
Per ovvi motivi, ho testato questi robot solo in &lt;br /&gt;
locale, evitando di caricarli on-line per il timore &lt;br /&gt;
di bloccare tutto.&lt;/p&gt;
&lt;p&gt;DUBBIO #1: PERCHE' IL CLOCK DEVE INFLUIRE SULLA MIA &lt;br /&gt;
TRAIETTORIA?&lt;/p&gt;
&lt;p&gt;MOTIVAZIONE: Osservate il codice seguente:&lt;/p&gt;
&lt;p&gt;public class __Prova1_ extends JJRobot&lt;br /&gt;
{&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
int i, a;&lt;br /&gt;
int[] angoli = {90, 180, 270, 0};&lt;br /&gt;
drive(0, 50);&lt;br /&gt;
a = 0;&lt;br /&gt;
while(true)&lt;br /&gt;
{&lt;br /&gt;
for(i = 0; i &amp;lt; 5e+4; ++i)&lt;br /&gt;
drive(angoli[a], 50);&lt;br /&gt;
++a;&lt;br /&gt;
a %= 4;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Se eseguo questo robot ideato per seguire una &lt;br /&gt;
traiettoria pressoché quadrata, ho una brutta &lt;br /&gt;
sorpresa. Se eseguo il codice con Clock 1x, i &lt;br /&gt;
quadrati disegnati sono relativamente grandi; se, &lt;br /&gt;
invece, eseguo con Clock /2, allora i quadrati sono &lt;br /&gt;
molto più piccoli; e ancora, se eseguo con Clock 2x, &lt;br /&gt;
i quadrati son molto più grandi.&lt;br /&gt;
Il mio dubbio è: perché il clock deve far variare &lt;br /&gt;
così il percorso seguito da questo robot? In questo &lt;br /&gt;
modo è impossibile usare un clock più lento per &lt;br /&gt;
osservare con calma il comportamnto del robot, dato &lt;br /&gt;
che poi, quando viene eseguito in tempo reale il &lt;br /&gt;
comportamento sarà un altro. Analogamente, non potrò &lt;br /&gt;
mai usare un clock più veloce per vedere velocemente &lt;br /&gt;
dei combattimenti e fare una stima statistica delle &lt;br /&gt;
prestazioni del robot, in quanto il comportamento &lt;br /&gt;
durante un eventuale torneo sarebbe diverso.&lt;br /&gt;
A tempi virtuali uguali a cui corrispondono &lt;br /&gt;
istruzioni uguali, non dovrebbero corrispondere spazi &lt;br /&gt;
percorsi uguali?&lt;br /&gt;
E' come se il codice da me inserito fosse eseguito &lt;br /&gt;
sempre alla stessa velocità (dipendente dal mio &lt;br /&gt;
processore), mentre il clock influisse soltanto &lt;br /&gt;
sull'esecuzione delle funzioni predefinite nel robot.&lt;br /&gt;
Che senso ha un comportamento del genere? Il clock &lt;br /&gt;
non dovrebbe influire in maniera proporzionale su &lt;br /&gt;
tutto il codice in modo da simulare coerentemente un &lt;br /&gt;
combattimento a diverse velocità???&lt;/p&gt;
&lt;p&gt;DUBBIO #2: PERCHE' IL MIO CODICE DEVE INFLUIRE &lt;br /&gt;
SULL'ESECUZIONE DEL CODICE ALTRUI?&lt;/p&gt;
&lt;p&gt;MOTIVAZIONE: Osservate il codice seguente:&lt;/p&gt;
&lt;p&gt;public class __Prova2_ extends JJRobot&lt;br /&gt;
{&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
int i, a;&lt;br /&gt;
int[] angoli = {90, 180, 270, 0};&lt;br /&gt;
drive(0, 50);&lt;br /&gt;
a = 0;&lt;br /&gt;
while(true)&lt;br /&gt;
{&lt;br /&gt;
for(i = 0; i &amp;lt; 5e+4; ++i);&lt;br /&gt;
drive(angoli[a], 50);&lt;br /&gt;
++a;&lt;br /&gt;
a %= 4;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Il codice precedente è diverso da quello del dubbio &lt;br /&gt;
#1, in quanto usa un ciclo for vuoto per simulare un &lt;br /&gt;
ritardo in termini di istruzioni. Lo scopo era quello &lt;br /&gt;
di provare che penalità ha un robot che perde tempo &lt;br /&gt;
ad eseguire molti calcoli rispetto a uno che ne &lt;br /&gt;
esegue pochi o niente. Immaginate la mia sorpresa &lt;br /&gt;
quando ho eseguito il robot e mi son reso conto che &lt;br /&gt;
invece di penalizzare il mio robot, quel ciclo &lt;br /&gt;
RALLENTAVA TUTTA L'APPLET!!!&lt;br /&gt;
Anche se il mio robot resta fermo, non è importante. &lt;br /&gt;
Il fatto è che mi aspettavo che il MIO E SOLO IL MIO &lt;br /&gt;
robot fosse penalizzato rispetto ad altri robots e &lt;br /&gt;
invece mi accorgo che tutta l'applet rallenta &lt;br /&gt;
paurosamente.&lt;br /&gt;
Che senso ha una cosa del genere? Se il mio robot &lt;br /&gt;
esegue molte istruzioni, non dovrei rimetterci solo &lt;br /&gt;
io???&lt;/p&gt;
&lt;p&gt;DUBBIO #3: PERCHE' IL MIO CODICE BLOCCA TUTTA &lt;br /&gt;
L'APPLET?&lt;/p&gt;
&lt;p&gt;MOTIVAZIONE: Osservate il codice seguente:&lt;/p&gt;
&lt;p&gt;public class __Prova3_ extends JJRobot&lt;br /&gt;
{&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
drive(0, 50);&lt;br /&gt;
while(true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Come è possibile che, eseguendo questo robot, tutta &lt;br /&gt;
l'applet si blocca??? Io m'aspettavo che il mio robot &lt;br /&gt;
si bloccasse sul posto o che si andasse a schiantare &lt;br /&gt;
dritto contro il muro di destra, ma non è così: &lt;br /&gt;
ancora una volta il mio codice influenza tutta &lt;br /&gt;
l'applet invece di danneggiare solo i miei risultati.&lt;br /&gt;
Che senso ha questo comportamento?&lt;/p&gt;
&lt;p&gt;DUBBIO #4: PERCHE' UN CODICE APPARENTEMENTE SIMILE A &lt;br /&gt;
QUELLO DEL DUBBIO #3 VIENE ESEGUITO COME PREVISTO &lt;br /&gt;
SOLO PERCHE' VENGONO INVOCATE LE FUNZIONI PREDEFINITE &lt;br /&gt;
DEL ROBOT?&lt;/p&gt;
&lt;p&gt;MOTIVAZIONE: Osservate il codice seguente:&lt;/p&gt;
&lt;p&gt;public class __Prova4_ extends JJRobot&lt;br /&gt;
{&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
drive(0, 50);&lt;br /&gt;
while(true)&lt;br /&gt;
loc_x(); // oppure cannon&lt;br /&gt;
(.,.); o time();&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Il codice precedente funziona, cioè permette al robot &lt;br /&gt;
di vivere e sbattere contro il muro fino a che il &lt;br /&gt;
nemico non lo uccide, solo perché viene ciclicamente &lt;br /&gt;
invocata una funzione predefinita del robot. Se al &lt;br /&gt;
posto di quella istruzione ci fosse qualcos'altro &lt;br /&gt;
programmato da me, anche il semplice incremento di un &lt;br /&gt;
intero, l'applet non funzionerebbe.&lt;br /&gt;
Che senso ha questo comportamento? E' un obbligo &lt;br /&gt;
chiamare ciclicamente funzioni predefinite del robot &lt;br /&gt;
anche se non servono solo per far funzionare il gioco?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Bug in timing system (Offline vs. Online)?</title><link href="https://sourceforge.net/p/jrobots/bugs/1/" rel="alternate"/><published>2004-07-06T10:43:17Z</published><updated>2004-07-06T10:43:17Z</updated><author><name>Christian Marker</name><uri>https://sourceforge.net/u/comkeen/</uri></author><id>https://sourceforge.netef982872ce4f354c97e76311f54b4943c3d50695</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi there! &lt;/p&gt;
&lt;p&gt;I discovered the game a few days ago and liked the &lt;br /&gt;
way it works. So I decided to build a robot which is still &lt;br /&gt;
quite crappy at the moment because of my lack of Java &lt;br /&gt;
skills. &lt;/p&gt;
&lt;p&gt;I decided to let the robot drive in a random direction &lt;br /&gt;
and after 3 seconds drive in another. I do it like this: &lt;/p&gt;
&lt;p&gt;--- snip --- &lt;br /&gt;
void driveAround() &lt;br /&gt;
{ &lt;br /&gt;
time1 = time(); &lt;br /&gt;
if ((time1 - time2) &amp;gt; 3.0) &lt;br /&gt;
{ &lt;br /&gt;
driveAngle = driveAngle + rand(360); &lt;br /&gt;
drive(driveAngle, 50); &lt;br /&gt;
time2 = time(); &lt;br /&gt;
} &lt;br /&gt;
} &lt;br /&gt;
-- snip --- &lt;/p&gt;
&lt;p&gt;If I play OFFLINE, it works like the way I want it to &lt;br /&gt;
work - which means that the robot starts to move after &lt;br /&gt;
the first three seconds and then changes its direction &lt;br /&gt;
every other three seconds. &lt;/p&gt;
&lt;p&gt;However, if I play ONLINE, the robot works this way &lt;br /&gt;
only in the very first game I play. If this first game is &lt;br /&gt;
finished and I start another match, the robot just &lt;br /&gt;
stands still and doesn't move anymore. &lt;/p&gt;
&lt;p&gt;After I closed my browser and went back to your page &lt;br /&gt;
again, the applet loaded, I played the first match and - &lt;br /&gt;
the same results. The robot just stand still. &lt;/p&gt;
&lt;p&gt;Here is some information about my system: &lt;br /&gt;
* jrobots 4.0 &lt;br /&gt;
* java blackdown-jdk-1.4.1 &lt;br /&gt;
* Konqueror 3.1.5 &lt;/p&gt;&lt;/div&gt;</summary></entry></feed>