Voiçi un autre code classé dans la catégorie : Code reconditionné.
C'est le PureMatrix de Cederavic avec le Style POO.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Pure Matrix - POO
; Fichier : Source principal
; Version : 3.0.0
; Programmation = OK
; Programmé par : Cederavic
; Modifié par : Guimauve
; Date : 12-06-2006
; Mise à jour : 17-10-2006
; Codé avec PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Macros générales >>>>>
Macro RandomMinMax(min, max)
(max - Random(max - min))
EndMacro
Macro RGBColor(Red, Green, Blue)
((((Blue) << 8 + (Green)) << 8) + (Red))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>
#COLUMN_MAX = 100
Structure Class_PureMatrix
VTable.l
ScreenW.w
ScreenH.w
MinSpeed.w
MaxSpeed.w
MinLenght.w
MaxLenght.w
PositionY.w[#COLUMN_MAX]
Speed.w[#COLUMN_MAX]
Lenght.w[#COLUMN_MAX]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de l'interface <<<<<
Interface PureMatrix
InitMatrix()
DrawMatrix(OutputID)
EndInterface
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le constructeur de la classe PureMatrix <<<<<
Procedure.l CreateNewPureMatrix()
Protected *newobject.Class_PureMatrix
*newobject = AllocateMemory(SizeOf(Class_PureMatrix))
*newobject\VTable = ?PureMatrix_VTable
ProcedureReturn *newobject
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Initialisation de la classe PureMatrix <<<<<
Procedure InitMatrix(*Self.Class_PureMatrix)
*Self\ScreenW = GetSystemMetrics_(#SM_CXSCREEN)
*Self\ScreenH = GetSystemMetrics_(#SM_CYSCREEN)
*Self\MinSpeed = 3
*Self\MaxSpeed = 6
*Self\MinLenght = 150
*Self\MaxLenght = 450
For Index = 0 To #COLUMN_MAX -1
*Self\PositionY[Index] = Random(*Self\ScreenH) - *Self\ScreenH * 1.5
*Self\Speed[Index] = RandomMinMax(*Self\MinSpeed, *Self\MaxSpeed)
*Self\Lenght[Index] = RandomMinMax(*Self\MinLenght , *Self\MaxLenght)
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessin de la classe PureMatrix <<<<<
Procedure DrawMatrix(*Self.Class_PureMatrix, OutputID)
StartDrawing(OutputID) ;>
DrawingMode(1)
For x = 0 To #COLUMN_MAX -1
*Self\PositionY[x] = *Self\PositionY[x] + *Self\Speed[x]
If *Self\PositionY[x] > *Self\ScreenH
*Self\PositionY[x] = Random(*Self\ScreenH) - *Self\ScreenH * 1.5
*Self\Speed[x] = RandomMinMax(*Self\MinSpeed, *Self\MaxSpeed)
*Self\Lenght[x] = RandomMinMax(*Self\MinLenght , *Self\MaxLenght)
EndIf
For y = *Self\PositionY[x] To *Self\PositionY[x] + *Self\Lenght[x] Step 16
If y > (*Self\PositionY[x] + *Self\Lenght[x] - 16)
Red = 60
Green = 255
Blue = 120
Else
Red = 0
Green = ((y - *Self\PositionY[x]) * 100 / *Self\Lenght[x]) * 2 + 32
Blue = 0
EndIf
DrawText(x * 16, y, UCase(Chr(Random(255))), RGBColor(Red, Green, Blue))
Next
Next
StopDrawing() ;<
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< La VTable de la classe PureMatrix <<<<<
DataSection ;>
PureMatrix_VTable:
Data.l @InitMatrix()
Data.l @DrawMatrix()
EndDataSection ;<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Début du programme <<<<<
If InitSprite() = 0 Or InitMouse() = 0 Or InitKeyboard() = 0
End
Else
If OpenScreen(GetSystemMetrics_(#SM_CXSCREEN), GetSystemMetrics_(#SM_CYSCREEN), 32, "Pure Matrix") = 0
End
Else
PureMatrix.PureMatrix = CreateNewPureMatrix()
PureMatrix\InitMatrix()
Repeat
If IsScreenActive()
ClearScreen(0)
PureMatrix\DrawMatrix(ScreenOutput())
FlipBuffers()
Else
Delay(10)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; On vérifie si l'utilisateur touche au clavier ou à la souris
; On ferme l'écran de veille si l'utilisateur touche au clavier
; ou à la souris.
ExamineMouse()
ExamineKeyboard()
Until MouseDeltaX() Or MouseDeltaY() Or MouseWheel() Or KeyboardPushed(#PB_Key_All)
CloseScreen()
EndIf
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<< FIN DU FICHIER <<<<
; <<<<<<<<<<<<<<<<<<<<<<<<