<?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>Blog de Jorge Machín &#187; Videojuegos</title>
	<atom:link href="http://www.machin.com.mx/archives/category/juegos-de-computadora/feed" rel="self" type="application/rss+xml" />
	<link>http://www.machin.com.mx</link>
	<description>Sólo para recordar</description>
	<lastBuildDate>Fri, 10 Sep 2010 02:09:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zu-k City</title>
		<link>http://www.machin.com.mx/archives/4814</link>
		<comments>http://www.machin.com.mx/archives/4814#comments</comments>
		<pubDate>Thu, 05 Aug 2010 07:41:47 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>
		<category><![CDATA[Arqueología Machinesca]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Portafolio]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=4814</guid>
		<description><![CDATA[<p>Otro juego de fútbol multiusuario en el cual colaboré con la programación del lado del servidor. Lo interesante que tuvo este proyecto es que había bots que jugaban junto con el jugador y en su contra utilizando agentes y máquinas de estado.</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/zukcity/cancha3.jpg" alt="Juego contra la computadora" id="743861"  title="Juego contra la computadora" /><br /><a href="javascript:swapPhoto('/iGallery/zukcity/cancha3.jpg','743861')"><img src="/iGallery/zukcity/TN-cancha3.jpg" width="56" height="42" alt="Juego contra la computadora" title="Juego contra la computadora" /></a><a href="javascript:swapPhoto('/iGallery/zukcity/Cuarto3.jpg','743861')"><img src="/iGallery/zukcity/TN-Cuarto3.jpg" width="56" height="42" alt="Lobby del juego" title="Lobby del juego" /></a><a href="javascript:swapPhoto('/iGallery/zukcity/compu.jpg','743861')"><img src="/iGallery/zukcity/TN-compu.jpg" width="56" height="42" alt="Programé en mi laptop, pero con monitor y teclado" title="Programé en mi laptop, pero con monitor y teclado" /></a></div>
</center></p>
<p>Otra cosa que me gustó de este proyecto es que apliqué "nuevas técnicas" que me permitieron desarrollar mi parte en tiempo récord desde cero.</p>

]]></description>
			<content:encoded><![CDATA[<p>Otro juego de fútbol multiusuario en el cual colaboré con la programación del lado del servidor. Lo interesante que tuvo este proyecto es que había bots que jugaban junto con el jugador y en su contra utilizando agentes y máquinas de estado.</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/zukcity/cancha3.jpg" alt="Juego contra la computadora" id="853562"  title="Juego contra la computadora" /><br /><a href="javascript:swapPhoto('/iGallery/zukcity/cancha3.jpg','853562')"><img src="/iGallery/zukcity/TN-cancha3.jpg" width="56" height="42" alt="Juego contra la computadora" title="Juego contra la computadora" /></a><a href="javascript:swapPhoto('/iGallery/zukcity/Cuarto3.jpg','853562')"><img src="/iGallery/zukcity/TN-Cuarto3.jpg" width="56" height="42" alt="Lobby del juego" title="Lobby del juego" /></a><a href="javascript:swapPhoto('/iGallery/zukcity/compu.jpg','853562')"><img src="/iGallery/zukcity/TN-compu.jpg" width="56" height="42" alt="Programé en mi laptop, pero con monitor y teclado" title="Programé en mi laptop, pero con monitor y teclado" /></a></div>
</center></p>
<p>Otra cosa que me gustó de este proyecto es que apliqué "nuevas técnicas" que me permitieron desarrollar mi parte en tiempo récord desde cero.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/4814/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Juegos para el día de muertos (2009)</title>
		<link>http://www.machin.com.mx/archives/3550</link>
		<comments>http://www.machin.com.mx/archives/3550#comments</comments>
		<pubDate>Fri, 30 Oct 2009 06:16:53 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/archives/3550</guid>
		<description><![CDATA[<p>Este año, mucho trabajo y pocos juegos. Pero aún así siempre hay cinco minutos de vez en cuando para descansar y divertirse persiguiendo fantasmas, brujos y escapar del Lobo (¿?).</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/halloween2009/ghost1.jpg" alt="Ghostbusters" id="305597"  title="Ghostbusters" /><br /><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost1.jpg','305597')"><img src="/iGallery/halloween2009/TN-ghost1.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost2.jpg','305597')"><img src="/iGallery/halloween2009/TN-ghost2.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost3.jpg','305597')"><img src="/iGallery/halloween2009/TN-ghost3.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path3.jpg','305597')"><img src="/iGallery/halloween2009/TN-path3.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path1.jpg','305597')"><img src="/iGallery/halloween2009/TN-path1.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path2.jpg','305597')"><img src="/iGallery/halloween2009/TN-path2.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path4.jpg','305597')"><img src="/iGallery/halloween2009/TN-path4.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo3.jpg','305597')"><img src="/iGallery/halloween2009/TN-brujo3.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo1.jpg','305597')"><img src="/iGallery/halloween2009/TN-brujo1.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo2.jpg','305597')"><img src="/iGallery/halloween2009/TN-brujo2.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo4.jpg','305597')"><img src="/iGallery/halloween2009/TN-brujo4.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a></div>
</center></p>
<p>
<h4>Posts relacionados:</h4>
</p>
<p><a href="/archives/408">Juegos para el Día de Muertos (2008)</a><br />
<a href="/archives/162">Juegos para el Día de Muertos (2007)</a></p>

]]></description>
			<content:encoded><![CDATA[<p>Este año, mucho trabajo y pocos juegos. Pero aún así siempre hay cinco minutos de vez en cuando para descansar y divertirse persiguiendo fantasmas, brujos y escapar del Lobo (¿?).</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/halloween2009/ghost1.jpg" alt="Ghostbusters" id="141475"  title="Ghostbusters" /><br /><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost1.jpg','141475')"><img src="/iGallery/halloween2009/TN-ghost1.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost2.jpg','141475')"><img src="/iGallery/halloween2009/TN-ghost2.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/ghost3.jpg','141475')"><img src="/iGallery/halloween2009/TN-ghost3.jpg" width="56" height="42" alt="Ghostbusters" title="Ghostbusters" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path3.jpg','141475')"><img src="/iGallery/halloween2009/TN-path3.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path1.jpg','141475')"><img src="/iGallery/halloween2009/TN-path1.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path2.jpg','141475')"><img src="/iGallery/halloween2009/TN-path2.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/path4.jpg','141475')"><img src="/iGallery/halloween2009/TN-path4.jpg" width="56" height="42" alt="The Path" title="The Path" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo3.jpg','141475')"><img src="/iGallery/halloween2009/TN-brujo3.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo1.jpg','141475')"><img src="/iGallery/halloween2009/TN-brujo1.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo2.jpg','141475')"><img src="/iGallery/halloween2009/TN-brujo2.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a><a href="javascript:swapPhoto('/iGallery/halloween2009/brujo4.jpg','141475')"><img src="/iGallery/halloween2009/TN-brujo4.jpg" width="56" height="42" alt="The Witcher" title="The Witcher" /></a></div>
</center></p>
<p>
<h4>Posts relacionados:</h4>
</p>
<p><a href="/archives/408">Juegos para el Día de Muertos (2008)</a><br />
<a href="/archives/162">Juegos para el Día de Muertos (2007)</a></p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/3550/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proyecto: Haciendo un juego multiusuario para la Color Computer 2 (Parte 3)</title>
		<link>http://www.machin.com.mx/archives/2404</link>
		<comments>http://www.machin.com.mx/archives/2404#comments</comments>
		<pubDate>Fri, 28 Aug 2009 08:07:12 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Color Computer]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=2404</guid>
		<description><![CDATA[<p>En este post se va a tratar el movimiento de los jugadores usando BASIC para experimentar la velocidad y ver si se continua con este lenguaje o bien se hace la programación en ensamblador.</p>
<p>
<h4>El programa en BASIC</h4>
</p>
<p>Se corre el juego sin ningún problema en alta velocidad:</p>
<div class="syntax_hilite">
<div id="vb-1">
<div class="vb"><span style="color: #cc66cc;">10</span> POKE <span style="color: #cc66cc;">65495</span>,<span style="color: #cc66cc;">0</span></div>
</div>
</div>
<p></p>
<p>Se inicializa la interfaz en serie, como se vio en el post anterior:</p>
<div class="syntax_hilite">
<div id="vb-2">
<div class="vb"><span style="color: #cc66cc;">50</span> <span style="color: #b1b100;">REM</span> CONFIGURACION INICIAL DE LA CONEXION EN SERIE<br />
<span style="color: #cc66cc;">60</span> POKE <span style="color: #cc66cc;">65387</span>,<span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">70</span> POKE <span style="color: #cc66cc;">65386</span>,<span style="color: #cc66cc;">11</span></div>
</div>
</div>
<p></p>
<p>Además programamos dos subrutinas para el envio y recepción de datos:</p>
<div class="syntax_hilite">
<div id="vb-3">
<div class="vb"><span style="color: #cc66cc;">790</span> <span style="color: #b1b100;">REM</span> LECTURA DEL PUERTO SERIE<br />
<span style="color: #cc66cc;">800</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">810</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">820</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">830</span> D$=<span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span>PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65384</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">840</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"RECIBE: "</span> + D$<br />
<span style="color: #cc66cc;">850</span> <span style="color: #b1b100;">RETURN</span><br />
<span style="color: #cc66cc;">860</span> <span style="color: #b1b100;">REM</span> ESCRITURA DEL PUERTO SERIE<br />
<span style="color: #cc66cc;">870</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">880</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">890</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">900</span> POKE <span style="color: #cc66cc;">65384</span>,<span style="color: #b1b100;">ASC</span><span style="color: #66cc66;">&#40;</span>A$<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">910</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"ENVIA: "</span> + A$<br />
<span style="color: #cc66cc;">920</span> <span style="color: #b1b100;">RETURN</span></div>
</div>
</div>
<p></p>
<p>Para sincronizar el inicio de la comunicación entre las dos computadoras, cada una de ellas manda un mensaje con el caracter "N" y al mismo tiempo lo espera recibir.  Esto nos permite correr el juego de manera asíncrona y no importa que computadora empiece primero:</p>
<div class="syntax_hilite">
<div id="vb-4">
<div class="vb"><span style="color: #cc66cc;">40</span> CLS<br />
<span style="color: #cc66cc;">80</span> <span style="color: #b1b100;">REM</span> MANDA LA SEÑAL DE SINCRONIZACION<br />
<span style="color: #cc66cc;">90</span> A$=<span style="color: #ff0000;">"N"</span>:<span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">100</span> <span style="color: #b1b100;">REM</span> ESPERA LA SEÑAL DE SINCRONIZACION<br />
<span style="color: #cc66cc;">110</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">120</span> <span style="color: #b1b100;">IF</span> D$&lt;&gt;<span style="color: #ff0000;">"N"</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">90</span></div>
</div>
</div>
<p></p>
<p>Como nuestro juego es "punto a punto" y cualquiera de las dos computadoras puede correr primero su programa; hacemos un sorteo para elegir que jugador va usar cada uno de ellos:</p>
<div class="syntax_hilite">
<div id="vb-5">
<div class="vb"><span style="color: #cc66cc;">130</span> <span style="color: #b1b100;">REM</span> REALIZA EL SORTEO<br />
<span style="color: #cc66cc;">140</span> A$=<span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">RND</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #cc66cc;">47</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">150</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"RESULTADO: "</span> + A$<br />
<span style="color: #cc66cc;">155</span> <span style="color: #b1b100;">REM</span> ENVIA NUESTRO NUMERO ALEATORIO<br />
<span style="color: #cc66cc;">160</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">165</span> <span style="color: #b1b100;">REM</span> ESPERA RECIBIR EL NUMERO ALEATORIO DE NUESTRO CONTRINCANTE<br />
<span style="color: #cc66cc;">170</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">175</span> <span style="color: #b1b100;">REM</span> SI EMPATARON, VUELVE A HACER EL SORTEO<br />
<span style="color: #cc66cc;">180</span> <span style="color: #b1b100;">IF</span> A$=D$ <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">140</span></p>
<p><span style="color: #cc66cc;">280</span> <span style="color: #b1b100;">IF</span> <span style="color: #66cc66;">&#40;</span> A$&gt;D$<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">320</span><br />
<span style="color: #cc66cc;">290</span> FX=<span style="color: #cc66cc;">0</span>:FY=<span style="color: #cc66cc;">100</span><br />
<span style="color: #cc66cc;">300</span> GX=<span style="color: #cc66cc;">0</span>:GY=<span style="color: #cc66cc;">50</span><br />
<span style="color: #cc66cc;">310</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">340</span><br />
<span style="color: #cc66cc;">320</span> FX=<span style="color: #cc66cc;">0</span>:FY=<span style="color: #cc66cc;">50</span><br />
<span style="color: #cc66cc;">330</span> GX=<span style="color: #cc66cc;">0</span>:GY=<span style="color: #cc66cc;">100</span></div>
</div>
</div>
<p></p>
<p>Ahora nos vamos a ocupar de las animaciones de nuestros jugadores. Me basé en una técnica que aprendí del libro <strong>"Gráficos y sonidos para el Dragón"</strong> de <strong>K y S Brain</strong> ; Justamente cuando era niño. Consiste en primero dibujar a los jugadores y obtener una copia de la representación en memoria de sus movimientos por medio de la orden GET para después durante el juego copiar esa memoria durante el juego con la orden PUT.</p>
<p>El código que dibuja los movimientos de los jugadores y los guarda en memoria es el siguiente:
</p>
<table width="100%">
<tr>
<td width="70%">
<div class="syntax_hilite">
<div id="vb-6">
<div class="vb"><span style="color: #cc66cc;">20</span> <span style="color: #b1b100;">DIM</span> F1<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> F2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> F0<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">30</span> <span style="color: #b1b100;">DIM</span> G1<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> G2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> G0<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span></p>
<p><span style="color: #cc66cc;">190</span> PMODE <span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">200</span> SCREEN <span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">210</span> PCLS <span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">220</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">710</span><br />
<span style="color: #cc66cc;">230</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">26</span>,<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,G<br />
<span style="color: #cc66cc;">240</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">26</span>,<span style="color: #cc66cc;">35</span><span style="color: #66cc66;">&#41;</span>,G1,G<br />
<span style="color: #cc66cc;">250</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">46</span>,<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F2,G<br />
<span style="color: #cc66cc;">260</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span>,<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">46</span>,<span style="color: #cc66cc;">35</span><span style="color: #66cc66;">&#41;</span>,G2,G</p>
<p><span style="color: #cc66cc;">710</span> <span style="color: #b1b100;">REM</span> DIBUJA LOS MOVIMIENTOS DE LOS JUGADORES<br />
<span style="color: #cc66cc;">720</span> <span style="color: #b1b100;">FOR</span> N=<span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">40</span><br />
<span style="color: #cc66cc;">730</span> READ X,Y:PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">10</span>,Y<span style="color: #66cc66;">&#41;</span>: PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">10</span>,Y+<span style="color: #cc66cc;">20</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">740</span> <span style="color: #b1b100;">NEXT</span> N<br />
<span style="color: #cc66cc;">750</span> <span style="color: #b1b100;">FOR</span> N=<span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">48</span><br />
<span style="color: #cc66cc;">760</span> READ X,Y:PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">30</span>,Y<span style="color: #66cc66;">&#41;</span>: PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">30</span>,Y+<span style="color: #cc66cc;">20</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">770</span> <span style="color: #b1b100;">NEXT</span> N<br />
<span style="color: #cc66cc;">780</span> <span style="color: #b1b100;">RETURN</span></p>
<p><span style="color: #cc66cc;">925</span> <span style="color: #b1b100;">REM</span> MOVIMIENTO CON PIERNAS JUNTAS<br />
<span style="color: #cc66cc;">930</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">940</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">950</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">2</span><br />
<span style="color: #cc66cc;">960</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">3</span><br />
<span style="color: #cc66cc;">970</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">4</span><br />
<span style="color: #cc66cc;">980</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">5</span><br />
<span style="color: #cc66cc;">990</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">6</span><br />
<span style="color: #cc66cc;">1000</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">7</span><br />
<span style="color: #cc66cc;">1010</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">1020</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">9</span><br />
<span style="color: #cc66cc;">1030</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span><br />
<span style="color: #cc66cc;">1040</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">11</span><br />
<span style="color: #cc66cc;">1050</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">12</span><br />
<span style="color: #cc66cc;">1060</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">13</span><br />
<span style="color: #cc66cc;">1070</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">14</span><br />
<span style="color: #cc66cc;">1080</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">15</span></p>
<p><span style="color: #cc66cc;">1085</span> <span style="color: #b1b100;">REM</span> MOVIMIENTO CON PIERNAS SEPARADAS<br />
<span style="color: #cc66cc;">1090</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">1100</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">1110</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">2</span><br />
<span style="color: #cc66cc;">1120</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">3</span><br />
<span style="color: #cc66cc;">1130</span> DATA <span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">4</span><br />
<span style="color: #cc66cc;">1140</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">5</span><br />
<span style="color: #cc66cc;">1150</span> DATA <span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">6</span><br />
<span style="color: #cc66cc;">1160</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">7</span><br />
<span style="color: #cc66cc;">1170</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">1180</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">9</span><br />
<span style="color: #cc66cc;">1190</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span><br />
<span style="color: #cc66cc;">1200</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">11</span><br />
<span style="color: #cc66cc;">1210</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">12</span><br />
<span style="color: #cc66cc;">1220</span> DATA <span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">13</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">13</span><br />
<span style="color: #cc66cc;">1230</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">14</span><br />
<span style="color: #cc66cc;">1240</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">15</span></div>
</div>
</div>
<p>
</td>
<td valign="top">
<p align="center">
<a href="http://www.machin.com.mx/archives/2404/grafysonidos" rel="attachment wp-att-2422"><img src="http://www.machin.com.mx/wp-content/uploads/2009/08/grafysonidos.jpg" alt="grafysonidos" title="grafysonidos" width="150" height="241" class="alignnone size-full wp-image-2422" /></a><br />
<strong>Con los libros de la clon Dragon,<br />
aprendí muchas técnicas de programación</strong>
</p>
</td>
</tr>
</table>
<p>Ya con todas las inicializaciones, podemos dibujar la "cancha" y a los jugadores:</p>
<div class="syntax_hilite">
<div id="vb-7">
<div class="vb"><span style="color: #cc66cc;">270</span> PCLS1<br />
<span style="color: #cc66cc;">340</span> <span style="color: #b1b100;">FOR</span> LI=<span style="color: #cc66cc;">105</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">110</span> STEP <span style="color: #cc66cc;">5</span>:<span style="color: #b1b100;">LINE</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,LI<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span>,LI-<span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>,PSET:<span style="color: #b1b100;">NEXT</span> LI<br />
<span style="color: #cc66cc;">350</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,G<br />
<span style="color: #cc66cc;">360</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">370</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,G<br />
<span style="color: #cc66cc;">380</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>El movimiento del jugador local se a través del teclado:</p>
<div class="syntax_hilite">
<div id="vb-8">
<div class="vb"><span style="color: #cc66cc;">390</span> A$=INKEY$<br />
<span style="color: #cc66cc;">400</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">""</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">560</span><br />
<span style="color: #cc66cc;">410</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,PSET<br />
<span style="color: #cc66cc;">420</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"P"</span> <span style="color: #b1b100;">THEN</span> FX=FX+<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">430</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"O"</span> <span style="color: #b1b100;">THEN</span> FX=FX-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">440</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"Q"</span> <span style="color: #b1b100;">THEN</span> FY=FY-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">450</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"A"</span> <span style="color: #b1b100;">THEN</span> FY=FY+<span style="color: #cc66cc;">16</span></p>
<p><span style="color: #cc66cc;">460</span> <span style="color: #b1b100;">REM</span> DIBUJAMOS LA NUEVA POSICION DEL JUGADOR LOCAL<br />
<span style="color: #cc66cc;">470</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,G<br />
<span style="color: #cc66cc;">480</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F2,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">490</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,<span style="color: #b1b100;">AND</span><br />
<span style="color: #cc66cc;">500</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>Para simplificar la programación, en lugar de hacer un sistema de mensajes, simplemente se envia la tecla presionada al otro jugador:</p>
<div class="syntax_hilite">
<div id="vb-9">
<div class="vb"><span style="color: #cc66cc;">455</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span></div>
</div>
</div>
<p></p>
<p>Se revisa si el jugador remoto presionó alguna tecla y se procesa de la misma forma que para el jugador local:</p>
<div class="syntax_hilite">
<div id="vb-10">
<div class="vb"><span style="color: #cc66cc;">560</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">790</span><br />
<span style="color: #cc66cc;">610</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,PSET<br />
<span style="color: #cc66cc;">620</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"P"</span> <span style="color: #b1b100;">THEN</span> GX=GX+<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">630</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"O"</span> <span style="color: #b1b100;">THEN</span> GX=GX-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">640</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"Q"</span> <span style="color: #b1b100;">THEN</span> GY=GY-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">650</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"A"</span> <span style="color: #b1b100;">THEN</span> GY=GY+<span style="color: #cc66cc;">16</span></p>
<p><span style="color: #cc66cc;">655</span> <span style="color: #b1b100;">REM</span> DIBUJAMOS LA NUEVA POSICION DEL JUGADOR REMOTO<br />
<span style="color: #cc66cc;">660</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,G<br />
<span style="color: #cc66cc;">670</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G2,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">680</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,<span style="color: #b1b100;">AND</span><br />
<span style="color: #cc66cc;">690</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>Finalmente, repetimos el ciclo:</p>
<div class="syntax_hilite">
<div id="vb-11">
<div class="vb"><span style="color: #cc66cc;">700</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">390</span></div>
</div>
</div>
<p></p>
<h4>Conclusiones de esta parte</h4>
<p>En el siguiente video, podemos apreciar el funcionamiento del programa:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/W-NiaxW4siw&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/W-NiaxW4siw&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>Como podemos ver, aún para ser un programa en BASIC la velocidad es razonable; sobretodo para juegos de turno como los de cartas y ajedrez. En realidad la velocidad esta limitada por la velocidad de las instrucciones gráficas, por lo que un juego en baja resolución funcionaria muy rápido para juegos de acción. Si se va usar alta resolución para un juego de acción, lo conveniente es usar pocos efectos gráficos o bien programarlo en ensamblador.</p>
<p>Muchas Gracias a mi hermano por la interpretación de la música de fondo del video.</p>

]]></description>
			<content:encoded><![CDATA[<p>En este post se va a tratar el movimiento de los jugadores usando BASIC para experimentar la velocidad y ver si se continua con este lenguaje o bien se hace la programación en ensamblador.</p>
<p>
<h4>El programa en BASIC</h4>
</p>
<p>Se corre el juego sin ningún problema en alta velocidad:</p>
<div class="syntax_hilite">
<div id="vb-12">
<div class="vb"><span style="color: #cc66cc;">10</span> POKE <span style="color: #cc66cc;">65495</span>,<span style="color: #cc66cc;">0</span></div>
</div>
</div>
<p></p>
<p>Se inicializa la interfaz en serie, como se vio en el post anterior:</p>
<div class="syntax_hilite">
<div id="vb-13">
<div class="vb"><span style="color: #cc66cc;">50</span> <span style="color: #b1b100;">REM</span> CONFIGURACION INICIAL DE LA CONEXION EN SERIE<br />
<span style="color: #cc66cc;">60</span> POKE <span style="color: #cc66cc;">65387</span>,<span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">70</span> POKE <span style="color: #cc66cc;">65386</span>,<span style="color: #cc66cc;">11</span></div>
</div>
</div>
<p></p>
<p>Además programamos dos subrutinas para el envio y recepción de datos:</p>
<div class="syntax_hilite">
<div id="vb-14">
<div class="vb"><span style="color: #cc66cc;">790</span> <span style="color: #b1b100;">REM</span> LECTURA DEL PUERTO SERIE<br />
<span style="color: #cc66cc;">800</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">810</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">820</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">830</span> D$=<span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span>PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65384</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">840</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"RECIBE: "</span> + D$<br />
<span style="color: #cc66cc;">850</span> <span style="color: #b1b100;">RETURN</span><br />
<span style="color: #cc66cc;">860</span> <span style="color: #b1b100;">REM</span> ESCRITURA DEL PUERTO SERIE<br />
<span style="color: #cc66cc;">870</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">880</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">890</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">900</span> POKE <span style="color: #cc66cc;">65384</span>,<span style="color: #b1b100;">ASC</span><span style="color: #66cc66;">&#40;</span>A$<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">910</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"ENVIA: "</span> + A$<br />
<span style="color: #cc66cc;">920</span> <span style="color: #b1b100;">RETURN</span></div>
</div>
</div>
<p></p>
<p>Para sincronizar el inicio de la comunicación entre las dos computadoras, cada una de ellas manda un mensaje con el caracter "N" y al mismo tiempo lo espera recibir.  Esto nos permite correr el juego de manera asíncrona y no importa que computadora empiece primero:</p>
<div class="syntax_hilite">
<div id="vb-15">
<div class="vb"><span style="color: #cc66cc;">40</span> CLS<br />
<span style="color: #cc66cc;">80</span> <span style="color: #b1b100;">REM</span> MANDA LA SEÑAL DE SINCRONIZACION<br />
<span style="color: #cc66cc;">90</span> A$=<span style="color: #ff0000;">"N"</span>:<span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">100</span> <span style="color: #b1b100;">REM</span> ESPERA LA SEÑAL DE SINCRONIZACION<br />
<span style="color: #cc66cc;">110</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">120</span> <span style="color: #b1b100;">IF</span> D$&lt;&gt;<span style="color: #ff0000;">"N"</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">90</span></div>
</div>
</div>
<p></p>
<p>Como nuestro juego es "punto a punto" y cualquiera de las dos computadoras puede correr primero su programa; hacemos un sorteo para elegir que jugador va usar cada uno de ellos:</p>
<div class="syntax_hilite">
<div id="vb-16">
<div class="vb"><span style="color: #cc66cc;">130</span> <span style="color: #b1b100;">REM</span> REALIZA EL SORTEO<br />
<span style="color: #cc66cc;">140</span> A$=<span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">RND</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #cc66cc;">47</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">150</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">"RESULTADO: "</span> + A$<br />
<span style="color: #cc66cc;">155</span> <span style="color: #b1b100;">REM</span> ENVIA NUESTRO NUMERO ALEATORIO<br />
<span style="color: #cc66cc;">160</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span><br />
<span style="color: #cc66cc;">165</span> <span style="color: #b1b100;">REM</span> ESPERA RECIBIR EL NUMERO ALEATORIO DE NUESTRO CONTRINCANTE<br />
<span style="color: #cc66cc;">170</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">800</span><br />
<span style="color: #cc66cc;">175</span> <span style="color: #b1b100;">REM</span> SI EMPATARON, VUELVE A HACER EL SORTEO<br />
<span style="color: #cc66cc;">180</span> <span style="color: #b1b100;">IF</span> A$=D$ <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">140</span></p>
<p><span style="color: #cc66cc;">280</span> <span style="color: #b1b100;">IF</span> <span style="color: #66cc66;">&#40;</span> A$&gt;D$<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">320</span><br />
<span style="color: #cc66cc;">290</span> FX=<span style="color: #cc66cc;">0</span>:FY=<span style="color: #cc66cc;">100</span><br />
<span style="color: #cc66cc;">300</span> GX=<span style="color: #cc66cc;">0</span>:GY=<span style="color: #cc66cc;">50</span><br />
<span style="color: #cc66cc;">310</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">340</span><br />
<span style="color: #cc66cc;">320</span> FX=<span style="color: #cc66cc;">0</span>:FY=<span style="color: #cc66cc;">50</span><br />
<span style="color: #cc66cc;">330</span> GX=<span style="color: #cc66cc;">0</span>:GY=<span style="color: #cc66cc;">100</span></div>
</div>
</div>
<p></p>
<p>Ahora nos vamos a ocupar de las animaciones de nuestros jugadores. Me basé en una técnica que aprendí del libro <strong>"Gráficos y sonidos para el Dragón"</strong> de <strong>K y S Brain</strong> ; Justamente cuando era niño. Consiste en primero dibujar a los jugadores y obtener una copia de la representación en memoria de sus movimientos por medio de la orden GET para después durante el juego copiar esa memoria durante el juego con la orden PUT.</p>
<p>El código que dibuja los movimientos de los jugadores y los guarda en memoria es el siguiente:
</p>
<table width="100%">
<tr>
<td width="70%">
<div class="syntax_hilite">
<div id="vb-17">
<div class="vb"><span style="color: #cc66cc;">20</span> <span style="color: #b1b100;">DIM</span> F1<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> F2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> F0<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">30</span> <span style="color: #b1b100;">DIM</span> G1<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> G2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #b1b100;">DIM</span> G0<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span></p>
<p><span style="color: #cc66cc;">190</span> PMODE <span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">200</span> SCREEN <span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">210</span> PCLS <span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">220</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">710</span><br />
<span style="color: #cc66cc;">230</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">26</span>,<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,G<br />
<span style="color: #cc66cc;">240</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">26</span>,<span style="color: #cc66cc;">35</span><span style="color: #66cc66;">&#41;</span>,G1,G<br />
<span style="color: #cc66cc;">250</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">46</span>,<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F2,G<br />
<span style="color: #cc66cc;">260</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span>,<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">46</span>,<span style="color: #cc66cc;">35</span><span style="color: #66cc66;">&#41;</span>,G2,G</p>
<p><span style="color: #cc66cc;">710</span> <span style="color: #b1b100;">REM</span> DIBUJA LOS MOVIMIENTOS DE LOS JUGADORES<br />
<span style="color: #cc66cc;">720</span> <span style="color: #b1b100;">FOR</span> N=<span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">40</span><br />
<span style="color: #cc66cc;">730</span> READ X,Y:PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">10</span>,Y<span style="color: #66cc66;">&#41;</span>: PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">10</span>,Y+<span style="color: #cc66cc;">20</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">740</span> <span style="color: #b1b100;">NEXT</span> N<br />
<span style="color: #cc66cc;">750</span> <span style="color: #b1b100;">FOR</span> N=<span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">48</span><br />
<span style="color: #cc66cc;">760</span> READ X,Y:PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">30</span>,Y<span style="color: #66cc66;">&#41;</span>: PSET<span style="color: #66cc66;">&#40;</span>X+<span style="color: #cc66cc;">30</span>,Y+<span style="color: #cc66cc;">20</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">770</span> <span style="color: #b1b100;">NEXT</span> N<br />
<span style="color: #cc66cc;">780</span> <span style="color: #b1b100;">RETURN</span></p>
<p><span style="color: #cc66cc;">925</span> <span style="color: #b1b100;">REM</span> MOVIMIENTO CON PIERNAS JUNTAS<br />
<span style="color: #cc66cc;">930</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">940</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">950</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">2</span><br />
<span style="color: #cc66cc;">960</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">3</span><br />
<span style="color: #cc66cc;">970</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">4</span><br />
<span style="color: #cc66cc;">980</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">5</span><br />
<span style="color: #cc66cc;">990</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">6</span><br />
<span style="color: #cc66cc;">1000</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">7</span><br />
<span style="color: #cc66cc;">1010</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">1020</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">9</span><br />
<span style="color: #cc66cc;">1030</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span><br />
<span style="color: #cc66cc;">1040</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">11</span><br />
<span style="color: #cc66cc;">1050</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">12</span><br />
<span style="color: #cc66cc;">1060</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">13</span><br />
<span style="color: #cc66cc;">1070</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">14</span><br />
<span style="color: #cc66cc;">1080</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">15</span></p>
<p><span style="color: #cc66cc;">1085</span> <span style="color: #b1b100;">REM</span> MOVIMIENTO CON PIERNAS SEPARADAS<br />
<span style="color: #cc66cc;">1090</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">0</span><br />
<span style="color: #cc66cc;">1100</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">1</span><br />
<span style="color: #cc66cc;">1110</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">2</span><br />
<span style="color: #cc66cc;">1120</span> DATA <span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">3</span><br />
<span style="color: #cc66cc;">1130</span> DATA <span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">4</span><br />
<span style="color: #cc66cc;">1140</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">5</span><br />
<span style="color: #cc66cc;">1150</span> DATA <span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">6</span><br />
<span style="color: #cc66cc;">1160</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">7</span><br />
<span style="color: #cc66cc;">1170</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">1180</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">9</span><br />
<span style="color: #cc66cc;">1190</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span><br />
<span style="color: #cc66cc;">1200</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">11</span><br />
<span style="color: #cc66cc;">1210</span> DATA <span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">12</span><br />
<span style="color: #cc66cc;">1220</span> DATA <span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">13</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">13</span><br />
<span style="color: #cc66cc;">1230</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">14</span><br />
<span style="color: #cc66cc;">1240</span> DATA <span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">14</span>,<span style="color: #cc66cc;">15</span>,<span style="color: #cc66cc;">16</span>,<span style="color: #cc66cc;">15</span></div>
</div>
</div>
<p>
</td>
<td valign="top">
<p align="center">
<a href="http://www.machin.com.mx/archives/2404/grafysonidos" rel="attachment wp-att-2422"><img src="http://www.machin.com.mx/wp-content/uploads/2009/08/grafysonidos.jpg" alt="grafysonidos" title="grafysonidos" width="150" height="241" class="alignnone size-full wp-image-2422" /></a><br />
<strong>Con los libros de la clon Dragon,<br />
aprendí muchas técnicas de programación</strong>
</p>
</td>
</tr>
</table>
<p>Ya con todas las inicializaciones, podemos dibujar la "cancha" y a los jugadores:</p>
<div class="syntax_hilite">
<div id="vb-18">
<div class="vb"><span style="color: #cc66cc;">270</span> PCLS1<br />
<span style="color: #cc66cc;">340</span> <span style="color: #b1b100;">FOR</span> LI=<span style="color: #cc66cc;">105</span> <span style="color: #b1b100;">TO</span> <span style="color: #cc66cc;">110</span> STEP <span style="color: #cc66cc;">5</span>:<span style="color: #b1b100;">LINE</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,LI<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span>,LI-<span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>,PSET:<span style="color: #b1b100;">NEXT</span> LI<br />
<span style="color: #cc66cc;">350</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,G<br />
<span style="color: #cc66cc;">360</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">370</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,G<br />
<span style="color: #cc66cc;">380</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>El movimiento del jugador local se a través del teclado:</p>
<div class="syntax_hilite">
<div id="vb-19">
<div class="vb"><span style="color: #cc66cc;">390</span> A$=INKEY$<br />
<span style="color: #cc66cc;">400</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">""</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">560</span><br />
<span style="color: #cc66cc;">410</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,PSET<br />
<span style="color: #cc66cc;">420</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"P"</span> <span style="color: #b1b100;">THEN</span> FX=FX+<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">430</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"O"</span> <span style="color: #b1b100;">THEN</span> FX=FX-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">440</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"Q"</span> <span style="color: #b1b100;">THEN</span> FY=FY-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">450</span> <span style="color: #b1b100;">IF</span> A$=<span style="color: #ff0000;">"A"</span> <span style="color: #b1b100;">THEN</span> FY=FY+<span style="color: #cc66cc;">16</span></p>
<p><span style="color: #cc66cc;">460</span> <span style="color: #b1b100;">REM</span> DIBUJAMOS LA NUEVA POSICION DEL JUGADOR LOCAL<br />
<span style="color: #cc66cc;">470</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,G<br />
<span style="color: #cc66cc;">480</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F2,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">490</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F0,<span style="color: #b1b100;">AND</span><br />
<span style="color: #cc66cc;">500</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>FX,FY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>FX+<span style="color: #cc66cc;">16</span>,FY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,F1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>Para simplificar la programación, en lugar de hacer un sistema de mensajes, simplemente se envia la tecla presionada al otro jugador:</p>
<div class="syntax_hilite">
<div id="vb-20">
<div class="vb"><span style="color: #cc66cc;">455</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">870</span></div>
</div>
</div>
<p></p>
<p>Se revisa si el jugador remoto presionó alguna tecla y se procesa de la misma forma que para el jugador local:</p>
<div class="syntax_hilite">
<div id="vb-21">
<div class="vb"><span style="color: #cc66cc;">560</span> <span style="color: #b1b100;">GOSUB</span> <span style="color: #cc66cc;">790</span><br />
<span style="color: #cc66cc;">610</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,PSET<br />
<span style="color: #cc66cc;">620</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"P"</span> <span style="color: #b1b100;">THEN</span> GX=GX+<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">630</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"O"</span> <span style="color: #b1b100;">THEN</span> GX=GX-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">640</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"Q"</span> <span style="color: #b1b100;">THEN</span> GY=GY-<span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">650</span> <span style="color: #b1b100;">IF</span> D$=<span style="color: #ff0000;">"A"</span> <span style="color: #b1b100;">THEN</span> GY=GY+<span style="color: #cc66cc;">16</span></p>
<p><span style="color: #cc66cc;">655</span> <span style="color: #b1b100;">REM</span> DIBUJAMOS LA NUEVA POSICION DEL JUGADOR REMOTO<br />
<span style="color: #cc66cc;">660</span> <span style="color: #b1b100;">GET</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,G<br />
<span style="color: #cc66cc;">670</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G2,<span style="color: #b1b100;">OR</span><br />
<span style="color: #cc66cc;">680</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G0,<span style="color: #b1b100;">AND</span><br />
<span style="color: #cc66cc;">690</span> <span style="color: #b1b100;">PUT</span><span style="color: #66cc66;">&#40;</span>GX,GY<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>GX+<span style="color: #cc66cc;">16</span>,GY+<span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span>,G1,<span style="color: #b1b100;">OR</span></div>
</div>
</div>
<p></p>
<p>Finalmente, repetimos el ciclo:</p>
<div class="syntax_hilite">
<div id="vb-22">
<div class="vb"><span style="color: #cc66cc;">700</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">390</span></div>
</div>
</div>
<p></p>
<h4>Conclusiones de esta parte</h4>
<p>En el siguiente video, podemos apreciar el funcionamiento del programa:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/W-NiaxW4siw&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/W-NiaxW4siw&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>Como podemos ver, aún para ser un programa en BASIC la velocidad es razonable; sobretodo para juegos de turno como los de cartas y ajedrez. En realidad la velocidad esta limitada por la velocidad de las instrucciones gráficas, por lo que un juego en baja resolución funcionaria muy rápido para juegos de acción. Si se va usar alta resolución para un juego de acción, lo conveniente es usar pocos efectos gráficos o bien programarlo en ensamblador.</p>
<p>Muchas Gracias a mi hermano por la interpretación de la música de fondo del video.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/2404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proyecto: Haciendo un juego multiusuario para la Color Computer (Parte 2)</title>
		<link>http://www.machin.com.mx/archives/2306</link>
		<comments>http://www.machin.com.mx/archives/2306#comments</comments>
		<pubDate>Fri, 07 Aug 2009 06:31:38 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Color Computer]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=2306</guid>
		<description><![CDATA[<p>Ahora que hemos comprobado el correcto funcionamiento de la Interface RS-232, el siguiente paso es establecer la comunicación entre las dos computadoras por medio del lenguaje BASIC.</p>
<p>La configuración de la interface RS-232 se hace a través de dos registros del circuito integrado 6551, los cuales son accesibles en las direcciones de memoria 65386 y 65387. El primero se conoce como el registro de control, el cual se utiliza para establecer la velocidad de transmisión en baudios, la fuente de frecuencia, el tamaño de la palabra y el número de bits de parada.</p>
<p>El segundo es el registro de comandos, que controlada diferentes modos y funciones como el modo de echo y comunicación con paridad.</p>
<table align="center">
<tr>
<td valign="top">
<p align="center">
<img src="/wp-content/uploads/2009/08/controlregister.gif" alt="controlregister" title="controlregister" width="301" height="515"  /><br />
<strong>Tabla 1</strong> Configuración del registro de control<br />
según el manual del usuario
</p>
</td>
<td align="center " valign="top">
<p align="center">
<img src="/wp-content/uploads/2009/08/commandregister.gif" alt="commandregister" title="commandregister" width="301" height="515" /><br />
<strong>Tabla 2</strong> Configuración del registro de comando<br />
según el manual del usuario
</p>
</td>
</tr>
</table>
<p>La programación de los registros se hace por medio de dos pokes:</p>
<div class="syntax_hilite">
<div id="vb-23">
<div class="vb"><span style="color: #cc66cc;">5</span> <span style="color: #b1b100;">REM</span> ESTABLECEMOS EL REGISTRO DE CONTROL<br />
<span style="color: #cc66cc;">10</span> POKE <span style="color: #cc66cc;">65387</span>,<span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">15</span> <span style="color: #b1b100;">REM</span> ESTABLECEMOS EL REGISTRO DE COMANDOS<br />
<span style="color: #cc66cc;">20</span> POKE <span style="color: #cc66cc;">65386</span>,<span style="color: #cc66cc;">11</span></div>
</div>
</div>
<p></p>
<p>En este programa de prueba, guardamos si hay una tecla presionada para posteriormente mandarla:</p>
<div class="syntax_hilite">
<div id="vb-24">
<div class="vb"><span style="color: #cc66cc;">30</span> I$=INKEY$</div>
</div>
</div>
<p></p>
<p>Para saber si hemos recibido información de la otra conexión, se debe consultar el registro de estado del circuito integrado 6551. Este es acceble desde la dirección de memoria 65385.</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/08/statusregister.gif" alt="statusregister" title="statusregister" width="279" height="469"  /><br />
<strong>Tabla 3</strong> Configuración del registro de estado<br />
según el manual del usuario
</p>
<p>Si el bit 3 esta a uno, es que hay información por leer.</p>
<div class="syntax_hilite">
<div id="vb-25">
<div class="vb"><span style="color: #cc66cc;">35</span> <span style="color: #b1b100;">REM</span> LEEMOS EL REGISTRO DE ESTADO<br />
<span style="color: #cc66cc;">40</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">50</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">60</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">90</span></div>
</div>
</div>
<p></p>
<p>La información en el registro de entrada la podemos recuperar leyendo la dirección de memoria 65384:</p>
<div class="syntax_hilite">
<div id="vb-26">
<div class="vb"><span style="color: #cc66cc;">70</span> D=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65384</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">80</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span>D<span style="color: #66cc66;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Si presionó alguna tecla, la transmitiremos; de lo contrario regresaremos al inicio al ciclo. De manera similar, para transmitir consultamos el bit 4 del registro de estado para checar si podemos transmitir. Si es así, hacemos un poke a la dirección de memoria con el byte que deseamos enviar.</p>
<div class="syntax_hilite">
<div id="vb-27">
<div class="vb"><span style="color: #cc66cc;">90</span> <span style="color: #b1b100;">IF</span> I$=<span style="color: #ff0000;">""</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">95</span> <span style="color: #b1b100;">REM</span> ESPERAMOS A QUE PODAMOS TRANSMITIR<br />
<span style="color: #cc66cc;">100</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">110</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">120</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">100</span><br />
<span style="color: #cc66cc;">130</span> POKE <span style="color: #cc66cc;">65384</span>,<span style="color: #b1b100;">ASC</span><span style="color: #66cc66;">&#40;</span>I$<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">140</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">30</span></div>
</div>
</div>
<p></p>
<p>Una vez que emparejamos ambas computadoras y ejecutamos nuestro programa en BASIC, la tecla que apretamos en cada una de ellas se transmite a la otra. </p>
<p>Con esto, ya tenemos garantizado la mínima comunicación necesaria para programar nuestro juego.</p>

]]></description>
			<content:encoded><![CDATA[<p>Ahora que hemos comprobado el correcto funcionamiento de la Interface RS-232, el siguiente paso es establecer la comunicación entre las dos computadoras por medio del lenguaje BASIC.</p>
<p>La configuración de la interface RS-232 se hace a través de dos registros del circuito integrado 6551, los cuales son accesibles en las direcciones de memoria 65386 y 65387. El primero se conoce como el registro de control, el cual se utiliza para establecer la velocidad de transmisión en baudios, la fuente de frecuencia, el tamaño de la palabra y el número de bits de parada.</p>
<p>El segundo es el registro de comandos, que controlada diferentes modos y funciones como el modo de echo y comunicación con paridad.</p>
<table align="center">
<tr>
<td valign="top">
<p align="center">
<img src="/wp-content/uploads/2009/08/controlregister.gif" alt="controlregister" title="controlregister" width="301" height="515"  /><br />
<strong>Tabla 1</strong> Configuración del registro de control<br />
según el manual del usuario
</p>
</td>
<td align="center " valign="top">
<p align="center">
<img src="/wp-content/uploads/2009/08/commandregister.gif" alt="commandregister" title="commandregister" width="301" height="515" /><br />
<strong>Tabla 2</strong> Configuración del registro de comando<br />
según el manual del usuario
</p>
</td>
</tr>
</table>
<p>La programación de los registros se hace por medio de dos pokes:</p>
<div class="syntax_hilite">
<div id="vb-28">
<div class="vb"><span style="color: #cc66cc;">5</span> <span style="color: #b1b100;">REM</span> ESTABLECEMOS EL REGISTRO DE CONTROL<br />
<span style="color: #cc66cc;">10</span> POKE <span style="color: #cc66cc;">65387</span>,<span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">15</span> <span style="color: #b1b100;">REM</span> ESTABLECEMOS EL REGISTRO DE COMANDOS<br />
<span style="color: #cc66cc;">20</span> POKE <span style="color: #cc66cc;">65386</span>,<span style="color: #cc66cc;">11</span></div>
</div>
</div>
<p></p>
<p>En este programa de prueba, guardamos si hay una tecla presionada para posteriormente mandarla:</p>
<div class="syntax_hilite">
<div id="vb-29">
<div class="vb"><span style="color: #cc66cc;">30</span> I$=INKEY$</div>
</div>
</div>
<p></p>
<p>Para saber si hemos recibido información de la otra conexión, se debe consultar el registro de estado del circuito integrado 6551. Este es acceble desde la dirección de memoria 65385.</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/08/statusregister.gif" alt="statusregister" title="statusregister" width="279" height="469"  /><br />
<strong>Tabla 3</strong> Configuración del registro de estado<br />
según el manual del usuario
</p>
<p>Si el bit 3 esta a uno, es que hay información por leer.</p>
<div class="syntax_hilite">
<div id="vb-30">
<div class="vb"><span style="color: #cc66cc;">35</span> <span style="color: #b1b100;">REM</span> LEEMOS EL REGISTRO DE ESTADO<br />
<span style="color: #cc66cc;">40</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">50</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">8</span><br />
<span style="color: #cc66cc;">60</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">90</span></div>
</div>
</div>
<p></p>
<p>La información en el registro de entrada la podemos recuperar leyendo la dirección de memoria 65384:</p>
<div class="syntax_hilite">
<div id="vb-31">
<div class="vb"><span style="color: #cc66cc;">70</span> D=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65384</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">80</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #b1b100;">CHR</span>$<span style="color: #66cc66;">&#40;</span>D<span style="color: #66cc66;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Si presionó alguna tecla, la transmitiremos; de lo contrario regresaremos al inicio al ciclo. De manera similar, para transmitir consultamos el bit 4 del registro de estado para checar si podemos transmitir. Si es así, hacemos un poke a la dirección de memoria con el byte que deseamos enviar.</p>
<div class="syntax_hilite">
<div id="vb-32">
<div class="vb"><span style="color: #cc66cc;">90</span> <span style="color: #b1b100;">IF</span> I$=<span style="color: #ff0000;">""</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">30</span><br />
<span style="color: #cc66cc;">95</span> <span style="color: #b1b100;">REM</span> ESPERAMOS A QUE PODAMOS TRANSMITIR<br />
<span style="color: #cc66cc;">100</span> A=PEEK<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">65385</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">110</span> B=A <span style="color: #b1b100;">AND</span> <span style="color: #cc66cc;">16</span><br />
<span style="color: #cc66cc;">120</span> <span style="color: #b1b100;">IF</span> B=<span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">THEN</span> <span style="color: #cc66cc;">100</span><br />
<span style="color: #cc66cc;">130</span> POKE <span style="color: #cc66cc;">65384</span>,<span style="color: #b1b100;">ASC</span><span style="color: #66cc66;">&#40;</span>I$<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #cc66cc;">140</span> <span style="color: #b1b100;">GOTO</span> <span style="color: #cc66cc;">30</span></div>
</div>
</div>
<p></p>
<p>Una vez que emparejamos ambas computadoras y ejecutamos nuestro programa en BASIC, la tecla que apretamos en cada una de ellas se transmite a la otra. </p>
<p>Con esto, ya tenemos garantizado la mínima comunicación necesaria para programar nuestro juego.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/2306/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proyecto: Haciendo un juego multiusuario para la Color Computer 2 (Parte 1)</title>
		<link>http://www.machin.com.mx/archives/2227</link>
		<comments>http://www.machin.com.mx/archives/2227#comments</comments>
		<pubDate>Fri, 31 Jul 2009 07:48:28 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Color Computer]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=2227</guid>
		<description><![CDATA[<p>En 1987, cuando jugaba con mi computadora <strong>Color Computer</strong> de 8 bits, uno de mis tantos sueños era poder conectar dos computadoras y  hacer un juego multiusuario. Cuando pude tener dos computadoras en mis manos, mi primer intento fue cruzando dos cables de la grabadora de cassettes. Y ... ¡Funcionó! Desafortunadamente, la comunicación como era de suponerse era muy lenta y no se podía hacer nada práctico <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  . Por supuesto había otras maneras de hacerlo; como usando un modem o alguna interfaz en serie. Ambas inaccesibles para mí en esa época por presupuesto o falta de experiencia. Después cambié esas computadoras por una compatible con PC y ya no pude experimentar más.</p>
<p>Fue hasta 1990 que trabajando en la constructora tuve como tarea hacer una red ethernet, donde finalmente pude dar los primeros pasos para hacer mi sueño realidad. En 1994 jugué el juego de cartas del <strong>Windows for Worksgroups</strong> y por su puesto el fabuloso <strong>Doom</strong> en red. Aunque me frustré un poco con los ingenieros civiles que no querían jugar en serio y sólo me disparaban a mí en vez de atacar a los monstruos <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  .  En el año 2001, pude hacer <a href="http://www.machin.com.mx/archives/155">mi primer juego multiusario</a> usando Java.</p>
<p>Me pregunto si realmente hubiera podido hacerlo con mi querida Coco, si el tiempo y mi presupuesto hubiera estado de mi lado. En este y en varios de los siguientes posts voy a tratar de contestarme esta pregunta realizando un juego de fútbol soccer de dos jugadores. De antemano  es posible porque ya otras personas vendían un juego de aviones en esos tiempos, pero no esta de más comprobarlo.</p>
<h4>Con presupuesto y tecnología de mi lado</h4>
<p>Ahora en el año de 2009, en el sitio <a href="http://www.coco3.com" onclick="pageTracker._trackPageview('/outgoing/www.coco3.com?referer=');">www.coco3.com </a>, <strong>Roger Taylor</strong> vende un cartucho que emula a la interfaz RS-232 que la <strong>Radio Shack</strong> vendía... ¡pero esta es inalámbrica por medio de la tecnología Bluetooth! ¡Nada de fabricar cables odiosos!</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/07/wireless.jpg" alt="wireless" title="wireless" width="400" height="267"  /></a><br />
<strong>RS-232 Wireless de Roger Taylor</strong>
</p>
<p>Para el proyecto, voy a necesitar dos de esos cartuchos y por su puesto dos Color Computers 2. Afortunadamente las computadoras las pude conseguir sin problemas en e-bay.</p>
<h4> Probando la interfaz en serie</h4>
<p>Antes de ponerse a programar, es necesario comprobar que el hardware está funcionando perfectamente y que se entiende como funciona.  La documentación que proporciona Roger Taylor es muy completa y tiene especificado todo lo que se necesita para este proyecto. </p>
<p>Al ser bluetooth, lo primero que hice fue checar desde <strong>Linux</strong> si podía ver las dos interfases RS-232 (Una en cada Color Computer):</p>
<div class="syntax_hilite">
<div id="text-33">
<div class="text"><span style="">&#91;</span>renato@fedora ~<span style="">&#93;</span>$ hcitool scan<br />
Scanning ...<br />
&nbsp; &nbsp; XX:XX:XX:XX:XX:XX&nbsp; &nbsp;C510a<br />
&nbsp; &nbsp; <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">85</span>:<span style="">19</span>&nbsp; &nbsp;eb101<br />
&nbsp; &nbsp; <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D&nbsp; &nbsp;eb101</div>
</div>
</div>
<p></p>
<p>Con el nombre eb101 se puede ver claramente las dos interfaces y es de agradecerse que las direcciones MAC sean distintas por lo que no va haber ningún problema en identificar a cada dispositivo. Incluso podemos hacer pings a cada una de las interfaces:</p>
<div class="syntax_hilite">
<div id="text-34">
<div class="text">l2ping <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D ---&gt; Cambiar la MAC de la Color Computer a la que se quiere uno conectar</div>
</div>
</div>
<p> </p>
<p>Leyendo las especificaciones técnicas nos damos cuenta que el RS-232 utiliza un chip que está específicamente diseñado para servir a través de interfaces en serie, por lo que al utilizar además un chip 6551 como puente, se garantiza la compatibilidad con las aplicaciones existentes para el pak RS-232 de la Radio Shack. Solamente hay que tener en cuenta en las configuraciones que los parámetros por default son los siguientes:</p>
<div class="syntax_hilite">
<div id="text-35">
<div class="text">Baud rate: <span style="">9600</span><br />
Parity: none<br />
Security: off<br />
passkey: <span style="">0000</span></div>
</div>
</div>
<p></p>
<p>Se pueden mejores configuraciones, como velocidades de 115200 bps, pero creo que los valores por defectos son adecuados para el proyecto y así se simplifica las configuraciones.</p>
<p>El cartucho cuenta con una memoria con un programa desde donde se puede configurar la interface RS-232, además de un programa terminal con utilidades para transferir entre computadoras programas en BASIC y en lenguaje de máquina. Para acceder a ese programa se ejecuta:</p>
<div class="syntax_hilite">
<div id="text-36">
<div class="text">exec &amp;HC000</div>
</div>
</div>
<p></p>
<h4>Probando la conexión con otra Color Computer</h4>
<p>Desde ahi, se puede probar la comunicación entre las computadoras con tan sólo ajustar la velocidad a 9600 baudios y entrando al programa de terminal. Para hacer la conexión se utiliza el comando con con la dirección MAC de la interfaz de la otra Color Computer. A partir de ahí todo lo que se escriba en cualquiera de las dos computadoras, aparecerá en las dos terminales.</p>
<p>A continuación pongo un video de como fue la prueba con mis dos computadoras:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/SiSy5c5GW9g&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/SiSy5c5GW9g&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>Antes de que me lo pregunten, la voz que utilizo en el video es sintética, como se acostumbra en YouTube <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<h4>Probando la conexión de una máquina Linux a una Color Computer</h4>
<p>De igual manera se configura la interfaz en serie a 9600 baudios en la Color Computer y se coloca uno en la terminal. En la máquina Linux se corren los siguientes comandos:</p>
<div class="syntax_hilite">
<div id="text-37">
<div class="text">rfcomm release all<br />
rfcomm bind /dev/rfcomm0 <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D &lt;--- Cambiar la dirección por la de la Color Computer</div>
</div>
</div>
<p></p>
<p>Ahorra corremos algún programa terminal en la linux como cu (instalar antes el paquete uucp):</p>
<div class="syntax_hilite">
<div id="text-38">
<div class="text">cu -l /dev/rfcomm0</div>
</div>
</div>
<p></p>
<p>o bien el emulador de terminal VT100/ANSI screen:</p>
<div class="syntax_hilite">
<div id="text-39">
<div class="text">screen /dev/rfcomm0</div>
</div>
</div>
<p></p>
<p>En ninguno de los dos es necesario configurar la interfaz en serie porque el protocolo spp lo negocia automáticamente.</p>
<p>Es probable que con comandos AT, nos podríamos conectar a un celular y utilizarlo como modem.</p>
<h4>Probando la conexión de una Color Computer a una máquina Linux</h4>
<p>1. Creamos un puerto en serie:</p>
<div class="syntax_hilite">
<div id="text-40">
<div class="text">sdptool add --channel=<span style="">3</span> SP</div>
</div>
</div>
<p></p>
<p>2. Nos ponemos a escuchar en ese puerto:</p>
<div class="syntax_hilite">
<div id="text-41">
<div class="text">rfcomm listen rfcomm0 <span style="">3</span></div>
</div>
</div>
<p></p>
<p>3. Nos vamos a la Color Computer y establecemos la conexión.</p>
<p>4. Si nos pide la llave en la máquina linux, le damos 0000, que es la llave por defecto.</p>
<p>5. Nos conectamos a la trerminal en la máquina usando cu o screen.</p>

]]></description>
			<content:encoded><![CDATA[<p>En 1987, cuando jugaba con mi computadora <strong>Color Computer</strong> de 8 bits, uno de mis tantos sueños era poder conectar dos computadoras y  hacer un juego multiusuario. Cuando pude tener dos computadoras en mis manos, mi primer intento fue cruzando dos cables de la grabadora de cassettes. Y ... ¡Funcionó! Desafortunadamente, la comunicación como era de suponerse era muy lenta y no se podía hacer nada práctico <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  . Por supuesto había otras maneras de hacerlo; como usando un modem o alguna interfaz en serie. Ambas inaccesibles para mí en esa época por presupuesto o falta de experiencia. Después cambié esas computadoras por una compatible con PC y ya no pude experimentar más.</p>
<p>Fue hasta 1990 que trabajando en la constructora tuve como tarea hacer una red ethernet, donde finalmente pude dar los primeros pasos para hacer mi sueño realidad. En 1994 jugué el juego de cartas del <strong>Windows for Worksgroups</strong> y por su puesto el fabuloso <strong>Doom</strong> en red. Aunque me frustré un poco con los ingenieros civiles que no querían jugar en serio y sólo me disparaban a mí en vez de atacar a los monstruos <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  .  En el año 2001, pude hacer <a href="http://www.machin.com.mx/archives/155">mi primer juego multiusario</a> usando Java.</p>
<p>Me pregunto si realmente hubiera podido hacerlo con mi querida Coco, si el tiempo y mi presupuesto hubiera estado de mi lado. En este y en varios de los siguientes posts voy a tratar de contestarme esta pregunta realizando un juego de fútbol soccer de dos jugadores. De antemano  es posible porque ya otras personas vendían un juego de aviones en esos tiempos, pero no esta de más comprobarlo.</p>
<h4>Con presupuesto y tecnología de mi lado</h4>
<p>Ahora en el año de 2009, en el sitio <a href="http://www.coco3.com" onclick="pageTracker._trackPageview('/outgoing/www.coco3.com?referer=');">www.coco3.com </a>, <strong>Roger Taylor</strong> vende un cartucho que emula a la interfaz RS-232 que la <strong>Radio Shack</strong> vendía... ¡pero esta es inalámbrica por medio de la tecnología Bluetooth! ¡Nada de fabricar cables odiosos!</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/07/wireless.jpg" alt="wireless" title="wireless" width="400" height="267"  /></a><br />
<strong>RS-232 Wireless de Roger Taylor</strong>
</p>
<p>Para el proyecto, voy a necesitar dos de esos cartuchos y por su puesto dos Color Computers 2. Afortunadamente las computadoras las pude conseguir sin problemas en e-bay.</p>
<h4> Probando la interfaz en serie</h4>
<p>Antes de ponerse a programar, es necesario comprobar que el hardware está funcionando perfectamente y que se entiende como funciona.  La documentación que proporciona Roger Taylor es muy completa y tiene especificado todo lo que se necesita para este proyecto. </p>
<p>Al ser bluetooth, lo primero que hice fue checar desde <strong>Linux</strong> si podía ver las dos interfases RS-232 (Una en cada Color Computer):</p>
<div class="syntax_hilite">
<div id="text-42">
<div class="text"><span style="">&#91;</span>renato@fedora ~<span style="">&#93;</span>$ hcitool scan<br />
Scanning ...<br />
&nbsp; &nbsp; XX:XX:XX:XX:XX:XX&nbsp; &nbsp;C510a<br />
&nbsp; &nbsp; <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">85</span>:<span style="">19</span>&nbsp; &nbsp;eb101<br />
&nbsp; &nbsp; <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D&nbsp; &nbsp;eb101</div>
</div>
</div>
<p></p>
<p>Con el nombre eb101 se puede ver claramente las dos interfaces y es de agradecerse que las direcciones MAC sean distintas por lo que no va haber ningún problema en identificar a cada dispositivo. Incluso podemos hacer pings a cada una de las interfaces:</p>
<div class="syntax_hilite">
<div id="text-43">
<div class="text">l2ping <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D ---&gt; Cambiar la MAC de la Color Computer a la que se quiere uno conectar</div>
</div>
</div>
<p> </p>
<p>Leyendo las especificaciones técnicas nos damos cuenta que el RS-232 utiliza un chip que está específicamente diseñado para servir a través de interfaces en serie, por lo que al utilizar además un chip 6551 como puente, se garantiza la compatibilidad con las aplicaciones existentes para el pak RS-232 de la Radio Shack. Solamente hay que tener en cuenta en las configuraciones que los parámetros por default son los siguientes:</p>
<div class="syntax_hilite">
<div id="text-44">
<div class="text">Baud rate: <span style="">9600</span><br />
Parity: none<br />
Security: off<br />
passkey: <span style="">0000</span></div>
</div>
</div>
<p></p>
<p>Se pueden mejores configuraciones, como velocidades de 115200 bps, pero creo que los valores por defectos son adecuados para el proyecto y así se simplifica las configuraciones.</p>
<p>El cartucho cuenta con una memoria con un programa desde donde se puede configurar la interface RS-232, además de un programa terminal con utilidades para transferir entre computadoras programas en BASIC y en lenguaje de máquina. Para acceder a ese programa se ejecuta:</p>
<div class="syntax_hilite">
<div id="text-45">
<div class="text">exec &amp;HC000</div>
</div>
</div>
<p></p>
<h4>Probando la conexión con otra Color Computer</h4>
<p>Desde ahi, se puede probar la comunicación entre las computadoras con tan sólo ajustar la velocidad a 9600 baudios y entrando al programa de terminal. Para hacer la conexión se utiliza el comando con con la dirección MAC de la interfaz de la otra Color Computer. A partir de ahí todo lo que se escriba en cualquiera de las dos computadoras, aparecerá en las dos terminales.</p>
<p>A continuación pongo un video de como fue la prueba con mis dos computadoras:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/SiSy5c5GW9g&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/SiSy5c5GW9g&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>Antes de que me lo pregunten, la voz que utilizo en el video es sintética, como se acostumbra en YouTube <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<h4>Probando la conexión de una máquina Linux a una Color Computer</h4>
<p>De igual manera se configura la interfaz en serie a 9600 baudios en la Color Computer y se coloca uno en la terminal. En la máquina Linux se corren los siguientes comandos:</p>
<div class="syntax_hilite">
<div id="text-46">
<div class="text">rfcomm release all<br />
rfcomm bind /dev/rfcomm0 <span style="">00</span>:0C:<span style="">84</span>:<span style="">00</span>:<span style="">87</span>:9D &lt;--- Cambiar la dirección por la de la Color Computer</div>
</div>
</div>
<p></p>
<p>Ahorra corremos algún programa terminal en la linux como cu (instalar antes el paquete uucp):</p>
<div class="syntax_hilite">
<div id="text-47">
<div class="text">cu -l /dev/rfcomm0</div>
</div>
</div>
<p></p>
<p>o bien el emulador de terminal VT100/ANSI screen:</p>
<div class="syntax_hilite">
<div id="text-48">
<div class="text">screen /dev/rfcomm0</div>
</div>
</div>
<p></p>
<p>En ninguno de los dos es necesario configurar la interfaz en serie porque el protocolo spp lo negocia automáticamente.</p>
<p>Es probable que con comandos AT, nos podríamos conectar a un celular y utilizarlo como modem.</p>
<h4>Probando la conexión de una Color Computer a una máquina Linux</h4>
<p>1. Creamos un puerto en serie:</p>
<div class="syntax_hilite">
<div id="text-49">
<div class="text">sdptool add --channel=<span style="">3</span> SP</div>
</div>
</div>
<p></p>
<p>2. Nos ponemos a escuchar en ese puerto:</p>
<div class="syntax_hilite">
<div id="text-50">
<div class="text">rfcomm listen rfcomm0 <span style="">3</span></div>
</div>
</div>
<p></p>
<p>3. Nos vamos a la Color Computer y establecemos la conexión.</p>
<p>4. Si nos pide la llave en la máquina linux, le damos 0000, que es la llave por defecto.</p>
<p>5. Nos conectamos a la trerminal en la máquina usando cu o screen.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/2227/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mi primera PC ( 20 Aniversario )</title>
		<link>http://www.machin.com.mx/archives/2003</link>
		<comments>http://www.machin.com.mx/archives/2003#comments</comments>
		<pubDate>Mon, 04 May 2009 22:00:22 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Arqueología Machinesca]]></category>
		<category><![CDATA[Color Computer]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=2003</guid>
		<description><![CDATA[<p>A principios de 1989, en mi familia dejamos atrás las computadoras de 8 bits y cambiamos al mundo de los 16 bits con lo que fue nuestra primera PC: <strong>Una Tandy 1000 SL</strong> con un microprocesador 8086 a 8 Mhz. Originalmente, la compramos con 384 KB de memoria, una unidad de diskette de dos lados, doble densidad de 360 KB, sin disco duro, sin reloj y con un monitor monocromático verde. Por supuesto, el teclado en inglés.</p>
<div class="igallery"><img src="/iGallery/tandy1000sl/Tandy100SL-3.jpg" alt="La Tandy 1000 SL como se ve actualmente." id="553724"  title="La Tandy 1000 SL como se ve actualmente." /><br /><a href="javascript:swapPhoto('/iGallery/tandy1000sl/Tandy100SL-3.jpg','553724')"><img src="/iGallery/tandy1000sl/TN-Tandy100SL-3.jpg" width="56" height="42" alt="La Tandy 1000 SL como se ve actualmente." title="La Tandy 1000 SL como se ve actualmente." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/DiscoDuro.jpg','553724')"><img src="/iGallery/tandy1000sl/TN-DiscoDuro.jpg" width="56" height="42" alt=" El mismo disco duro tenía la tarjeta controladora." title=" El mismo disco duro tenía la tarjeta controladora." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/OptionBoard.jpg','553724')"><img src="/iGallery/tandy1000sl/TN-OptionBoard.jpg" width="56" height="42" alt=" La tarjeta para hacer respaldos." title=" La tarjeta para hacer respaldos." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/Circuitos.jpg','553724')"><img src="/iGallery/tandy1000sl/TN-Circuitos.jpg" width="56" height="42" alt=" Así se ve por dentro." title=" Así se ve por dentro." /></a></div>
<p>De ahí, como buenos fanáticos de la electrónica, la modificamos bastante. Le aumentamos la memoria a 640KB, le cambiamos el microprocesador por el clon <strong>NEC V30</strong> para que corríera de un 10 a 30% más rápido, le agregamos un disco duro de 20 mB y una tarjeta <strong>Central Point Option Board</strong> para poder respaldar programas protegidos de copia. Teníamos también una tarjeta para quemar memorias EPROM, un scanner de mano y para  imprimir  usabamos la impresora de matriz de puntos de mi vieja <strong>Color Computer 3</strong>. Después, con el tiempo, ya tuve un flamente monitor a color.</p>
<p>Lo que más me gustaba de esta máquina era que incluía un DAC de 8 Bits con un programa editor de sonido y otro para editar música colocando las notas en el pentragrama. Al usar ondas de 48Khz, la música capturada tenía buena calidad y los juegos como el <strong>Battle Chess</strong> y el <strong>Principe de Persia</strong> eran toda una experiencia para la época. </p>
<p>Con ella aprendí muchísimo: Pascal, Turbo Basic, dbase, ensamblador del 8086 y sus interrupciones, como funcionaban los programas residentes en memoria y los virus, hojas de cálculo, MathCAD, derive y una infinidad de programas.</p>
<p>Posteriormente compramos una <strong>Tandy 1000 TL/3</strong> con un microprocesador 80286, 10 Mhz de velocidad y 728KB de RAM.  No necesitabamos dos computadoras por lo que se la vendí a un tío, que este año al hacer limpieza, la donó a mi museo personal. ¡Muchas Gracias Don Pedro!</p>

]]></description>
			<content:encoded><![CDATA[<p>A principios de 1989, en mi familia dejamos atrás las computadoras de 8 bits y cambiamos al mundo de los 16 bits con lo que fue nuestra primera PC: <strong>Una Tandy 1000 SL</strong> con un microprocesador 8086 a 8 Mhz. Originalmente, la compramos con 384 KB de memoria, una unidad de diskette de dos lados, doble densidad de 360 KB, sin disco duro, sin reloj y con un monitor monocromático verde. Por supuesto, el teclado en inglés.</p>
<div class="igallery"><img src="/iGallery/tandy1000sl/Tandy100SL-3.jpg" alt="La Tandy 1000 SL como se ve actualmente." id="679614"  title="La Tandy 1000 SL como se ve actualmente." /><br /><a href="javascript:swapPhoto('/iGallery/tandy1000sl/Tandy100SL-3.jpg','679614')"><img src="/iGallery/tandy1000sl/TN-Tandy100SL-3.jpg" width="56" height="42" alt="La Tandy 1000 SL como se ve actualmente." title="La Tandy 1000 SL como se ve actualmente." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/DiscoDuro.jpg','679614')"><img src="/iGallery/tandy1000sl/TN-DiscoDuro.jpg" width="56" height="42" alt=" El mismo disco duro tenía la tarjeta controladora." title=" El mismo disco duro tenía la tarjeta controladora." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/OptionBoard.jpg','679614')"><img src="/iGallery/tandy1000sl/TN-OptionBoard.jpg" width="56" height="42" alt=" La tarjeta para hacer respaldos." title=" La tarjeta para hacer respaldos." /></a><a href="javascript:swapPhoto('/iGallery/tandy1000sl/Circuitos.jpg','679614')"><img src="/iGallery/tandy1000sl/TN-Circuitos.jpg" width="56" height="42" alt=" Así se ve por dentro." title=" Así se ve por dentro." /></a></div>
<p>De ahí, como buenos fanáticos de la electrónica, la modificamos bastante. Le aumentamos la memoria a 640KB, le cambiamos el microprocesador por el clon <strong>NEC V30</strong> para que corríera de un 10 a 30% más rápido, le agregamos un disco duro de 20 mB y una tarjeta <strong>Central Point Option Board</strong> para poder respaldar programas protegidos de copia. Teníamos también una tarjeta para quemar memorias EPROM, un scanner de mano y para  imprimir  usabamos la impresora de matriz de puntos de mi vieja <strong>Color Computer 3</strong>. Después, con el tiempo, ya tuve un flamente monitor a color.</p>
<p>Lo que más me gustaba de esta máquina era que incluía un DAC de 8 Bits con un programa editor de sonido y otro para editar música colocando las notas en el pentragrama. Al usar ondas de 48Khz, la música capturada tenía buena calidad y los juegos como el <strong>Battle Chess</strong> y el <strong>Principe de Persia</strong> eran toda una experiencia para la época. </p>
<p>Con ella aprendí muchísimo: Pascal, Turbo Basic, dbase, ensamblador del 8086 y sus interrupciones, como funcionaban los programas residentes en memoria y los virus, hojas de cálculo, MathCAD, derive y una infinidad de programas.</p>
<p>Posteriormente compramos una <strong>Tandy 1000 TL/3</strong> con un microprocesador 80286, 10 Mhz de velocidad y 728KB de RAM.  No necesitabamos dos computadoras por lo que se la vendí a un tío, que este año al hacer limpieza, la donó a mi museo personal. ¡Muchas Gracias Don Pedro!</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/2003/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Crossroads</title>
		<link>http://www.machin.com.mx/archives/1936</link>
		<comments>http://www.machin.com.mx/archives/1936#comments</comments>
		<pubDate>Tue, 10 Mar 2009 03:29:16 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[Dreamfall]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/archives/1936</guid>
		<description><![CDATA[<p>I am at the crossroads between waking and dream.<br />
One path leads back to the world I left behind. The other path...</p>
<p>The other path leads to a place of shadows.<br />
Between the familiar and the unknown, between certainty and doubt, my choice would seem obvious.<br />
Any sane man would turn around, return to the world he knows, forget what he has learned, and live his life in blissful ignorance.</p>
<p>But in truth, it is too late. </p>
<p>My choice was made many years ago, when I first embarked on this journey. I cannot turn back.<br />
I am at a crossroads, but for me there is only one path.</p>
<p>I leave behind these words in the hope that, someday, they will serve as a map for someone else.<br />
To whomever reads this, Godspeed on your journey. If you ever decide to follow in my footsteps, look me up.</p>
<p>-Brian Westhouse</p>

]]></description>
			<content:encoded><![CDATA[<p>I am at the crossroads between waking and dream.<br />
One path leads back to the world I left behind. The other path...</p>
<p>The other path leads to a place of shadows.<br />
Between the familiar and the unknown, between certainty and doubt, my choice would seem obvious.<br />
Any sane man would turn around, return to the world he knows, forget what he has learned, and live his life in blissful ignorance.</p>
<p>But in truth, it is too late. </p>
<p>My choice was made many years ago, when I first embarked on this journey. I cannot turn back.<br />
I am at a crossroads, but for me there is only one path.</p>
<p>I leave behind these words in the hope that, someday, they will serve as a map for someone else.<br />
To whomever reads this, Godspeed on your journey. If you ever decide to follow in my footsteps, look me up.</p>
<p>-Brian Westhouse</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/1936/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mi primera computadora (25 Aniversario)</title>
		<link>http://www.machin.com.mx/archives/187</link>
		<comments>http://www.machin.com.mx/archives/187#comments</comments>
		<pubDate>Thu, 01 Jan 2009 10:21:50 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Arqueología Machinesca]]></category>
		<category><![CDATA[Color Computer]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=187</guid>
		<description><![CDATA[<p>Este año de 2009 es para mi muy especial porque hace 25 años mi papá me compró la que fue mi primera computadora: <strong>Una Radio Shack TRS-80 Micro Color Computer</strong> con la que hice mis primeros programas. </p>
<p>Tenía teclas del tipo "chicle", corría una velocidad de 0.895 Mhz, contaba con 4 kilobytes de memoria RAM. Se programaba con un intérprete de BASIC muy primitivo  pero que a mí me resultó muy didáctico ( obviamente de <strong>Microsoft</strong> y probablemente hasta con código en su ROM escrito por el mismo Bill Gates ). También se podían escribir programas en lenguaje ensamblador del  microprocesador <strong>6803</strong>, aunque en esta máquina nunca lo hice porque al año la cambiamos por una <strong>Color Computer 2</strong>.  Con eso me doy cuenta que los niños y los adultos sentimos el tiempo de forma muy diferente porque la tuve por menos de un año pero yo la recuerdo como si la hubiera tenido por una eternidad.</p>
<p align="center">
<img src='http://www.machin.com.mx/wp-content/uploads/2008/01/mc-10-2.jpg' alt='MC-10' /><br />
<strong>La MC-10 mostrando su capacidad gráfica</strong>
</p>
<p>Mi papá desde algunos meses antes de comprarla, ya me había comentado que quería hacer el proyecto del contador de células que ya he platicado en otro <a href="http://www.machin.com.mx/archives/44">post</a>, por lo que me encargó ver si era posible realizarlo con esta máquina. El tener un objetivo me ayudó a preocuparme por aprender más y no usarla como una <strong>Atari 2600</strong>, pero también contribuyó que aquí en México D.F. no había <strong>Radio Shacks</strong>, entonces si quería  un juego, lo tenía que sacar de algún libro o de plano programarlo yo. Tampoco podía cambiar programas con mis amigos porque yo fuí el primero de mi salón en tener una y los que tuvieron alguna después... tenían otro modelo como la <strong>Timex Sinclair</strong> o la <strong>Commodore</strong>.</p>
<p>Debo aclarar, que en 1984 tener una computadora (al menos en mi entorno) no era algo muy común porque la mayoría de ellas eran realmente caras para los domingos de un niño de 13 años (la <strong>IBM PC</strong> de 1981 costaba 1.565 dólares aproximadamente) y la frontera estaba cerrada al libre comercio. Por lo que la <strong>Radio Shack</strong> al sacar este modelo tan económico ($79 dólares ) me ayudó a entrar a la informática quizás antes de tiempo. Obviamente los dólares de ese tiempo no eran equivalentes a los de hoy en día y siempre costaban las cosas el doble o triple porque te cobraban "la traída". Bueno, creo que eso último hasta la fecha.</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/01/tron1.jpg" alt="Juego de Tron" title="Juego de Tron" width="300" height="225" /><br />
<strong>Un juego de motos cibernéticas</strong>
</p>
<p>Es curioso como un juguete o un evento puntal, puede darle una dirección a nuestras a vidas.</p>

]]></description>
			<content:encoded><![CDATA[<p>Este año de 2009 es para mi muy especial porque hace 25 años mi papá me compró la que fue mi primera computadora: <strong>Una Radio Shack TRS-80 Micro Color Computer</strong> con la que hice mis primeros programas. </p>
<p>Tenía teclas del tipo "chicle", corría una velocidad de 0.895 Mhz, contaba con 4 kilobytes de memoria RAM. Se programaba con un intérprete de BASIC muy primitivo  pero que a mí me resultó muy didáctico ( obviamente de <strong>Microsoft</strong> y probablemente hasta con código en su ROM escrito por el mismo Bill Gates ). También se podían escribir programas en lenguaje ensamblador del  microprocesador <strong>6803</strong>, aunque en esta máquina nunca lo hice porque al año la cambiamos por una <strong>Color Computer 2</strong>.  Con eso me doy cuenta que los niños y los adultos sentimos el tiempo de forma muy diferente porque la tuve por menos de un año pero yo la recuerdo como si la hubiera tenido por una eternidad.</p>
<p align="center">
<img src='http://www.machin.com.mx/wp-content/uploads/2008/01/mc-10-2.jpg' alt='MC-10' /><br />
<strong>La MC-10 mostrando su capacidad gráfica</strong>
</p>
<p>Mi papá desde algunos meses antes de comprarla, ya me había comentado que quería hacer el proyecto del contador de células que ya he platicado en otro <a href="http://www.machin.com.mx/archives/44">post</a>, por lo que me encargó ver si era posible realizarlo con esta máquina. El tener un objetivo me ayudó a preocuparme por aprender más y no usarla como una <strong>Atari 2600</strong>, pero también contribuyó que aquí en México D.F. no había <strong>Radio Shacks</strong>, entonces si quería  un juego, lo tenía que sacar de algún libro o de plano programarlo yo. Tampoco podía cambiar programas con mis amigos porque yo fuí el primero de mi salón en tener una y los que tuvieron alguna después... tenían otro modelo como la <strong>Timex Sinclair</strong> o la <strong>Commodore</strong>.</p>
<p>Debo aclarar, que en 1984 tener una computadora (al menos en mi entorno) no era algo muy común porque la mayoría de ellas eran realmente caras para los domingos de un niño de 13 años (la <strong>IBM PC</strong> de 1981 costaba 1.565 dólares aproximadamente) y la frontera estaba cerrada al libre comercio. Por lo que la <strong>Radio Shack</strong> al sacar este modelo tan económico ($79 dólares ) me ayudó a entrar a la informática quizás antes de tiempo. Obviamente los dólares de ese tiempo no eran equivalentes a los de hoy en día y siempre costaban las cosas el doble o triple porque te cobraban "la traída". Bueno, creo que eso último hasta la fecha.</p>
<p align="center">
<img src="http://www.machin.com.mx/wp-content/uploads/2009/01/tron1.jpg" alt="Juego de Tron" title="Juego de Tron" width="300" height="225" /><br />
<strong>Un juego de motos cibernéticas</strong>
</p>
<p>Es curioso como un juguete o un evento puntal, puede darle una dirección a nuestras a vidas.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/187/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Portal Cake: Detrás de cámaras</title>
		<link>http://www.machin.com.mx/archives/1545</link>
		<comments>http://www.machin.com.mx/archives/1545#comments</comments>
		<pubDate>Mon, 29 Dec 2008 06:14:55 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Gastronomía]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=1545</guid>
		<description><![CDATA[<p>Para festejar el <a href="http://www.machin.com.mx/archives/523">gran éxito</a> que tuvo el Portal Cake este año, hice de rapidín un video de como se hizo:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/W7TwyS5046M&#038;hl=es&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/W7TwyS5046M&#038;hl=es&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>De verdad, quiero hacer notar aquí que es difícil exagerar mi satisfacción. Gracias Cirri por hacerlo <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   El post original lo pueden encontrar <a href="http://www.machin.com.mx/archives/159">aquí</a>.</p>

]]></description>
			<content:encoded><![CDATA[<p>Para festejar el <a href="http://www.machin.com.mx/archives/523">gran éxito</a> que tuvo el Portal Cake este año, hice de rapidín un video de como se hizo:</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/W7TwyS5046M&#038;hl=es&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/W7TwyS5046M&#038;hl=es&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>De verdad, quiero hacer notar aquí que es difícil exagerar mi satisfacción. Gracias Cirri por hacerlo <img src='http://www.machin.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   El post original lo pueden encontrar <a href="http://www.machin.com.mx/archives/159">aquí</a>.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/1545/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ciudad Konec-t</title>
		<link>http://www.machin.com.mx/archives/1084</link>
		<comments>http://www.machin.com.mx/archives/1084#comments</comments>
		<pubDate>Tue, 11 Nov 2008 06:28:10 +0000</pubDate>
		<dc:creator>Jorge Machin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>
		<category><![CDATA[Arqueología Machinesca]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Portafolio]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Konec-t]]></category>

		<guid isPermaLink="false">http://www.machin.com.mx/?p=1084</guid>
		<description><![CDATA[<p><strong>Ciudad Konec-t</strong> fué uno de los proyectos en el cual participé por mi paso por Interalia (8 años). Fue muy divertido colaborar en la programación de la parte del servidor y hacer que soportara sin problemas a más de 2600 usuarios simultáneos con tan sólo dos maquinitas.</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/Konec-t/Konec-t3.jpg" alt="Así era en un principio" id="949330"  title="Así era en un principio" /><br /><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t3.jpg','949330')"><img src="/iGallery/Konec-t/TN-Konec-t3.jpg" width="56" height="42" alt="Así era en un principio" title="Así era en un principio" /></a><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t1.jpg','949330')"><img src="/iGallery/Konec-t/TN-Konec-t1.jpg" width="56" height="42" alt="Fue creciendo" title="Fue creciendo" /></a><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t2.jpg','949330')"><img src="/iGallery/Konec-t/TN-Konec-t2.jpg" width="56" height="42" alt="Uno de los cuartos populares" title="Uno de los cuartos populares" /></a></div>
</center></p>
<p>Las imagenes anteriores son de la primera versión. Después se cambiaron los fondos a un diseño más actual y más 3D. </p>
<p>
<h4>Actualización:</h4>
</p>
<p>Fue una campaña publicitaria muy exitosa, duró desde octubre de 2004 a finales de Diciembre de 2009 y se extendio a varios paises latinoamericanos.</p>

]]></description>
			<content:encoded><![CDATA[<p><strong>Ciudad Konec-t</strong> fué uno de los proyectos en el cual participé por mi paso por Interalia (8 años). Fue muy divertido colaborar en la programación de la parte del servidor y hacer que soportara sin problemas a más de 2600 usuarios simultáneos con tan sólo dos maquinitas.</p>
<p align="center"><center><br />
<div class="igallery"><img src="/iGallery/Konec-t/Konec-t3.jpg" alt="Así era en un principio" id="411765"  title="Así era en un principio" /><br /><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t3.jpg','411765')"><img src="/iGallery/Konec-t/TN-Konec-t3.jpg" width="56" height="42" alt="Así era en un principio" title="Así era en un principio" /></a><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t1.jpg','411765')"><img src="/iGallery/Konec-t/TN-Konec-t1.jpg" width="56" height="42" alt="Fue creciendo" title="Fue creciendo" /></a><a href="javascript:swapPhoto('/iGallery/Konec-t/Konec-t2.jpg','411765')"><img src="/iGallery/Konec-t/TN-Konec-t2.jpg" width="56" height="42" alt="Uno de los cuartos populares" title="Uno de los cuartos populares" /></a></div>
</center></p>
<p>Las imagenes anteriores son de la primera versión. Después se cambiaron los fondos a un diseño más actual y más 3D. </p>
<p>
<h4>Actualización:</h4>
</p>
<p>Fue una campaña publicitaria muy exitosa, duró desde octubre de 2004 a finales de Diciembre de 2009 y se extendio a varios paises latinoamericanos.</p>

<p></p>]]></content:encoded>
			<wfw:commentRss>http://www.machin.com.mx/archives/1084/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>
