
Code : Tout sélectionner
Structure text_matrice
Array matrice.b(20) ; une lettre fait 4x5
; on y accede en faisant x + 4 * y
; vu que l'on ne peut pas faire de multidimension
; c'est la seule technique d'acces au élement valable
EndStructure
Global NewMap Letter.text_matrice()
Restore letter_space
For y = 0 To 4
For x = 0 To 3
Read.b Letter(" ")\matrice(x + 4 * y)
Next
Next
Restore letter_a
For y = 0 To 4
For x = 0 To 3
Read.b Letter("A")\matrice(x + 4 * y)
Next
Next
Restore letter_b
For y = 0 To 4
For x = 0 To 3
Read.b Letter("B")\matrice(x + 4 * y)
Next
Next
Restore letter_c
For y = 0 To 4
For x = 0 To 3
Read.b Letter("C")\matrice(x + 4 * y)
Next
Next
; Ecran virtuel
Global Dim IBM_SCREEN.i(80,24) ; l'index 0,0 n'est pas utilisé dans l'exemple !
; Quelques procedure de dessin pour l'écran virtuel
; Affichage d'un simple pixel
Procedure PutPixel(x,y,color)
If (x > 0) And (x<=80) And (y > 0) And (y<=24)
IBM_SCREEN(x,y) = color
EndIf
EndProcedure
; Effacement de l'écran virtuel
Procedure ClearVirtualScreen(color=$0)
For y = 1 To 24
For x = 1 To 80
IBM_SCREEN(x,y) = 0
Next
Next
EndProcedure
; On trace une ligne horizontale :
Procedure DrawHLine(y,color)
If y <= 24 And y > 0
For x = 1 To 80
IBM_SCREEN(x,y) = color
Next
EndIf
EndProcedure
; On trace une ligne horizontale en pointillié
Procedure DrawHLineDot(y,color)
If y <= 24 And y > 0
For x = 1 To 80 Step 2
IBM_SCREEN(x,y) = color
Next
EndIf
EndProcedure
;une petite Procedure de rendu sur n'importe quoi , une image , une fenetre , un gadget , , un screen , un canvas...
Procedure RenderVirtualScreen(Output, OutputWidth, OutputHeight)
w = OutputWidth / 80
h = OutputHeight / 24
StartDrawing(Output)
For y = 1 To 24
For x = 1 To 80
Box((x-1)*w, (y-1)*h, w,h,IBM_SCREEN(x,y))
Next
Next
StopDrawing()
EndProcedure
Procedure DrawVirtualText(y,text.s,color.i=$FFFFFF)
If y <= 24 And y > 0
For i = 1 To Len(text)
upperChar.s = UCase(Mid(text,i,1))
; On dessine le caractère
For ty = 0 To 4
For tx = 0 To 3
Result.b = Letter(upperChar)\matrice(tx + 4 * ty)
If Result = 1
; ATTENTION AU DEPASSEMENT , J'AI PAS FAIT LES TEST !!!!!!!
IBM_SCREEN((tx+1)+(i*5),ty+y) = color
EndIf
Next
Next
Next
EndIf
EndProcedure
; Test
OpenWindow(0,0,0,640,480,"") ; fenetre de base
CanvasGadget(0,0,0,640,480) ; la surface de rendu
Repeat
event = WindowEvent()
If MyTimer < ElapsedMilliseconds()
MyTimer = ElapsedMilliseconds() + 125
ClearVirtualScreen() ; on efface l'écran virtuel
DrawHLine(2,$FFFFFF) ; on trace une ligne horizontale
DrawVirtualText(4,"BACA CACA")
DrawHLine(10,$FFFFFF) ; on trace une ligne horizontale
If dot = 0
PutPixel(2,12,$FFFFFF)
PutPixel(2,13,$FFFFFF)
PutPixel(2,14,$FFFFFF)
PutPixel(2,15,$FFFFFF)
PutPixel(2,16,$FFFFFF)
EndIf
RenderVirtualScreen(CanvasOutput(0),GadgetWidth(0),GadgetHeight(0)) ; on dessine le resultat sur le canvas.
dot + 1
dot%4
EndIf
Until event = #PB_Event_CloseWindow
; Les lettres sont composé de 4x5 unités
DataSection
letter_space:
Data.b 0,0,0,0
Data.b 0,0,0,0
Data.b 0,0,0,0
Data.b 0,0,0,0
Data.b 0,0,0,0
EndDataSection
DataSection
letter_a:
Data.b 0,1,1,0
Data.b 1,0,0,1
Data.b 1,1,1,1
Data.b 1,0,0,1
Data.b 1,0,0,1
EndDataSection
DataSection
letter_b:
Data.b 1,1,1,0
Data.b 1,0,0,1
Data.b 1,1,1,0
Data.b 1,0,0,1
Data.b 1,1,1,0
EndDataSection
DataSection
letter_c:
Data.b 0,1,1,0
Data.b 1,0,0,1
Data.b 1,0,0,0
Data.b 1,0,0,1
Data.b 0,1,1,0
EndDataSection