Simulacion de Multi hilo, variación de frames , IA basico

viernes, 3 de septiembre de 2010
Bueno, acá un ejemplo basico de como poder simular Multy hilos en batch, que funciona con un contador de frames(mejor dicho, pasos del bucle) para variar la velocidad de algunas cosas.
Se usa las teclas ASDW, y el ejemplo basico de inteligencia artificial, te persigue un caracter :P

pd: se necesita Keypressed.exe, acá pueden descargar la fuente mas el comando.
http://www.mediafire.com/?xugl2a0zsx6xmoe




El code::

Código:
@Echo Off
Setlocal Enabledelayedexpansion
set max_X=40&set max_Y=16&set "line="
Mode Con Cols=%max_X% Lines=%max_Y%
set /a "max_X=%max_X% - 1"&set /a "max_y=%max_y% - 2"
call:Set_var_scr
=================================================
Color F0
set PJ.X=7
set PJ.Y=7
set IA.X=14
set IA.Y=14
set step=0
set step_IA=0
set "key=0"
set "!PJ.X!.!PJ.Y!= "
set "!IA.X!.!IA.Y!= "
call:Draw_scr

:BEGIN
ping -n 1 0.0.0.0>nul
if !step_IA!==4 (set step_IA=0&call:IA)
keypressed.exe
set key=%errorlevel%
if not %key%==0 (call:MOV)
set /a step+=1
set /a step_IA+=1
goto:BEGIN


:MOV
set "!pj.x!.!pj.y!= "
if /i %KEY%==97 (set /a PJ.X-=1)
if /i %KEY%==100 (set /a PJ.X+=1)
if /i %KEY%==119 (set /a PJ.Y-=1)
if /i %KEY%==115 (set /a PJ.Y+=1)
set "!pj.x!.!pj.y!= "
call:Draw_scr
set key=0
exit/b



:IA
if !IA.Y! LSS !PJ.Y! (
set "!IA.X!.!IA.Y!= "&set /a IA.Y+=1
set "!IA.X!.!IA.Y!= "&call:Draw_scr
exit/b
)
if !IA.Y! GTR !PJ.Y! (
set "!IA.X!.!IA.Y!= "&set /a IA.Y-=1
set "!IA.X!.!IA.Y!= "&call:Draw_scr
exit/b
)
if !IA.X! LSS !PJ.X! (
set "!IA.X!.!IA.Y!= "&set /a IA.X+=1
set "!IA.X!.!IA.Y!= "&call:Draw_scr
exit/b
)
if !IA.X! GTR !PJ.X! (
set "!IA.X!.!IA.Y!= "&set /a IA.X-=1
set "!IA.X!.!IA.Y!= "&&call:Draw_scr
exit/b
)
exit/b


===============================================
:::::::::::::Function´s Write screen:::::::::::
:Set_var_scr
for /l %%a in (1,1,%max_X%) do (
for /l %%b in (1,1,%max_y%) do (
set "%%a.%%b= "
)
)
exit/b
:Draw_scr
more /c

Sistema de coordenadas en batch.

Muchos users se complican con este tema en batch, asi que voy a hacer esta publicacion, no para reemplazar los tutoriales existentes ni nada, sino, para ir al grano, mostrando como funciona, la idea principal, de lo que se quiere hacer,etc.

Antes que nada hay que saber por lo menos el minimo de ejes cartesianos, pero acá sufre unos cambios de que seguramente en primaria vimos.
Y 1 2 3 4 5 X..
1....··
2····º(X2,Y2) o abreviandolo en solo numeros (2,2), ya que en las math se usan asi.
3
4
..


El codeo :
Realizar esto en batch no es mas que hacer lo siguiente :
Cls(lo usamos para que la esquina sea(1,1)
Echo %1,1%%2,1%%3,1%%4,1%%5,1%%6,1%
Echo %1,2%%2,2%%3,2%%4,2%%5,2%%6,2%
Echo %1,3%%2,3%%3,3%%4,3%%5,3%%6,3%

Y listo, ahora para definir algun caracter en una determinada coordenada usamos "SET X,Y=Caracter"

Ejemplo: set 2,2=* , eso mostraria en la coordenada X2,Y2 un asterisco.


Así quedaria un ejemplo total:


@echo off
set 2,2=*
set 2,3=*
call:grafica
pause

:grafica
cls
Echo %1,1%%2,1%%3,1%%4,1%%5,1%%6,1%
Echo %1,2%%2,2%%3,2%%4,2%%5,2%%6,2%
Echo %1,3%%2,3%%3,3%%4,3%%5,3%%6,3%
exit/b



Ahora bien, recomiendo leer los tutoriales existentes, que muestran como automatizar el proceso de mostrar todas las variables %1,1%,%2,2%... existentes, que se logra con el uso de for mayoritariamente.



Saludos