<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mind Unpacked &#187; robocode</title>
	<atom:link href="http://mindunpacked.com/tag/robocode/feed/" rel="self" type="application/rss+xml" />
	<link>http://mindunpacked.com</link>
	<description>informatica.elettronica.chimica.new stuff</description>
	<lastBuildDate>Tue, 22 Dec 2009 17:35:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
<link>http://mindunpacked.com</link>
<url>http://mindunpacked.com/wp-content/plugins/maxblogpress-favicon/icons/favicon-2.ico</url>
<title>Mind Unpacked</title>
</image>
		<item>
		<title>Robocode: guerre tra robot in Java</title>
		<link>http://mindunpacked.com/2009/robocode-guerre-tra-robot-in-java/</link>
		<comments>http://mindunpacked.com/2009/robocode-guerre-tra-robot-in-java/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 19:48:56 +0000</pubDate>
		<dc:creator>Francesco</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[crobots]]></category>
		<category><![CDATA[Intelligenza artificiale]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[robocode]]></category>

		<guid isPermaLink="false">http://mindunpacked.com/?p=378</guid>
		<description><![CDATA[Molti di voi probabilmente conosceranno o avranno sentito parlare di CRobots, il gioco di programmazione in cui gli sfidanti devono creare, usando un sottoinsieme delle istruzioni del linguaggio C, un robot che distrugga tutti gli altri robot (creati da altri programmatori) presenti nell&#8217;arena. Bene, Robocode e&#8217; un gioco molto simile ma con alcune differenze: i [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Molti di voi probabilmente conosceranno o avranno sentito parlare di <strong>CRobots</strong>, il gioco di programmazione in cui gli sfidanti devono creare, usando un sottoinsieme delle istruzioni del linguaggio C, un robot che distrugga tutti gli altri robot (creati da altri programmatori) presenti nell&#8217;arena. Bene, <strong>Robocode</strong> e&#8217; un gioco molto simile ma con alcune differenze: i robot si scrivono in Java e non ci sono limiti alla fantasia del programmatore come avveniva in CRobots (perche&#8217; usava solo un set limitato di istruzioni) rendendo possibile creare anche robot dalla complessa intelligenza artificiale!<br />
<span id="more-378"></span><br />
Sul <a href="http://robocode.sourceforge.net">sito ufficiale</a> di <strong>Robocode</strong> trovate molte info e l&#8217;installer in Java. Vediamo subito come creare il nostro primo robot dopo aver effettuato l&#8217;installazione. Subito dopo aver aperto Robocode, aprite il menu Robot e cliccate su Editor; si aprira&#8217; una nuova finestra, cioe&#8217; l&#8217;editor tramite il quale possiamo programmare i nostri robot. Cliccate su File-&gt;New-&gt;Robot. Battezzate la vostra creature e scegliete un nome o una sigla caratteristica per tutti i vostri robot (il programma crea una cartella contenente tutti i robot che creerete usando come nome la seconda sigla che inserite).</p>
<p style="text-align: justify;">Quello che vedete ora nell&#8217;editor e&#8217; il codice di base per un robot molto semplice che non fa altro che muoversi avanti e indietro e girare il suo cannone di 360 gradi, sparando quando vede un nemico. Ma analizziamo piu&#8217; da vicino il codice:</p>
<pre class="brush: java;">
public class MURobot extends Robot {
</pre>
<p>Creiamo una classe che eredita tutti gli attributi e i metodi dalla classe di base Robot.</p>
<pre class="brush: java;">
	/* Qui possiamo dichiarare tutte le variabili utilizzate dal nostro robot,
	 * in questo caso non ne abbiamo.
	 */
	public void run() {
		while(true) {
			ahead(100);
			turnGunRight(360);
			back(100);
			turnGunRight(360);
		}
	}
</pre>
<p style="text-align: justify;">Dopo aver dichiarato le eventuali variabili utilizzate all&#8217;interno della classe, vediamo il metodo run(). Questo metodo viene chiamato ogni qualvolta inizia la battaglia. All&#8217;interno di run() si trova quasi sempre un ciclo infinito: se l&#8217;esecuzione di run() termina, infatti, il nostro robot non fara&#8217; altro che stare fermo e sparare ai robot che rientrano nel suo campo visivo. Se dobbiamo svolgere delle azioni particolari, come il posizionamento in una particolare zona della mappa, conviene inserirle prima di entrare nel ciclo infinito.<br />
All&#8217;interno del ciclo il robot si muove in avanti (ahead(100)) fa un giro completo del cannone, torna indietro, fa lo stesso giro e cosi&#8217; finche&#8217; non viene distrutto o distrugge tutti i robot nell&#8217;arena.</p>
<p style="text-align: justify;">
<pre class="brush: java;">
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}
</pre>
<p><center><script type="text/javascript">
heyos_ad_user = 11334;
heyos_ad_type = "G";
heyos_ad_format = "1";
heyos_color_border = "23292b";
heyos_color_bg = "23292b";
heyos_color_link = "FFFFFF";
heyos_color_text = "21b8ca";
heyos_color_url = "21b8ca";
</script>
<script type="text/javascript" src="http://admaster.heyos.com/core/bnr.js"></script></center><br />
Il metodo onScannedRobot() e&#8217; uno dei tanti metodi per gestire gli eventi forniti di default. Questo metodo viene automaticamente eseguito quando un robot nemico rientra nel campo visivo del nostro: in questo caso l&#8217;azione e&#8217; di sparare. L&#8217;oggetto e (sta per event) passato come argomento contiene informazioni utili come la direzione del proiettile, la distanza da noi, etc&#8230; non utilizzate nel nostro caso. Potete consultare la documentazione sulle API di Robocode che e&#8217; molto esaustiva a riguardo.</p>
<pre class="brush: java;">
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(90 - e.getBearing());
	}
}
</pre>
<p style="text-align: justify;">L&#8217;ultimo metodo viene chiamato quando il nostro robot viene colpito da un proiettile: per evitare di essere colpiti di nuovo il robot si gira nella direzione perpendicolare al proiettile e quindi si sposta grazie alle istruzioni all&#8217;interno del metodo run(). Il metodo getBearing() restituisce l&#8217;angolo tra la direzione in cui ci stiamo muovendo e la direzione del proiettile ed e&#8217; sempre compreso tra -180 e 180, ed e&#8217; uno dei tanti metodi di cui vi parlavo in precedenza.</p>
<p style="text-align: justify;">Se provate a iniziare una battaglia tra questo robot e altri leggermente piu&#8217; avanzati presenti gia&#8217; di default, vi accorgerete che le sue prestazioni non sono proprio ottimali, di fatto perdera&#8217; la maggior parte delle battaglie se non tutte (ovviamente dipende contro chi lo fate combattere), ma e&#8217; comunque un inizio. Il metodo migliore per realizzare robot sempre piu&#8217; avanzati e&#8217; cominciare da subito a crearne: ricordate anche che avendo abbastanza padronanza con Java non ci sono limiti a quello che si puo&#8217; realizzare!</p>
]]></content:encoded>
			<wfw:commentRss>http://mindunpacked.com/2009/robocode-guerre-tra-robot-in-java/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
