Grille hexagonale lumineuse...

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Grille hexagonale lumineuse...

Message par Cool Dji »

Hello,

Petit code qui ne mange pas de pain.
Une grille composée d'hexagones qui se colorient lorsque le pointeur souris passe dessus avec un effet fade-off...

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran
OpenScreen(1024, 768, 32, "")


;-- création d'un sprite en hexagone coloré à l'intérieur
CreateSprite(1,37,32,#PB_Sprite_AlphaBlending) 
StartDrawing(SpriteOutput(1))
LineXY(9,0,28,0,$FFFFFF)
LineXY(28,0,36,16,$FFFFFF)
LineXY(28,31,36,16,$FFFFFF)
LineXY(28,31,9,31,$FFFFFF)
LineXY(0,16,9,31,$FFFFFF)
LineXY(9,0,0,16,$FFFFFF)
FillArea(15,15,-1,RGB(152,50,100))
StopDrawing()
TransparentSpriteColor(1,O)

;-- création d'un sprite en hexagone non coloré à l'intérieur
CreateSprite(2,37,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
LineXY(9,0,28,0,$FFFFFF)
LineXY(28,0,36,16,$FFFFFF)
LineXY(28,31,36,16,$FFFFFF)
LineXY(28,31,9,31,$FFFFFF)
LineXY(0,16,9,31,$FFFFFF)
LineXY(9,0,0,16,$FFFFFF)
StopDrawing()
TransparentSpriteColor(2,O)

;-- création d'un sprite => cercle pour le pointeur souris
CreateSprite(3,32,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(3))
Circle(16,16,15,RGB(255,255,255))
StopDrawing()
TransparentSpriteColor(3,O)

;-- Construit une grille formée d'hexagone
Global nbhexa=0, linehexa=22, colhexa=18
Global Dim hexaX(linehexa * colhexa * 2), Dim hexaY(linehexa * colhexa * 2) , Dim hexaL(linehexa * colhexa * 2)

; hexaX = position x d'un hexagone
; hexaY = position x d'un hexagone
; hexaL = luminosité d'un hexagone

 For y=0 To linehexa-1
       For x=0 To colhexa-1
         nbhexa+1
         hexaX(nbhexa)=x*55+15    ;Position X de l'hexagone
         hexaY(nbhexa)=y*32+15   ;Position Y de l'hexagone
     
         nbhexa+1
         hexaX(nbhexa)=x*55+28+15
         hexaY(nbhexa)=y*32+16+15
  Next
 Next 



;----- Clavier en mode International
KeyboardMode(#PB_Keyboard_International)


;-    
;--   S T A R T     L O O P
;-    
Repeat
   
;----- Examine Clavier et Souris
 ExamineKeyboard()
 ExamineMouse()
  
 ClearScreen(RGB(0,0,0)) ; Efface l'écran
 
 ;-- Affiche les hexagones
   For j=1 To nbhexa
     ; si le pointeur souris touche un hexagone, on active l'affichage d'un hexagone plein
      If SpritePixelCollision(3,MouseX(),MouseY(),2,hexaX(j),hexaY(j))
           hexaL(j)=255    ; valeur de la luminosité de l'hexagone plein
       EndIf  
       
       ; si un hexagone plein est activé, on baisse peu à peu sa luminosité
      DisplayTransparentSprite(1,hexaX(j),hexaY(j),HexaL(j))
      If hexaL(j)>0:hexaL(j)-5 : EndIf

       ; affiche le contour de l'hexagone
      DisplayTransparentSprite(2,hexaX(j),hexaY(j),255)
    
    Next        
    
   ; Affiche le pointeur souris (le sprite en cercle) 
   DisplayTransparentSprite(3,MouseX(),MouseY(),155)
 FlipBuffers()
 
Until KeyboardPushed(#PB_Key_Escape)
Only PureBasic makes it possible
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Grille hexagonale lumineuse...

Message par Zorro »

cool :)

comme ceci , ça permet d'en faire un Extincteur d'ecran a moindre frais

note, que j'ai pas inclu le code pour en faire un extincteur d'ecran ... mais c'est pas grand chose a ajouter :)

j'ai ajuster le graph a la resolution de l'ecran en cours, comme ça ça prends plein ecran chez tut le monde :)
et ajouter une gestion du deplacement automatique ....

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran

ExamineDesktops()
y_screen=desktopHeight(0)
x_screen=desktopWidth(0)

OpenScreen(x_screen, y_screen, 32, "")


;-- création d'un sprite en hexagone coloré à l'intérieur
CreateSprite(1,37,32,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(1))
		LineXY(9,0,28,0,$FFFFFF)
		LineXY(28,0,36,16,$FFFFFF)
		LineXY(28,31,36,16,$FFFFFF)
		LineXY(28,31,9,31,$FFFFFF)
		LineXY(0,16,9,31,$FFFFFF)
		LineXY(9,0,0,16,$FFFFFF)
		FillArea(15,15,-1,RGB(152,50,100))
StopDrawing()
TransparentSpriteColor(1,O)

;-- création d'un sprite en hexagone non coloré à l'intérieur
CreateSprite(2,37,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
		LineXY(9,0,28,0,$FFFFFF)
		LineXY(28,0,36,16,$FFFFFF)
		LineXY(28,31,36,16,$FFFFFF)
		LineXY(28,31,9,31,$FFFFFF)
		LineXY(0,16,9,31,$FFFFFF)
		LineXY(9,0,0,16,$FFFFFF)
StopDrawing()
TransparentSpriteColor(2,O)

;-- création d'un sprite => cercle pour le pointeur souris
CreateSprite(3,32,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(3))
		Circle(16,16,15,RGB(255,255,255))
StopDrawing()
TransparentSpriteColor(3,O)

;-- Construit une grille formée d'hexagone
Global nbhexa=0, linehexa=x_screen/32, colhexa=y_screen/32
Global Dim hexaX(linehexa * colhexa * 2), Dim hexaY(linehexa * colhexa * 2) , Dim hexaL(linehexa * colhexa * 2)

; hexaX = position x d'un hexagone
; hexaY = position x d'un hexagone
; hexaL = luminosité d'un hexagone

For y=0 To linehexa-1
		For x=0 To colhexa-1
				nbhexa+1
				hexaX(nbhexa)=x*55+15    ;Position X de l'hexagone
				hexaY(nbhexa)=y*32+15   ;Position Y de l'hexagone
				
				nbhexa+1
				hexaX(nbhexa)=x*55+28+15
				hexaY(nbhexa)=y*32+16+15
		Next
Next



;----- Clavier en mode International
KeyboardMode(#PB_Keyboard_International)


;-   
;--   S T A R T     L O O P
;-   
X_random=x_screen/2
y_random=y_screen/2
;pas_x=5
;pas_y=5
Repeat
		
		changement=random(50,1)
		if changement=1
		Pas_x=random(10,1)
		Pas_y=random(10,1)
		Endif
		de_x=random(2,0)
		de_y=random(2,0)
		if  de_x=1:Pas_x=-Pas_x:Endif
		if  de_y=1:Pas_y=-Pas_y:Endif
		X_random=	X_random+Pas_x
		y_random=	y_random+Pas_y
		
		If x_random<0 :x_random =x_screen-32:Endif
		If y_random<0 :y_random =y_screen-32:Endif
		If x_random>=x_screen :x_random =32:Endif
		If y_random>=y_screen :y_random =32:Endif
		
		;----- Examine Clavier et Souris
		ExamineKeyboard()
		ExamineMouse()
		
		ClearScreen(RGB(0,0,0)) ; Efface l'écran
		
		;-- Affiche les hexagones
		For j=1 To nbhexa
				; si le pointeur souris touche un hexagone, on active l'affichage d'un hexagone plein
				If SpritePixelCollision(3,x_random,y_random,2,hexaX(j),hexaY(j))
						hexaL(j)=255    ; valeur de la luminosité de l'hexagone plein
				EndIf 
				
				; si un hexagone plein est activé, on baisse peu à peu sa luminosité
				DisplayTransparentSprite(1,hexaX(j),hexaY(j),HexaL(j))
				If hexaL(j)>0:hexaL(j)-5 : EndIf
				
				; affiche le contour de l'hexagone
				DisplayTransparentSprite(2,hexaX(j),hexaY(j),255)
				
		Next       
		
		; Affiche le pointeur souris (le sprite en cercle)
		;;   DisplayTransparentSprite(3,MouseX(),MouseY(),155)
		FlipBuffers()
		
Until KeyboardPushed(#PB_Key_Escape)
Dernière modification par Zorro le lun. 15/mai/2017 11:10, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Grille hexagonale lumineuse...

Message par Ar-S »

Merci Cool Dji.
Les vraies prémices d'un jeu de stratégie au tour par tour :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Grille hexagonale lumineuse...

Message par falsam »

Joli rendu visuel et j’apprécie ce code bien documenté. Merci pour ce partage Cool Dji.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Grille hexagonale lumineuse...

Message par Kwai chang caine »

CoolDJ a écrit :Petit code qui ne mange pas de pain.
L'important c'est qu'il ne mange pas de viande 8) .....enfin j'me comprends :mrgreen:

Waooouhhh !!!!
Super joli, incroyable ce que l'on peut faire, somme toutes, avec si peu de lignes 8O

Et en plus un code source de ruche complèt sans API "culteur".....c'est pas donné tous les jours d'en voir
Merci beaucoup pour le partage 8)
Dernière modification par Kwai chang caine le lun. 15/mai/2017 13:30, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Grille hexagonale lumineuse...

Message par Cool Dji »

Hello les amis,

Héhé, Ar-S a vu juste ;)
Pas mal comme fond d'écran, Mr Zorro.
Merci Falsam, à l'origine j'avais testé avec Spider ;) et c'est en voyant Babylon que je me suis replongé dans mes vieux codes Spider...
KCC => je vais bientôt mettre en ligne un code que je n'ai pas pu sortir pour un purepunch avec une fonction spéciale KCC ;)
Only PureBasic makes it possible
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Grille hexagonale lumineuse...

Message par Kwai chang caine »

Waaaooouuuh rien que pour moi !!!! 8O
Quécécé ?????? un "kdo" bien mérité ? :D
Image
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Grille hexagonale lumineuse...

Message par Zorro »

Kwai chang caine a écrit :Quécécé ??????
ptete un rapport avec le Gif ?
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Grille hexagonale lumineuse...

Message par microdevweb »

Très beau
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Grille hexagonale lumineuse...

Message par Cool Dji »

Héhé, je poste ce soir sur le forum...
Only PureBasic makes it possible
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Grille hexagonale lumineuse...

Message par TazNormand »

Une rapide modif du code de Zorro pour être plus en adéquation avec un éventuel économiseur d'écran, car les hexagones blancs ne font pas vraiment économiser les diodes de nos écans LCD :lol:
Changement de la couleur $FFFFFF en $000001
détection du déplacement de la souris pour sortir du programme (comme un screensaver)

Code : Tout sélectionner


; Initial code : Cool Dji
; 1st update : Zorro
; 2nd very very minor update TazNormand

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran

ExamineDesktops()
y_screen=DesktopHeight(0)
x_screen=DesktopWidth(0)

OpenScreen(x_screen, y_screen, 32, "")
ExamineMouse()

;-- création d'un sprite en hexagone coloré à l'intérieur
CreateSprite(1,37,32,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(1))
      LineXY(9,0,28,0,$000001)
      LineXY(28,0,36,16,$000001)
      LineXY(28,31,36,16,$000001)
      LineXY(28,31,9,31,$000001)
      LineXY(0,16,9,31,$000001)
      LineXY(9,0,0,16,$000001)
      FillArea(15,15,-1,RGB(152,50,100))
StopDrawing()
TransparentSpriteColor(1,O)

;-- création d'un sprite en hexagone non coloré à l'intérieur
CreateSprite(2,37,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
      LineXY(9,0,28,0,$000001)
      LineXY(28,0,36,16,$000001)
      LineXY(28,31,36,16,$000001)
      LineXY(28,31,9,31,$000001)
      LineXY(0,16,9,31,$000001)
      LineXY(9,0,0,16,$000001)
StopDrawing()
TransparentSpriteColor(2,O)

;-- création d'un sprite => cercle pour le pointeur souris
CreateSprite(3,32,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(3))
      Circle(16,16,15,RGB(255,255,255))
StopDrawing()
TransparentSpriteColor(3,O)

;-- Construit une grille formée d'hexagone
Global nbhexa=0, linehexa=x_screen/32, colhexa=y_screen/32
Global Dim hexaX(linehexa * colhexa * 2), Dim hexaY(linehexa * colhexa * 2) , Dim hexaL(linehexa * colhexa * 2)

; hexaX = position x d'un hexagone
; hexaY = position x d'un hexagone
; hexaL = luminosité d'un hexagone

For y=0 To linehexa-1
      For x=0 To colhexa-1
            nbhexa+1
            hexaX(nbhexa)=x*55+15    ;Position X de l'hexagone
            hexaY(nbhexa)=y*32+15   ;Position Y de l'hexagone
            
            nbhexa+1
            hexaX(nbhexa)=x*55+28+15
            hexaY(nbhexa)=y*32+16+15
      Next
Next



;----- Clavier en mode International
KeyboardMode(#PB_Keyboard_International)


;-   
;--   S T A R T     L O O P
;-   
X_random=x_screen/2
y_random=y_screen/2
;pas_x=5
;pas_y=5
initialMouse=MouseX()+MouseY()

Repeat
      
      changement=Random(50,1)
      If changement=1
      Pas_x=Random(10,1)
      Pas_y=Random(10,1)
      EndIf
      de_x=Random(2,0)
      de_y=Random(2,0)
      If  de_x=1:Pas_x=-Pas_x:EndIf
      If  de_y=1:Pas_y=-Pas_y:EndIf
      X_random=   X_random+Pas_x
      y_random=   y_random+Pas_y
      
      If x_random<0 :x_random =x_screen-32:EndIf
      If y_random<0 :y_random =y_screen-32:EndIf
      If x_random>=x_screen :x_random =32:EndIf
      If y_random>=y_screen :y_random =32:EndIf
      
      ;----- Examine Clavier et Souris
      ExamineKeyboard()
      ExamineMouse()
      
      ClearScreen(RGB(0,0,0)) ; Efface l'écran
      
      ;-- Affiche les hexagones
      For j=1 To nbhexa
            ; si le pointeur souris touche un hexagone, on active l'affichage d'un hexagone plein
            If SpritePixelCollision(3,x_random,y_random,2,hexaX(j),hexaY(j))
                  hexaL(j)=255    ; valeur de la luminosité de l'hexagone plein
            EndIf
            
            ; si un hexagone plein est activé, on baisse peu à peu sa luminosité
            DisplayTransparentSprite(1,hexaX(j),hexaY(j),HexaL(j))
            If hexaL(j)>0:hexaL(j)-5 : EndIf
            
            ; affiche le contour de l'hexagone
            DisplayTransparentSprite(2,hexaX(j),hexaY(j),255)
            
      Next       
      
      ; Affiche le pointeur souris (le sprite en cercle)
      ;;   DisplayTransparentSprite(3,MouseX(),MouseY(),155)
      FlipBuffers()
      
Until KeyboardPushed(#PB_Key_Escape) Or (MouseX()+MouseY())<>initialmouse
Image
Image
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Grille hexagonale lumineuse...

Message par JohnJohnsonSHERMAN »

Allez ....

Le même mais avec une mosaique d'hexagones aléatoires qui scintillent et de tout un tas de couleurs différentes :)
Pour un meilleur rendu n'hésitez pas à baisser les valeurs random de certaines couleurs (ex enlever le bleu ou le rouge), pour un ensemble plus homogéne et personnalisé

Code : Tout sélectionner

; Initial code : Cool Dji
; 1st update : Zorro
; 2nd very very minor update TazNormand
; 3rd update by JJSherman

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran

ExamineDesktops()
y_screen=DesktopHeight(0)
x_screen=DesktopWidth(0)

OpenScreen(x_screen, y_screen, 32, "")
ExamineMouse()

;-- création d'un sprite en hexagone coloré à l'intérieur
For i=4 To 104
CreateSprite(i,37,32,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(i))
LineXY(9,0,28,0,$000001)
LineXY(28,0,36,16,$000001)
LineXY(28,31,36,16,$000001)
LineXY(28,31,9,31,$000001)
LineXY(0,16,9,31,$000001)
LineXY(9,0,0,16,$000001)
FillArea(15,15,-1,RGB(Random(255),Random(255),Random(255)));<<<Jouez sur les valeurs pour modifier la teinte globale
StopDrawing()
TransparentSpriteColor(i,O)
Next


;-- création d'un sprite en hexagone non coloré à l'intérieur
CreateSprite(2,37,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
LineXY(9,0,28,0,$000001)
LineXY(28,0,36,16,$000001)
LineXY(28,31,36,16,$000001)
LineXY(28,31,9,31,$000001)
LineXY(0,16,9,31,$000001)
LineXY(9,0,0,16,$000001)
StopDrawing()
TransparentSpriteColor(2,O)

;-- création d'un sprite => cercle pour le pointeur souris
CreateSprite(3,32,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(3))
Circle(16,16,1,RGB(255,255,255))
StopDrawing()
TransparentSpriteColor(3,O)

;-- Construit une grille formée d'hexagone
Global nbhexa=0, linehexa=x_screen/32, colhexa=y_screen/32
Global Dim hexaX(linehexa * colhexa * 2), Dim hexaY(linehexa * colhexa * 2) , Dim hexaL(linehexa * colhexa * 2) , Dim hexaC(linehexa * colhexa * 2)


; hexaX = position x d'un hexagone
; hexaY = position x d'un hexagone
; hexaL = luminosité d'un hexagone

For y=0 To linehexa-1
  For x=0 To colhexa-1
    nbhexa+1
    hexaX(nbhexa)=x*55+15       ;Position X de l'hexagone
    hexaY(nbhexa)=y*32+15       ;Position Y de l'hexagone
    hexaC(nbhexa)=Random(104,4) ;Couleur de l'hexagone (sprite)
    
    nbhexa+1
    hexaX(nbhexa)=x*55+28+15
    hexaY(nbhexa)=y*32+16+15
    hexaC(nbhexa)=Random(104,4)
  Next
Next



;----- Clavier en mode International
KeyboardMode(#PB_Keyboard_International)


;-   
;--   S T A R T     L O O P
;-   
X_random=x_screen/2
y_random=y_screen/2
;pas_x=5
;pas_y=5
initialMouse=MouseX()+MouseY()

Repeat
  
  
  
  
  ;----- Examine Clavier et Souris
  ExamineKeyboard()
  ExamineMouse()
  
  ClearScreen(RGB(0,0,0)) ; Efface l'écran
  
  ;-- Affiche les hexagones
  For j=1 To nbhexa
    ; si le pointeur souris touche un hexagone, on active l'affichage d'un hexagone plein
    For k=0 To 100
      x_random= Random(x_screen)
      y_random = Random(y_screen)
      If SpritePixelCollision(3,x_random,y_random,2,hexaX(j),hexaY(j))
        hexaL(j)=255    ; valeur de la luminosité de l'hexagone plein
      EndIf
    Next
    
    ; si un hexagone plein est activé, on baisse peu à peu sa luminosité
    DisplayTransparentSprite(hexaC(j),hexaX(j),hexaY(j),HexaL(j))
    If hexaL(j)>0:hexaL(j)-5 : EndIf
    
    ; affiche le contour de l'hexagone
    DisplayTransparentSprite(2,hexaX(j),hexaY(j),255)
    
  Next       
  
  ; Affiche le pointeur souris (le sprite en cercle)
  ;;   DisplayTransparentSprite(3,MouseX(),MouseY(),155)
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape) Or (MouseX()+MouseY())<>initialmouse
Dernière modification par JohnJohnsonSHERMAN le lun. 15/mai/2017 20:20, modifié 1 fois.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

Re: Grille hexagonale lumineuse...

Message par raven »

merci pour le partage cool dji 8)

petit test:

Code : Tout sélectionner

InitSprite()
InitMouse()
InitKeyboard()


;----- Ouvre un Screen Plein écran

ExamineDesktops()
y_screen=DesktopHeight(0)
x_screen=DesktopWidth(0)

OpenScreen(x_screen, y_screen, 32, "")


; ;-- création d'un sprite en hexagone coloré à l'intérieur
; CreateSprite(1,37,32,#PB_Sprite_AlphaBlending)
; StartDrawing(SpriteOutput(1))
;       LineXY(9,0,28,0,$FFFFFF)
;       LineXY(28,0,36,16,$FFFFFF)
;       LineXY(28,31,36,16,$FFFFFF)
;       LineXY(28,31,9,31,$FFFFFF)
;       LineXY(0,16,9,31,$FFFFFF)
;       LineXY(9,0,0,16,$FFFFFF)
;       FillArea(15,15,-1,RGB(rouge1,vert1,bleu1))
; StopDrawing()
; TransparentSpriteColor(1,O)

;-- création d'un sprite en hexagone non coloré à l'intérieur
CreateSprite(2,37,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
LineXY(9,0,28,0,$FFFFFF)
LineXY(28,0,36,16,$FFFFFF)
LineXY(28,31,36,16,$FFFFFF)
LineXY(28,31,9,31,$FFFFFF)
LineXY(0,16,9,31,$FFFFFF)
LineXY(9,0,0,16,$FFFFFF)

StopDrawing()
TransparentSpriteColor(2,O)

;-- création d'un sprite => cercle pour le pointeur souris
CreateSprite(3,32,32,#PB_Sprite_AlphaBlending | #PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(3))
Circle(14,14,15,RGB(255,255,255))
StopDrawing()
TransparentSpriteColor(3,O)

;-- Construit une grille formée d'hexagone
Global nbhexa=0, linehexa=x_screen/32, colhexa=y_screen/32
Global Dim hexaX(linehexa * colhexa * 2), Dim hexaY(linehexa * colhexa * 2) , Dim hexaL(linehexa * colhexa * 2)
Global Rouge2.f,Vert2.f,Bleu2.f,Drouge.f,Dvert.f,Dbleu.f,rouge1.f,vert1.f,bleu1.f
Procedure couleur()
  
  ;;-- création d'un sprite en hexagone coloré à l'intérieur
  CreateSprite(1,37,32,#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(1))
  LineXY(9,0,28,0,$FFFFFF)
  LineXY(28,0,36,16,$FFFFFF)
  LineXY(28,31,36,16,$FFFFFF)
  LineXY(28,31,9,31,$FFFFFF)
  LineXY(0,16,9,31,$FFFFFF)
  LineXY(9,0,0,16,$FFFFFF)
  FillArea(15,15,-1,RGB(rouge1.f,vert1.f,bleu1.f))
  
  Rouge1.f = 0
  Vert1.f = 0
  Bleu1.f = 0
  
  Rouge2.f =55 
  Vert2.f = 45 
  Bleu2.f = 55 
  
  Drouge.f = ((Rouge2-Rouge1)/0.00010)
  Dvert.f =  ((Vert2-Vert1)/0.00010)
  Dbleu.f =  ((Bleu2-Bleu1)/0.0003)
  
  Rouge1- Drouge
  Vert1 - Dvert
  Bleu1 - Dbleu
  
  StopDrawing()
  
EndProcedure
; hexaX = position x d'un hexagone
; hexaY = position x d'un hexagone
; hexaL = luminosité d'un hexagone

For y=0 To linehexa-1
  For x=0 To colhexa-1
    nbhexa+1
    hexaX(nbhexa)=x*55+15    ;Position X de l'hexagone
    hexaY(nbhexa)=y*32+15    ;Position Y de l'hexagone
    
    nbhexa+1
    hexaX(nbhexa)=x*55+28+15
    hexaY(nbhexa)=y*32+16+15
  Next
Next

;----- Clavier en mode International
KeyboardMode(#PB_Keyboard_International)


;-   
;--   S T A R T     L O O P
;-   

; X_random=x_screen/2
; y_random=y_screen/2
;pas_x=5
;pas_y=5
Repeat
  
  ;----- Examine Clavier et Souris
  ExamineKeyboard()
  ExamineMouse()
  
  ClearScreen(RGB(0,0,0)) ; Efface l'écran
  couleur() 
  TransparentSpriteColor(1,O)
  ;-- Affiche les hexagones
  For j=1 To nbhexa
    ; si le pointeur souris touche un hexagone, on active l'affichage d'un hexagone plein
    If SpritePixelCollision(3,MouseX(),MouseY(),2,hexaX(j),hexaY(j))
      hexaL(j)=255;RGB(rouge1.f,vert1.f,bleu1.f)  ; valeur de la luminosité de l'hexagone plein
      Rouge1+ Drouge
      Vert1 + Dvert
      Bleu1 + Dbleu
    EndIf
    
    ; si un hexagone plein est activé, on baisse peu à peu sa luminosité
    DisplayTransparentSprite(1,hexaX(j),hexaY(j),HexaL(j))
    If hexaL(j)>0:hexaL(j)-5 : EndIf
    
    
    ; affiche le contour de l'hexagone
    DisplayTransparentSprite(2,hexaX(j),hexaY(j),15)
    
  Next       
  
  ; Affiche le pointeur souris (le sprite en cercle)
  ;   DisplayTransparentSprite(3,MouseX(),MouseY(),155)
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape)
Pb5.24 Lts/5.31 Windows 7 64 nvidia 560 ti E8500 8g ram
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Grille hexagonale lumineuse...

Message par JohnJohnsonSHERMAN »

@raven, on a eu des idées similaires en même temps :P Je viens d'éditer mon code avec une version colorée ;)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Grille hexagonale lumineuse...

Message par Cool Dji »

Héhé,

Jolies production !

Celle de Raven est ma préférée ;)

Ce soir, je poste un code qui va déchirer : Pour mon boulot, à l'occasion d'une réunion de lancement en avril dernier, j'ai programmé en PB une animation projetée sur grand écran pour faire patienter les 300 invités... Le thème de la réunion était en lien avec l'aménagement du Territoire dans une nouvelle grande région...
Only PureBasic makes it possible
Répondre