...poco a poco los impulsos eléctricos comenzaron a llenar la memoria de su cerebro de silicio. Tras un pequeño parpadeo que ilumino sus ojos, cobro vida...
thinBASIC
ThinBASIC es un lenguaje de programación BASIC para Windows. Desarrollado por Eros Olmi y Petr Schreiber desde 2004. La ultima versión es de este mismo año.
"Tomamos lo mejor de varias implementaciones de BASIC y añadimos algo nuestro. No creemos en el punto y coma. Nos gusta fácil de escribir, fácil de leer el código.
La lengua base es muy simple, pero muy completa. La funcionalidad específica para las interacciones del sistema de archivos, interfaz gráfica de usuario y mucho más se proporciona a través de módulos dedicados y thinBASIC se extiende con nuevas palabras clave.
Todo lo necesario para el desarrollo está presente en el instalador. El intérprete en sí mismo, entorno de desarrollo, archivo de ayuda y ejemplos para que pueda empezar. Todo lo que se necesita en pocos megabytes.
Cualquier código de thinBasic se puede convertir en archivo EXE, directamente. Puede proporcionar el EXE con los metadatos de costumbre, tales como información sobre la versión, icono personalizado y mucho más.A mi personalmente no me parece que tenga un código muy optimizado, no hay mas que ver el programa de abajo para generar el Conjunto de Mandelbrot y se ha utilizado unas 300 lineas de código. Es gratuito lo cual es un punto a su favor. Dispone de muchos ejemplos, manuales y tutoriales. También hay un foro de usuarios.
'Mandelbroy Fractal Texture using complex numbers
'Charles E V Pegge 2010
Uses "TBGL","Oxygen"
Dim hWnd As Dword
' -- Creates window and returns handle by which we can identify it
hWnd = TBGL_CreateWindowEx("Mandelbrot Fractal Texture, press ESC to quit", 512, 512, 32, %TBGL_WS_WINDOWED)
TBGL_ShowWindow
type tbgl_tRGBA
r as byte
g as byte
b as byte
a as byte
end type
Dim render,kef,kspf as long
Dim TexString As String
Texstring=string$(&h100000,chr$(0))
'
'THESE VARIABLES ARE LINKED TO OXYGEN
'
Dim pTexture as long
pTexture=strptr(Texstring)
Dim xcor,ycor, xstp, ystp, xoff, yoff, lmt,esc as Double
Dim maxit,shmo,algo as long
'--------------
'INITIAL VALUES
'--------------
xoff=-2 '-2
yoff=-1.5 '-1.5
xstp=3/512 'X STEPPING 3 max
ystp=3/512 'Y STEPPING 3 max
lmt=4 '1..16
maxit=20 '20..100
shmo=2 '1..7
algo=0 '1
'--------------------------------------------
'OXYGEN COMPILE & EXEC TEXTURE GENERATION
'--------------------------------------------
dim src as string
src="
basic
'------------------------------------
'DEFINE STRUCTURE FOR COMPLEX NUMBERS
'====================================
type complex
r as double
i as double
end type
'
'===============================
'GENERATE MANDELBROT IMAGE ARRAY
'===============================
'
'LINKED VARIABLES
'
dim as double
xcor at #xcor,
ycor at #ycor,
xstp at #xstp,
ystp at #ystp,
xoff at #xoff,
yoff at #yoff,
lmt at #lmt,
esc at #esc
dim as long
maxit at #maxit,
shmo at #shmo,
algo at #algo
dim i,p,xpix, ypix, color as long
dim tex at p as long : p=[#pTexture] 'LINK TEXTURE
dim zzman,zzcor,b as complex
'
b=>2,0
'
ycor=yoff
for ypix=1 to 512
xcor=xoff
for xpix=1 to 512
'i=0
zzman=>0,0
zzcor=>xcor,ycor
mov dl,shmo
mov dh,algo
mov ecx,0
(
'zzman=zzman*zzman+zzcor 'COMPLEX OPERATIONS
'esc=zzman.r * zzman.r + zzman.i * zzman.i
'if esc>lmt then jmp fwd xff
fld qword zzman.r
fmul st(0),st(0)
fld qword zzman.i
fmul st(0),st(0)
(
cmp dh,1 : jnz exit
fsin
)
fsubp st(1),st(0)
fld qword zzman.r
fmul qword zzman.i
(
cmp dh,1 : jnz exit
fsin
)
fadd st(0),st(0)
fadd qword zzcor.i
fst qword zzman.i
(
cmp dl,3 : jz exit
fmul st(0),st(0)
)
fstp qword esc
fadd qword zzcor.r
fst qword zzman.r
(
cmp dl,3 : jz exit
fmul st(0),st(0)
)
fadd qword esc
fst qword esc
fld qword lmt
fcomip st(1)
fcomp st(0),st(0)
jb exit
inc ecx : cmp ecx,maxit : jl long repeat
)
mov i,ecx
'
'VARIOUS SHADING SCHEMES
'-----------------------
'
if shmo and 1 then
esc=(esc-lmt)*0x80/lmt
else
esc=esc*64/lmt
end if
'
if shmo and 2 then
color = esc*0x100
else
color = trunc(esc)*0x100
end if
'
if shmo=4 then
color=i*0x010101/maxit
end if
'
if shmo=5 then
color=i*0x100/maxit and 0xff
color= color+color*0x100+color*0x10000
end if
'
if i>=maxit then color = 0xc02020
'
tex=color : p+=4
xcor+=xstp
next
ycor+=ystp
next
"
'msgbox 0,o2_prep src
o2_asmo src
if len(o2_error) then
msgbox 0,o2_error
stop
end if
'--------------------------------------------
While 1
o2_exec 'GENERATE TEXTURE
' Making BMP file from TexString variable, size 512*512, to slot #2 with 16x anisotropic filtering
TBGL_MakeTexture TexString, %TBGL_DATA_RGBA, 512, 512, 1, %TBGL_TEX_ANISO, 16
' -- Enables aplication of textures to objects
tbgl_UseTexturing %TRUE
' -- We will apply texture 1
tbgl_BindTexture 1
TBGL_ResetKeyState() ' -- Resets status of all keys
' -- Main loop
render=1
While TBGL_IsWindow(hWnd)
if render then
' -- Erases previous frame
tbgl_ClearFrame
' -- Sets camera to look from 0,0,5 to 0,0,0
tbgl_Camera 0, 0, 5, _
0, 0, 0
tbgl_scale 2,2,1
' -- All following geometry will be rotated around vector 0,0,1
' -- That is - Z axis
'tbgl_Rotate GetTickCount/30, 0, 0, 1
tbgl_Color 255,255,255 'WHITE
' -- Creates quads, shapes with 4 vertices
tbgl_BeginPoly %GL_QUADS
'tbgl_Color 255, 0, 0 ' -- Red color
tbgl_TexCoord2D 0, 0 ' -- Texture coordinate, lower left corner
tbgl_Vertex -1, -1, 0
'tbgl_Color 0, 255, 0 ' -- Green color
tbgl_TexCoord2D 1, 0 ' -- Texture coordinate, lower right corner
tbgl_Vertex 1, -1, 0
'tbgl_Color 0, 0, 255 ' -- Blue color
tbgl_TexCoord2D 1, 1 ' -- Texture coordinate, higher right corner
tbgl_Vertex 1, 1, 0
'tbgl_Color 255, 255, 0 ' -- Yellow color
tbgl_TexCoord2D 0, 1 ' -- Texture coordinate, higher left corner
tbgl_Vertex -1, 1, 0
tbgl_EndPoly
' -- Finishes drawing
tbgl_DrawFrame
'render=0
end if
'
'----------------
'KEYBOARD CONTROL
'----------------
'
kef=0
' -- If ESC key is pressed, it will jump out of loop
If TBGL_GetWindowKeyState( hWnd, %VK_ESCAPE) Then kef=2
If TBGL_GetWindowKeyState( hWnd, %VK_PGUP) Then
xstp=xstp*.925 : ystp=ystp*.925 'ZOOM IN
Xoff+=Xstp*16 'ADJUST X OFFSET
yoff+=ystp*16 'ADJUST Y OFFSET
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_PGDN) Then
Xoff-=Xstp*16 'ADJUST X OFFSET
yoff-=ystp*16 'ADJUST Y OFFSET
xstp=xstp/.925 : ystp=ystp/.925 'ZOOM OUT
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_UP) Then
yoff+=ystp*5 'MOVE UP
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_DOWN) Then
yoff-=ystp*5 'MOVE DOWN
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_LEFT) Then
Xoff-=Xstp*5 'MOVE LEFT
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_RIGHT) Then
Xoff+=Xstp*5 'MOVE RIGHT
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_HOME) Then
maxit+=2 'INCREASE RESOLUTION
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_END) Then
maxit-=2 'DECREASE RESOLUTION
kef=1
End If
'
'----------------
'ALGORITHM SELECT
'----------------
'
If TBGL_GetWindowKeyState( hWnd, %VK_SPACE) Then
if kspf=0 then
algo+=1
if algo>1 then algo=0
kef=1
kspf=1 'INHIBIT UNTIL SPACE KEY RELEASED
End If
Else
kspf=0
End If
'
'--------------------
'COLORING MODE SELECT
'--------------------
'
If TBGL_GetWindowKeyState( hWnd, %VK_1) Then
shmo=1
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_2) Then
shmo=2
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_3) Then
shmo=3
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_4) Then
shmo=4
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_5) Then
shmo=5
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_6) Then
shmo=6
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_7) Then
shmo=7
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_8) Then
shmo=8
kef=1
End If
If TBGL_GetWindowKeyState( hWnd, %VK_9) Then
shmo=9
kef=1
End If
if kef then exit while
Wend
TBGL_DeleteTexture 1
if kef=2 then exit while
Wend
' -- Destroys window
TBGL_DestroyWindow
http://www.thinbasic.com/
http://www.thinbasic.com/community/forum.php
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.