PureMatrix - POO

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

PureMatrix - POO

Message par Guimauve »

Bonjour à tous.

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 <<<<
; <<<<<<<<<<<<<<<<<<<<<<<<
Dernière modification par Guimauve le mar. 17/oct./2006 15:54, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Erreur ligne 124 ! :?
"RGBColor() is not Function,Array or List"
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Désolé

C'est toujours le même problème avec les Macros custom compilé en fichier Résident.

Je viens de modifier le code original.

A+
Guimauve
Répondre