Peur Basique

Programmation avancée de jeux en PureBasic
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Peur Basique

Message par beauregard »

La vie d'un fantôme n'est pas toujours facile, surtout lorsqu'on est piégé dans un labyrinthe, poursuivi par un dangereux glouton qui a perdu tout sens commun.

Aujourd'hui, c'est un petit fantôme qui a besoin de vous, alors aider le à grandir et à s'épanouir...

Pour accomplir cette quête, il vous faudra une souris 2 boutons et les touches "R", "F" et "Esc" de votre clavier vous seront utile aussi.

Code : Tout sélectionner

; ------------------------------------------------------------
; video game - PC - 
; Peur Basique - 2007 - source PureBasic 4.02
; France - Toulouse - H. Philippe - pseudo: beauregard
; ------------------------------------------------------------


If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
     End
EndIf

Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):
;
     #logotitre
     #logotitre3D
;     
     #fondA 
     #fondA3D 
; dirigé par le joueur durand l'introduction:
     #pb
     #pb3D
; dirigé par le joueur durand la phase de jeu:
     #ghost ; 
     #ghost3D 
     #oeil
     #oeil3D
     #drapA ; drap animation 1  
     #drapA3D
     #drapB ; drap animation 2 
     #drapB3D
; barre d'énergie:
     #sphoton
     #sphoton3D      
     #photon  
     #photon3D
; bonbon pour remonter la barre d'énergie ( mais qui fait également grossir ! ): 
     #bonbon 
     #bonbon3D
     #eonbon; enveloppe du bonbon
     #eonbon3D     
     #pointA
     #pointA3D      
     #pointB
     #pointB3D
; vilain:
     #elice
     #elice3D
       #pic
       #pic3D     
; permet au progammeur de repèrer les positions des divers objets qu'il teste à l'écran:         
     #repere
     #repere3D
     
; intro:     
     #fleche     
     #fleche3D
     #flechf     
     #flechf3D
     #ghostB ; 
     #ghostB3D 
EndEnumeration


Global gposX.w,gposY.w,ybonbon,d1fleche
Global nbreis ; nombre d'image par seconde ( appuyez sur la touche F).
Global page.w=0,niveau.w=1,etapeanim.w,etanT.w,mange.w,Tniveau.w
Global animdrap.w=0 ; animation du drap
Global ghostv.w=255 ; niveau de visibilité au regard des vilains gloutons.
Global energie.w=20,energid ; utilisé pour se rendre transparent, ou maigrir.
Global Tenergie.w=0 ; tempo pour établir la vitesse d'épuisement de la barre l'énergie.
Global gtaille.w=50 ; taille du ghost qui peut aller de 50 à 200.
Global ghostaie.w ; ghost subit contact mortel.
Global testX.w,testY.w ; position X et Y du curseur de la souris.
Global repereX.w,repereY.w
Global possx.w,memsx.w
Global zattract.w ; utilisé pour définir la zone d'attraction du ghost.
; variables globales utilisées pour clone elice:
Global eli_bord.w,eli_taille.w,eli_speed.w,eli_choix.w,eli_sensrot.w
Global tourne.w,tourne2.w=-180,tournf.w,tournf2.w=-180,tournestop.w  

Global pointd.w,pointm.w,pointn.w,pointg.w,pointX.w,pointY.w,pointt.w

Global placemX=512,placemY=384

Structure objet
 id.l 
 x.w
 Y.w
 sensx.l
 sensy.l
 sr.w
 attract.w
EndStructure
Global NewList bonbon.objet();opération de clonage...  
Global NewList elice.objet(); 
Global NewList bfond.objet(); bloc fond 
Declare Fclonebfond()
Declare Fcloneb() ; bonbon
Declare Fclonee() ; elice
Declare Fghost(); ghost
Declare Freset() ; remise à 0 en appuyant sur la touche R
Declare Ftestcodeur()
Declare Fintro()

; Si votre PC ne peut pas afficher une haute résoution résolution en 32bit, Alors arrêt du programme.
;If OpenScreen (1440, 900, 32, "peur basique" )=0 
If OpenScreen (1024, 768, 32, "peur basique" )=0 
     MessageRequester ( "Error" , "Can't open a 1024*768 - 32 bit screen !" , 0)
     End
EndIf
; °°°°°°°°°°°°°°°°°°°°  fonte °°°°°°°°°°°°°°°°°°°°°°°°°°
#font =1
LoadFont ( #font , "Arial" ,40)
FontID = LoadFont ( 1 , "arial" , 25, #PB_Font_Bold )
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; logotitre
CreateSprite ( #logotitre ,256,256, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #logotitre ))
  DrawingFont ( FontID ( #font ))  
   BackColor ( RGB (0,0,0))
      FrontColor ( RGB (154,154,154))
      DrawText (0+1,0+1, "PEUR BASIQUE")
      FrontColor ( RGB (224,224,224))
      DrawText (0,0, "PEUR BASIQUE")   
 StopDrawing ()
CreateSprite3D ( #logotitre3D , #logotitre )
; fond:
CreateSprite ( #fondA ,64,64, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #fondA ))
  BackColor ( RGB (0,0,0))
 
  Box (0,0, 64, 64, RGB (108,119,206))
  Box (1,1, 62, 62, RGB (26,45,190))
  Box (2,2, 60, 60, RGB (0,17,142))  
  Box (16,16, 32, 32, RGB (2,11,83)) 
  Box (18,18, 30, 30, RGB (1,8,43)) 
       
 StopDrawing ()
;CreateSprite3D ( #fondA3D , #fondA )
; icone souris( en forme de cartouche de jeu pour la console purebasiconsole):
CreateSprite ( #pb ,128,128, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #pb ))
  BackColor ( RGB (164,21,21))
  
  Box (0,0, 128, 9, RGB (158,5,5)) 
  Box (10,10, 108, 118, RGB (241,224,224))

 FrontColor ( RGB (255,255,255))    
    
    DrawText (28,22, " purebasic ")
    DrawText (13,55, "PEUR BASIQUE")
    
    
  Box (40+15,80, 4*4, 4, RGB (158,5,5))
 
  Box (24/2+35,82, 4*8, 4, RGB (162,15,15))
 
  Box (40/2+35,84, 4*4, 4, RGB (164,21,21)):Box (16/2+35,84, 4, 4, RGB (164,21,21)):Box (88/2+35,84, 4, 4, RGB (164,21,21))
  
  Box (48/2+35,86, 4*2, 4, RGB (168,32,32)):Box (8/2+35,86, 4, 4, RGB (168,32,32)):Box (96/2+35,86, 4, 4, RGB (168,32,32)) 
 
  Box (48/2+35,88, 4*2, 4, RGB (172,42,42)):Box (8/2+35,88, 4, 4, RGB (172,42,42)):Box (96/2+35,88, 4, 4, RGB (172,42,42)) 
 
  Box (40/2+35,90, 4*4, 4, RGB (176,53,53)):Box (8/2+35,90, 4*2, 4, RGB (176,53,53)):Box (88/2+35,90, 4*2, 4, RGB (176,53,53))  
 
  Box (0+35,92, 4*14, 4, RGB (179,61,61)) 
  Box (0+35,94, 4*14, 4, RGB (185,77,77)) 
  Box (0+35,96, 4*14, 4, RGB (190,89,89)) 
  Box (0+35,98, 4*14, 4, RGB (195,102,102)) 
  Box (0+35,100, 4*14, 4, RGB (200,115,115)) 
  Box (0+35,102, 4*14, 4, RGB (204,127,127))
  
  Box (0+35,104, 4*4, 4, RGB (209,140,140)):Box (40/2+35,104, 4*4, 4, RGB (209,140,140)):Box (80/2+35,104, 4*4, 4, RGB (209,140,140))  
  Box (8/2+35,106, 4*2, 4, RGB (214,152,152)):Box (48/2+35,106, 4*2, 4, RGB (214,152,152)):Box (88/2+35,106, 4*2, 4, RGB (214,152,152)) 
 StopDrawing ()
CreateSprite3D ( #pb3D , #pb )


; support photon (support pour chaque barre d'énergie du ghost):
CreateSprite ( #sphoton ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #sphoton ))
  BackColor ( RGB (0,0,0))
   Box (0,0, 32, 20, RGB (255,255,255)):Box (2,2, 28, 16, RGB (55,25,25)) 
 StopDrawing ()
CreateSprite3D ( #sphoton3D , #sphoton )
; photon (barre d'énergie du ghost):
CreateSprite ( #photon ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #photon ))
  BackColor ( RGB (0,0,0))
   Box (2,2, 28, 16, RGB (255,0,0))  
    
 StopDrawing ()
CreateSprite3D ( #photon3D , #photon )



; ghost:
CreateSprite ( #ghost ,128,128, #PB_Sprite_Texture ) ; objet dirigé par le joueur.
 StartDrawing ( SpriteOutput ( #ghost ))
  BackColor ( RGB (0,0,0))
 
  Box (40,0, 8*4, 8, RGB (48,231,225))
 
  Box (24,8, 8*8, 8, RGB (64,233,227))
 
  Box (40,16, 8*4, 8, RGB (80,235,229)):Box (16,16, 8, 8, RGB (80,235,229)):Box (88,16, 8, 8, RGB (80,235,229))
  Box (24,16, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),16, 8*2, 8, RGB (255,255,255))
   
  Box (48,24, 8*2, 8, RGB (102,237,233)):Box (8,24, 8, 8, RGB (102,237,233)):Box (96,24, 8, 8, RGB (102,237,233)) 
  Box (16,24, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),24, 8*4, 8, RGB (255,255,255))
   
  Box (48,32, 8*2, 8, RGB (123,240,236)):Box (8,32, 8, 8, RGB (123,240,236)):Box (96,32, 8, 8, RGB (123,240,236)) 
  Box (16,32, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),32, 8*4, 8, RGB (255,255,255))
   
  Box (40,40, 8*4, 8, RGB (146,242,239)):Box (8,40, 8*2, 8, RGB (146,242,239)):Box (88,40, 8*2, 8, RGB (146,242,239))  
  Box (24,40, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),40, 8*2, 8, RGB (255,255,255))
 
  Box (0,48, 8*14, 8, RGB (168,245,242)) 
  Box (0,56, 8*14, 8, RGB (191,248,246)) 
  Box (0,64, 8*14, 8, RGB (211,250,249)) 
  Box (0,72, 8*14, 8, RGB (228,252,251)) 
  Box (0,80, 8*14, 8, RGB (238,253,252)) 
  Box (0,88, 8*14, 8, RGB (244,254,253))  
 
 StopDrawing ()
CreateSprite3D ( #ghost3D , #ghost )

; beauregard du ghost:
CreateSprite ( #oeil ,128,128, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #oeil ))
  BackColor ( RGB (0,0,0))
 
  Box (24,24, 16, 16, RGB (0,30,255)):Box (72,24, 16, 16, RGB (0,30,255))
     
 StopDrawing ()
CreateSprite3D ( #oeil3D , #oeil )

; drapA du ghost:
CreateSprite ( #drapA ,128,128, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #drapA ))
  BackColor ( RGB (0,0,0))
 
  Box (0,96, 8*2, 8, RGB (255,255,255)):Box (24,96, 8*3, 8, RGB (255,255,255))
  Box (64,96, 8*3, 8, RGB (255,255,255)) :Box (96,96, 8*2, 8, RGB (255,255,255)) 
  Box (0,104, 8, 8, RGB (255,255,255)):Box (32,104, 8*2, 8, RGB (255,255,255))
  Box (64,104, 8*2, 8, RGB (255,255,255)) :Box (104,104, 8, 8, RGB (255,255,255))
     
 StopDrawing ()
CreateSprite3D ( #drapA3D , #drapA )

; drapB du ghost:
CreateSprite ( #drapB ,128,128, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #drapB ))
  BackColor ( RGB (0,0,0))
 
  Box (0,96, 8*4, 8, RGB (255,255,255)):Box (40,96, 8*4, 8, RGB (255,255,255)):Box (80,96, 8*4, 8, RGB (255,255,255))  
  Box (8,104, 8*2, 8, RGB (255,255,255)):Box (48,104, 8*2, 8, RGB (255,255,255)):Box (88,104, 8*2, 8, RGB (255,255,255)) 
     
 StopDrawing ()
CreateSprite3D ( #drapB3D , #drapB )



; bonbon:
CreateSprite ( #bonbon ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #bonbon ))
  BackColor ( RGB (0,0,0))
  Circle(12,12, 12, RGB (251,161,194))  
  Circle(14,7, 4, RGB (255,201,230))
 StopDrawing ()
CreateSprite3D ( #bonbon3D , #bonbon )
; eonbon: ( e comme enveloppe)
CreateSprite ( #eonbon ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #eonbon ))
  BackColor ( RGB (0,0,0))
  Circle(16,16, 16, RGB (251,131,174))  
 StopDrawing ()
CreateSprite3D ( #eonbon3D , #eonbon )
; +10 --> chaque bonbon récolté rapporte, avec un ghost d'une taille<200, 10 points:
CreateSprite ( #pointA ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #pointA ))
  BackColor ( RGB (0,0,0))
  FrontColor ( RGB (255,255,255)):DrawText (0,0, "+10")
 StopDrawing ()
CreateSprite3D ( #pointA3D , #pointA )
; +100 --> chaque bonbon récolté rapporte, avec un ghost d'une taille=200, 100 points:
CreateSprite ( #pointB ,32,32, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #pointB ))
  BackColor ( RGB (0,0,0))
  FrontColor ( RGB (255,255,255)):DrawText (0,0, "+100")
 StopDrawing ()
CreateSprite3D ( #pointB3D , #pointB )

; elice:
CreateSprite ( #elice ,64,64, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #elice ))
  BackColor ( RGB (0,0,0))
  Circle(32,32, 32, RGB (255,236,0)):Circle(32,32, 31, RGB (255,200,0))
  Circle(32,32, 30, RGB (255,164,0)):Circle(32,32, 29, RGB (255,128,0))
  Circle(32,32, 28, RGB (255,92,0)):Circle(32,32, 27, RGB (255,7,0))
 StopDrawing ()
CreateSprite3D ( #elice3D , #elice )
; pale de l'elice:
CreateSprite ( #pic ,16,16, #PB_Sprite_Texture ) ; objet tournant autour du disque
 StartDrawing ( SpriteOutput ( #pic ))
  BackColor ( RGB (0,0,0))
    LineXY (0,1, 16,1, RGB (245,245,245))
    LineXY (16,1, 8,15, RGB (245,245,245))
    LineXY (8,15, 0,1, RGB (245,245,245))
    FillArea (8,4, RGB (245,245,245), RGB (245,245,245))  
 
 StopDrawing ()
CreateSprite3D ( #pic3D , #pic )

; repere ( utilisé uniquement par le programmeur):
CreateSprite ( #repere ,4,4, #PB_Sprite_Texture ) 
 StartDrawing ( SpriteOutput ( #repere ))
  BackColor ( RGB (0,0,0))
  Box (0,0, 4, 4, RGB (255,255,255)) 
 StopDrawing ()
CreateSprite3D ( #repere3D , #repere )


; grand ghost pour l'animé de l'intro:
CreateSprite ( #ghostB ,128,128, #PB_Sprite_Texture ) ; objet dirigé par le joueur.
 StartDrawing ( SpriteOutput ( #ghostB ))
  BackColor ( RGB (0,0,0))
 
  Box (40,0, 8*4, 8, RGB (255,8,23))
 
  Box (24,8, 8*8, 8, RGB (255,18,31))
 
  Box (40,16, 8*4, 8, RGB (255,29,42)):Box (16,16, 8, 8, RGB (255,29,42)):Box (88,16, 8, 8, RGB (255,29,42))
  Box (24,16, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),16, 8*2, 8, RGB (255,255,255))
   
  Box (48,24, 8*2, 8, RGB (255,43,55)):Box (8,24, 8, 8, RGB (255,43,55)):Box (96,24, 8, 8, RGB (255,43,55)) 
  Box (16,24, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),24, 8*4, 8, RGB (255,255,255))
   
  Box (48,32, 8*2, 8, RGB (255,58,70)):Box (8,32, 8, 8, RGB (255,58,70)):Box (96,32, 8, 8, RGB (255,58,70)) 
  Box (16,32, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),32, 8*4, 8, RGB (255,255,255))
   
  Box (40,40, 8*4, 8, RGB (255,75,86)):Box (8,40, 8*2, 8, RGB (255,75,86)):Box (88,40, 8*2, 8, RGB (255,75,86))  
  Box (24,40, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),40, 8*2, 8, RGB (255,255,255))
 
  Box (0,48, 8*14, 8, RGB (255,93,103)) 
  Box (0,56, 8*14, 8, RGB (255,113,121)) 
  Box (0,64, 8*14, 8, RGB (255,142,149)) 
  Box (0,72, 8*14, 8, RGB (255,176,181)) 
  Box (0,80, 8*14, 8, RGB (255,209,212)) 
  Box (0,88, 8*14, 8, RGB (255,238,239))      

 StopDrawing ()
CreateSprite3D ( #ghostB3D , #ghostB)
; fleche pour l'intro:
CreateSprite ( #fleche ,32,32, #PB_Sprite_Texture ) ; objet dirigé par le joueur.
 StartDrawing ( SpriteOutput ( #fleche ))
  BackColor ( RGB (0,0,0))
 

   LineXY (0,0, 16,0, RGB (250,250,250))  
   LineXY (16,0, 0,16, RGB (250,250,250))
   LineXY (0,16, 0,0, RGB (250,250,250))

   LineXY (12,6, 16,10, RGB (250,250,250))
   LineXY (16,10, 10,16, RGB (250,250,250))
   LineXY (5,11, 10,16, RGB (250,250,250))
         
 StopDrawing ()
CreateSprite3D ( #fleche3D , #fleche)
; flechf pour l'intro:
CreateSprite ( #flechf ,32,32, #PB_Sprite_Texture ) ; objet dirigé par le joueur si pointe bonbon.
 StartDrawing ( SpriteOutput ( #flechf ))
  BackColor ( RGB (0,0,0))
 

   LineXY (0,0, 16,0, RGB (255,6,59))  
   LineXY (16,0, 0,16, RGB (255,6,59))
   LineXY (0,16, 0,0, RGB (255,6,59))

   LineXY (12,6, 16,10, RGB (255,6,59))
   LineXY (16,10, 10,16, RGB (255,6,59))
   LineXY (5,11, 10,16, RGB (255,6,59))
         
 StopDrawing ()
CreateSprite3D ( #flechf3D , #flechf)
Global colonne
DataSection ; read et data : comment... ça marche ( pour le débutant qui débute depuis le début).
Data.l 2,4,5,8,11,12,14
Data.l 1,2,4,7,8,9,12,14,15
Data.l 1,2,4,5,8,11,12,14,15
Data.l 1,2,4,7,9,12,14,15
Data.l 1,2,4,7,8,9,12,14,15
Data.l 4,7,8,9,12
Data.l 2,3,4,5,8,11,12,13,14
EndDataSection

MouseLocate(512-6,600)
Global zutA,zutB,zutC

; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************


 ExamineMouse():ExamineKeyboard ()

If page=0:Fintro():EndIf

If page=1
    If MouseX ()>992-(gtaille/2):MouseLocate(992-(gtaille/2),testY):EndIf
    testX=MouseX ()
    If MouseY ()>704-(gtaille/2):MouseLocate(testX,704-(gtaille/2)):EndIf
 StartDrawing ( ScreenOutput ())
   AdresseMemoire = DrawingBuffer ()
     Box (512-132,384-72, 264, 264, RGB (241,202,202)) 
     Box (512-66,384-36, 132, 32, RGB (200,115,115))
     Box (512-66,384-22, 132, 3, RGB (164,21,21))

     Circle(512-94,536, 24, RGB (214,152,152))
     Circle(512-94,536, 23, RGB (200,115,115))
     Circle(512-94,536, 22, RGB (214,152,152))
     Circle(512-94,536, 21, RGB (241,202,202))

     Circle(512+94,536, 24, RGB (214,152,152))
     Circle(512+94,536, 23, RGB (200,115,115))
     Circle(512+94,536, 22, RGB (214,152,152))
     Circle(512+94,536, 21, RGB (241,202,202))
; logo pb:
LineXY (500, 495-50, 524, 500-50, RGB (200,115,115))  
LineXY (524, 500-50, 512, 512-50, RGB (200,115,115))
LineXY (512, 512-50, 524, 514-50, RGB (200,115,115))
LineXY (524, 514-50, 512, 526-50, RGB (200,115,115))
LineXY (512, 526-50, 500, 524-50, RGB (200,115,115))
LineXY (500, 524-50, 488, 536-50, RGB (200,115,115))
LineXY (488, 536-50, 524, 542-50, RGB (200,115,115))
LineXY (524, 542-50, 512, 554-50, RGB (200,115,115))  
; souris gauche:
LineXY (175, 400, 275, 400, RGB (200,115,115))
LineXY (275, 400, 275, 550, RGB (200,115,115))
LineXY (275, 550, 175, 550, RGB (200,115,115))
LineXY (175, 550, 175, 400, RGB (200,115,115))
     Box (180,405, 40, 50, RGB (164,21,21))
; souris droite:
LineXY (175+574, 400, 275+574, 400, RGB (200,115,115))
LineXY (275+574, 400, 275+574, 550, RGB (200,115,115))
LineXY (275+574, 550, 175+574, 550, RGB (200,115,115))
LineXY (175+574, 550, 175+574, 400, RGB (200,115,115))
     Box (180+574+51,405, 40, 50, RGB (164,21,21))
 ;StartDrawing ( ScreenOutput ())
 DrawingMode (1)
  
If KeyboardPushed ( #PB_Key_Right ):placemX+1:EndIf
If KeyboardPushed ( #PB_Key_Left ):placemX-1:EndIf
If KeyboardPushed ( #PB_Key_Down ):placemY+1:EndIf
If KeyboardPushed ( #PB_Key_Up ):placemY-1:EndIf

      FrontColor ( RGB (164,21,21)):DrawText (464,552, "FredStation360")
      FrontColor ( RGB (200,115,115))
      DrawText (154,360, "souris, bouton gauche."):DrawText (734,360, "souris, bouton droit.")     
      FrontColor ( RGB (241,202,202))

      DrawText (189,466, "transparent"):DrawText (780,466, "regime") 

    placemX$= Str (placemX)
;    DrawText (1,500, "X: " +placemX$) 
    placemY$= Str (placemY)
;    DrawText (1,520, "Y: " +placemY$) 

 StopDrawing ()

 Start3D ()
    DisplaySprite3D ( #pb3D , MouseX (), MouseY ()+40,255)
      ; Si joueur branche la cartouche, alors le jeu démarre:
      If MouseX ()>430 And MouseX ()<465
        If MouseY ()>180 And MouseY ()<210:page=2:score=0:EndIf
      EndIf
 Stop3D ()
EndIf

If page=2 ; ==============================================================================================

 If niveau<21:Tniveau+1:EndIf
 If Tniveau>600:Tniveau=0:niveau+1:EndIf ; chaque niveau dure 10 secondes.

    Start3D () 

; fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
; fabrication du fond ( sous forme de bloc): 
 If nbrefond<1:nbrefond+1:Fclonebfond():EndIf 
 
;- Affichage clone fondbloc si existe:
 ForEach bfond()

   ;DisplaySprite3D ( bfond()\id , bfond()\x, bfond()\Y, 255)  
 DisplayTransparentSprite( bfond()\id , bfond()\x, bfond()\Y)  
 Next 
   
      

;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
; fabrique de bonbon:
 If ghostaie<2:tempoA+1:EndIf
 If tempoA>150:tempoA=0:Fcloneb():EndIf ; >150

  ;Tbonzoom+1 ; j'essai des trucs... là j'ai désactivé, mais j'le garde sous l'coude.
  ;If Tbonzoom>10:Tbonzoom=0:bonzoom+2:EndIf
  ;If bonzoom=6:bonzoom=0:EndIf

; Affichage clone bonbon si existe.
 ForEach bonbon()

   If bonbon()\attract=0; Si ghost n'est pas à proximité d'un bonbon, alors ce dernier continu son chemin.
    bonbon()\x=bonbon()\x+bonbon()\sensx 
    bonbon()\Y=bonbon()\Y+bonbon()\sensy 
   EndIf
            
            
            ;ZoomSprite3D(#eonbon3D, 32+bonzoom, 32-bonzoom) ; 32, 32)  
   DisplaySprite3D ( bonbon()\id , bonbon()\x, bonbon()\Y, 255)
   DisplaySprite3D ( #eonbon3D , bonbon()\x-4, bonbon()\Y-4, 105) 
   zattract=(30+10)
   If gtaille>80:zattract=(60+20):EndIf
   If gtaille>120:zattract=(90+30):EndIf
   If gtaille>160:zattract=(120+40):EndIf   
        
   bonbon()\attract=0; remise à 0 variable attraction
  
   If bonbon()\x+8>repereX-zattract And bonbon()\x+8<repereX+zattract And ghostaie<2   
    If bonbon()\Y+8>repereY-zattract And bonbon()\Y+8<repereY+zattract
     bonbon()\attract=1
     If bonbon()\x+8>repereX
      bonbon()\x-4
     Else
      bonbon()\x+4    
     EndIf
     If bonbon()\Y+8>repereY
      bonbon()\Y-4
     Else
      bonbon()\Y+4    
     EndIf
     
     If bonbon()\x+8>repereX-10-(zattract/10) And bonbon()\x+8<repereX+10+(zattract/10)    
      If bonbon()\Y+8>repereY-10-(zattract/10)  And bonbon()\Y+8<repereY+10+(zattract/10)
       mange=1:pointd=1:pointm=0:pointt=255:pointg=gtaille:pointn=niveau:pointX=bonbon()\x+8:pointY=bonbon()\Y+8
      EndIf
     EndIf
    EndIf 
   EndIf
     
  ; Si un clone sort de l'écran, alors il faut le supprimer, mais...
  If  bonbon()\x>1024+128 Or bonbon()\x<0-128 Or bonbon()\Y>768+128 Or bonbon()\Y<0-128
   supprbonbon=1 ; ...soyons prudent...
  EndIf
   ; si ghost mange bonbon, alors...
   If mange=1 And ghostaie<2:supprbonbon=1:EndIf ; ...très prudent...
   
   If supprbonbon=1
     supprbonbon=0
     DeleteElement(bonbon()):LastElement(bonbon()); <- ...car ces 2 là, faut pas en mettre partout.
      If mange=1
      
        If energie<20:energie+1:EndIf   
        If gtaille<200:gtaille+10:EndIf  
      
        If gtaille<200:score+(10*niveau):EndIf
        If gtaille=200:score+(100*niveau):EndIf
      
        mange=0
      EndIf 
   EndIf   

 
    
 Next
;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
; plein de variables, afin  d'afficher les points engrangé par le joueur( proportionnel au niveau atteind): 
    If pointd=1; d comme départ d'un affichage de point

        For t=1 To pointn ; n comme niveau, le nbre de point est proportionel au nombre de niveau atteind.
         If pointg<200
          ZoomSprite3D(#pointA3D, 50,50)
          DisplaySprite3D ( #pointA3D , pointX, pointY-(t*20),pointt)
         EndIf 
         If pointg=200 ; g comme géant ( =gtaille au moment précis où le ghost mange le bonbon).
          ZoomSprite3D(#pointB3D, 75,75)
          DisplaySprite3D ( #pointB3D , pointX, pointY-(t*30),pointt)
         EndIf
        Next  
          
          
      If pointm<100 ; m comme mouvoir: s'élève dans le ciel tout en disparaissant, triste hein ?
        pointm+1:pointY-2:pointt-2
        If pointm=100:pointm=0:pointd=0:EndIf
      EndIf
    EndIf
;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee    
; fabrique d'elice:

 If ghostaie<2:tempoB+1:EndIf
 If (niveau<6 And tempoB>125) Or (niveau>5 And tempoB>100) Or (niveau>9 And tempoB>75) 
   tempoB=0:Fclonee()
 EndIf    
 If (niveau>13 And tempoB>50) Or (niveau>17 And tempoB>40)
   tempoB=0:Fclonee()
 EndIf 

 tourne-niveau
 If tourne<-360:tourne=0:EndIf
 tourne2-niveau
 If tourne2<-360:tourne2=0:EndIf 
 
 tournf+niveau
 If tournf>360:tournf=0:EndIf
 tournf2+niveau
 If tournf2>360:tournf2=0:EndIf 
 
 ; Affichage clone elice si existe.
 ForEach elice()
 zutB+1
   elice()\x=elice()\x+elice()\sensx ; fait avancer les elices
   elice()\Y=elice()\Y+elice()\sensy 
      
   ; +24= position par rapport à l'elice ; +40 diamètre de la rotation de pic.

  If elice()\sr=0
   RotateSprite3D(#pic3D, -tourne, 0)
   DisplaySprite3D ( #pic3D , elice()\x+24+40*Sin(tourne*0.0174532925), elice()\Y+24+40*Cos(tourne*0.0174532925),255)
   RotateSprite3D(#pic3D, -tourne2, 0)
   DisplaySprite3D ( #pic3D , elice()\x+24+40*Sin(tourne2*0.0174532925), elice()\Y+24+40*Cos(tourne2*0.0174532925),255)
  EndIf
  If elice()\sr=1
   RotateSprite3D(#pic3D, -tournf, 0)
   DisplaySprite3D ( #pic3D , elice()\x+24+40*Sin(tournf*0.0174532925), elice()\Y+24+40*Cos(tournf*0.0174532925),255)
   RotateSprite3D(#pic3D, -tournf2, 0)
   DisplaySprite3D ( #pic3D , elice()\x+24+40*Sin(tournf2*0.0174532925), elice()\Y+24+40*Cos(tournf2*0.0174532925),255)
  EndIf
      
   DisplaySprite3D ( elice()\id , elice()\x, elice()\Y, 255)
   
   ; test collision ( à l'ancienne) avec ghost, accrochez-vous bien:
   
   ;DisplaySprite3D ( #repere3D , elice()\x+64, elice()\y, 255) ; uniquement utilisé par le codeur.

If ghostaie<2  
  If gtaille>40  
   If (repereX+20>elice()\x And repereX+20<(elice()\x)+64) Or (repereX-20>elice()\x And repereX-20<(elice()\x)+64) 
    If (repereY+20>elice()\Y And repereY+20<(elice()\Y)+64) Or (repereY-20>elice()\Y And repereY-20<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
  EndIf  
  ; heu, oui, là, je vous l'accorde, c'est aussi fastidieu à lire, qu'à mettre au point...et ça continu:    
  If gtaille>80  
   If (repereX+40>elice()\x And repereX+40<(elice()\x)+64) Or (repereX-40>elice()\x And repereX-40<(elice()\x)+64) 
    If (repereY+40>elice()\Y And repereY+40<(elice()\Y)+64) Or (repereY-40>elice()\Y And repereY-40<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf

   If repereX>elice()\x And repereX<(elice()\x)+64 
    If (repereY+40>elice()\Y And repereY+40<(elice()\Y)+64) Or (repereY-40>elice()\Y And repereY-40<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
   
   If (repereX+40>elice()\x And repereX+40<(elice()\x)+64) Or (repereX-40>elice()\x And repereX-40<(elice()\x)+64) 
    If repereY>elice()\Y And repereY<(elice()\Y)+64
     ghostaie=1    
    EndIf
   EndIf   
  EndIf     
         
  If gtaille>120  
   If (repereX+60>elice()\x And repereX+60<(elice()\x)+64) Or (repereX-60>elice()\x And repereX-60<(elice()\x)+64) 
    If (repereY+60>elice()\Y And repereY+60<(elice()\Y)+64) Or (repereY-60>elice()\Y And repereY-60<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
   
   If repereX>elice()\x And repereX<(elice()\x)+64 
    If (repereY+60>elice()\Y And repereY+60<(elice()\Y)+64) Or (repereY-60>elice()\Y And repereY-60<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
   
   If (repereX+60>elice()\x And repereX+60<(elice()\x)+64) Or (repereX-60>elice()\x And repereX-60<(elice()\x)+64) 
    If repereY>elice()\Y And repereY<(elice()\Y)+64
     ghostaie=1    
    EndIf
   EndIf
  EndIf

  If gtaille>160  
   If (repereX+80>elice()\x And repereX+80<(elice()\x)+64) Or (repereX-80>elice()\x And repereX-80<(elice()\x)+64) 
    If (repereY+80>elice()\Y And repereY+80<(elice()\Y)+64) Or (repereY-80>elice()\Y And repereY-80<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
 
   If (repereX+80>elice()\x And repereX+80<(elice()\x)+64) Or (repereX-80>elice()\x And repereX-80<(elice()\x)+64) 
    If (repereY+40>elice()\Y And repereY+40<(elice()\Y)+64) Or (repereY-40>elice()\Y And repereY-40<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
  
   If (repereX+40>elice()\x And repereX+40<(elice()\x)+64) Or (repereX-40>elice()\x And repereX-40<(elice()\x)+64) 
    If (repereY+80>elice()\Y And repereY+80<(elice()\Y)+64) Or (repereY-80>elice()\Y And repereY-80<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
   
   If repereX>elice()\x And repereX<(elice()\x)+64 
    If (repereY+80>elice()\Y And repereY+80<(elice()\Y)+64) Or (repereY-80>elice()\Y And repereY-80<(elice()\Y)+64)
     ghostaie=1    
    EndIf
   EndIf
   
   If (repereX+80>elice()\x And repereX+80<(elice()\x)+64) Or (repereX-80>elice()\x And repereX-80<(elice()\x)+64) 
    If repereY>elice()\Y And repereY<(elice()\Y)+64 
     ghostaie=1    
    EndIf
   EndIf
  EndIf ; If gtaille>160 
EndIf   

  ; Si un clone sort de l'écran, alors il faut le supprimer:
;If (elice()\sensy>0 And elice()\Y>768+64) Or (elice()\sensy<0 And elice()\Y<-64) Or
;(elice()\sensx<0 And elice()\x<-64) Or (elice()\sensx>0 And elice()\x>1024+64)
;DeleteElement(elice()):NextElement(elice())
;EndIf
; ça rentre pas dans le forum, bon ben faut que je m'adapte alors :
 elice()\attract=0 
 If (elice()\sensy>0 And elice()\Y>768+64) Or (elice()\sensy<0 And elice()\Y<-64):elice()\attract=1:EndIf
 If (elice()\sensx<0 And elice()\x<-64) Or (elice()\sensx>0 And elice()\x>1024+64):elice()\attract=1:EndIf
 If elice()\attract=1:DeleteElement(elice()):NextElement(elice()):EndIf

  
 Next

If ghostv<200 And ghostaie<2:ghostaie=0:EndIf ; Si ghost transparent, alors il faut annuler l'ordre de gameover.

;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

; GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG        GHOST        GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG     

    
 If ghostaie=0:Fghost():EndIf ; ghost que l'on déplace fébrilement à la souris.
 If ghostaie>0 ; game over.
  ghostaie=2
  gtaille+2
  If ghostv>85:ghostv-2:EndIf
  ZoomSprite3D(#ghost3D, gtaille,gtaille)      
  DisplaySprite3D ( #ghost3D , testX, testY,ghostv)

    ZoomSprite3D(#oeil3D, gtaille,gtaille) 
    DisplaySprite3D ( #oeil3D , testX, testY,ghostv)
    ; Animation du drap du fantome
    animdrap+1 
    If animdrap=21:animdrap=1:EndIf
    If animdrap<11 
      ZoomSprite3D(#drapA3D, gtaille,gtaille)    
      DisplaySprite3D ( #drapA3D , testX, testY,ghostv)    
    EndIf
    If animdrap>10
      ZoomSprite3D(#drapB3D, gtaille,gtaille)
      DisplaySprite3D ( #drapB3D , testX, testY,ghostv)    
    EndIf
    
  If gtaille>400:page=3:Freset():EndIf

 EndIf

; GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG    


 Ftestcodeur()

    ; support barre d'énergie.
    For a=0 To 19
     DisplaySprite3D(#sphoton3D, 16, 728-32-(a*32)) 
    Next 
    ; barre d'énergie:
    For t=1 To energie  
      DisplaySprite3D ( #photon3D , 16, 728-(t*32), 255)    
    Next
    
  Freset()      
   
     Stop3D ()

EndIf ; il s'agit du Endif de "If page=2" ==============================================================================


If page>0 And ghostaie=0:testX=MouseX ():testY=MouseY ():EndIf


 ; ligne de test afin de connaître la valeur des variables:    
 StartDrawing ( ScreenOutput ())
 DrawingMode (1)
 FrontColor ( RGB (255,255,255))    
    ghostv$= Str (ghostv)    
    tempoB$= Str (tempoB)
    testX$= Str (testX)
    testY$= Str (testY)
    page$= Str (page)
    
    niveau$= Str (niveau)
    score$= Str (score)

    gtaille$= Str (gtaille)
    ghostaie$= Str (ghostaie)

    tourne$= Str (tourne)    
    pointd$= Str (pointd)    
    eli_sensrot$= Str (eli_sensrot) 
    zutA$= Str (zutA)
    zutB$= Str (zutB) 
    zutC$= Str (zutC)    
    ybonbon$= Str (ybonbon)
;    DrawText (50,1+20, "ghostv: " +ghostv$)
;    DrawText (50,1+40, "tempoB: " +tempoB$)    
;    DrawText (50,1+60, "testX: " +testX$)
;    DrawText (50,1+80, "testY: " +testY$)
;    DrawText (50,1+100, "page: " +page$)
;    DrawText (50,1+120, "gtaille: " +gtaille$)
;    DrawText (50,1+160, "ghostaie: " +ghostaie$)
;    DrawText (50,1+180, "tourne: " +tourne$)   
;    DrawText (50,1+200, "pointd: " +pointd$)
;    DrawText (50,1+220, "eli_sensrot: " +eli_sensrot$)        
;    DrawText (50,1+260, "zutA: " +zutA$);:zutA=0    
;    DrawText (50,1+280, "zutB: " +zutB$):zutB=0 
;    DrawText (50,1+300, "zutC: " +zutC$);:zutC=0
;    DrawText (50,1+340, "ybonbon: " +ybonbon$)      
  If page=2
    If niveau>9
     FrontColor ( RGB (164,21,21)) :DrawText (450+1,750+1, "NIVEAU: " +niveau$)
     FrontColor ( RGB (253,201,255)) :DrawText (450,750, "NIVEAU: " +niveau$)
    EndIf 
    If niveau<10
     FrontColor ( RGB (164,21,21)) :DrawText (450+1,750+1, "NIVEAU:   " +niveau$)
     FrontColor ( RGB (253,201,255)) :DrawText (450,750, "NIVEAU:   "+niveau$)
    EndIf
    If niveau=21
     FrontColor ( RGB (164,21,21)) :DrawText (400+1,720+1, "C'est bien toi le meilleur !")
     FrontColor ( RGB (253,201,255)) :DrawText (400,720, "C'est bien toi le meilleur !")
    EndIf    
  EndIf    
  If page>0
     FrontColor ( RGB (154,154,154)) :DrawText (450+1,1+1, "SCORE:   " +score$)
     FrontColor ( RGB (224,224,224)) :DrawText (450,1, "SCORE:   "+score$)
  EndIf

 StopDrawing ()
 If KeyboardPushed ( #PB_Key_F ) And nbreis=0:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F )=0 And nbreis=1:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F ) And nbreis=2:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F )=0 And nbreis=3:nbreis=0:EndIf

         Gosub fps ; nombre d'image par seconde ( à placer dans tout vos jolis programmes, jeune étourdis !)
    ;FlipBuffers (60)
    FlipBuffers ()
    ClearScreen ( RGB (0,0,0))     
; ******************************************************************************************************     
Until KeyboardPushed ( #PB_Key_Escape ): End ; fin de la boucle principale (appuyez sur la touche Esc)
; ******************************************************************************************************   

fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek ; regardez pas là, c'est trop compliqué. Arrêtez j'vous dis! Bon ben, je
     ; vous aurez prévenu...
    fps+1
Else
    FPS$= Str (fps)
    fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
If nbreis=1 Or nbreis=2:DrawText (1,1, "FPS: " +FPS$):EndIf
StopDrawing ()
Return

; ***********************************************************************************************
; ********************************* ici commence les procedures *********************************
; ***********************************************************************************************
Procedure Fclonebfond()
; placement clone fond sous forme de simple bloc:

 For t=1 To 7; ligne 2
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64
 Next
 For t=1 To 9; ligne 3
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*3
 Next
 For t=1 To 9; ligne 4
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*4
 Next
 For t=1 To 8; ligne 5
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*6
 Next
 For t=1 To 9; ligne 6
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*7
 Next
 For t=1 To 5; ligne 7
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*9
 Next
 For t=1 To 9; ligne 8
     Read colonne
         LastElement(bfond()) 
         AddElement(bfond())
         bfond()\id=#fondA;3D         
  bfond()\x=colonne*64:bfond()\Y=64*10
 Next

EndProcedure 
Procedure Fcloneb() ; bonbon 32*32

 
         LastElement(bonbon()) 
         AddElement(bonbon())
         bonbon()\id=#bonbon3D         

; placement et sens de deplacement du bonbon:
If MouseX ()<448:bonbon()\x=1024+32:bonbon()\sensx=-2:EndIf
If MouseX ()>447:bonbon()\x=0-32:bonbon()\sensx=2:EndIf

If MouseY ()<320:bonbon()\Y=768+32:bonbon()\sensy=-2:EndIf
If MouseY ()>319:bonbon()\Y=0-32:bonbon()\sensy=2:EndIf

EndProcedure
 
Procedure Fclonee() ; elice 64*64

         LastElement(elice()) 
         AddElement(elice())
         elice()\id=#elice3D         

; placement et sens de deplacement de l'elice:
If eli_sensrot=0
 eli_bord+1; décide de quel bord de l'écran surgira le prochain clone elice.
 If eli_bord=5:eli_bord=1:eli_choix+1:EndIf
EndIf
If eli_sensrot=1
 eli_bord-1; décide de quel bord de l'écran surgira le prochain clone elice.
 If eli_bord=0:eli_bord=4:eli_choix+1:EndIf
EndIf

If eli_choix=2
 eli_choix=0:eli_sensrot=Random(1):elice()\sr=eli_sensrot
EndIf

 
 If eli_bord=1 ; de haut en bas:
   If gtaille<90:elice()\x=MouseX ()-10:EndIf
   If gtaille>80 And gtaille<130:elice()\x=MouseX ()+10:EndIf
   If gtaille>120 And gtaille<170:elice()\x=MouseX ()+20:EndIf
   If gtaille>160:elice()\x=MouseX ()+30:EndIf
   
   elice()\Y=-64:elice()\sensy=1
   If niveau>1:elice()\sensy=2:EndIf
   If niveau>5:elice()\sensy=3:EndIf
   If niveau>9:elice()\sensy=4:EndIf
   If niveau>13:elice()\sensy=5:EndIf
   If niveau>17:elice()\sensy=6:EndIf
 EndIf

 If eli_bord=2 ; droite à gauche:
   If gtaille<90:elice()\Y=MouseY ()+30:EndIf
   If gtaille>80 And gtaille<130:elice()\Y=MouseY ()+40:EndIf
   If gtaille>120 And gtaille<170:elice()\Y=MouseY ()+50:EndIf
   If gtaille>160:elice()\Y=MouseY ()+60:EndIf  
  
   elice()\x=1024:elice()\sensx=-1
   If niveau>2:elice()\sensx=-2:EndIf  
   If niveau>6:elice()\sensx=-3:EndIf 
   If niveau>10:elice()\sensx=-4:EndIf
   If niveau>14:elice()\sensx=-5:EndIf
   If niveau>18:elice()\sensx=-6:EndIf
 EndIf

 If eli_bord=3 ; bas en haut:
   If gtaille<90:elice()\x=MouseX ()-10:EndIf
   If gtaille>80 And gtaille<130:elice()\x=MouseX ()+10:EndIf
   If gtaille>120 And gtaille<170:elice()\x=MouseX ()+20:EndIf
   If gtaille>160:elice()\x=MouseX ()+30:EndIf
  
   elice()\Y=768:elice()\sensy=-1
   If niveau>3:elice()\sensy=-2:EndIf  
   If niveau>7:elice()\sensy=-3:EndIf
   If niveau>11:elice()\sensy=-4:EndIf
   If niveau>15:elice()\sensy=-5:EndIf
   If niveau>19:elice()\sensy=-6:EndIf
 EndIf

 If eli_bord=4 ; gauche à droite:
   If gtaille<90:elice()\Y=MouseY ()+30:EndIf
   If gtaille>80 And gtaille<130:elice()\Y=MouseY ()+40:EndIf
   If gtaille>120 And gtaille<170:elice()\Y=MouseY ()+50:EndIf
   If gtaille>160:elice()\Y=MouseY ()+60:EndIf 
  
   elice()\x=-64:elice()\sensx=1
   If niveau>4:elice()\sensx=2:EndIf  
   If niveau>8:elice()\sensx=3:EndIf 
   If niveau>12:elice()\sensx=4:EndIf 
   If niveau>16:elice()\sensx=5:EndIf
   If niveau>20:elice()\sensx=6:EndIf
 EndIf

EndProcedure 

Procedure Fghost()
    If MouseX ()>992-(gtaille/2):MouseLocate(992-(gtaille/2),testY):EndIf
    testX=MouseX ()
    If MouseY ()>704-(gtaille/2):MouseLocate(testX,704-(gtaille/2)):EndIf

    ghostv=210
    If energie>0 And MouseButton(1) ; Si joueur appui sur bouton gauche, alors transparence du ghost = invulnérable.
      ghostv=100
      Tenergie+1
      If Tenergie>8
        Tenergie=0:energid+1
      EndIf  
    EndIf
    
    If energie>0 And MouseButton(2) ; Si joueur appui sur bouton droite, alors ghost maigri.
      
      Tenergie+1
      If Tenergie>8
        Tenergie=0
        If gtaille>50:energid+1:gtaille-10:EndIf
      EndIf  
    EndIf 
    
    If energid>1:energid=0:energie-1:EndIf

    ; corps du ghost: 
    ZoomSprite3D(#ghost3D, gtaille,gtaille)      
    DisplaySprite3D ( #ghost3D , MouseX (), MouseY ()+40,ghostv)

    ; yeux du ghost:
    ZoomSprite3D(#oeil3D, gtaille,gtaille)
    possx=MouseX ()
    If memsx<possx:possx+4:EndIf      
    If memsx>possx:possx-4:EndIf
    DisplaySprite3D ( #oeil3D , possx, MouseY ()+40,ghostv)
    memsx=MouseX ()
       
    ; Animation du drap du fantôme ( ghost en anglais):
    animdrap+1 
    If animdrap=15
      animdrap=0
    EndIf
    If animdrap<8 
      ZoomSprite3D(#drapA3D, gtaille,gtaille)    
      DisplaySprite3D ( #drapA3D , MouseX (), MouseY ()+40,ghostv)    
    EndIf
    If animdrap>7
      ZoomSprite3D(#drapB3D, gtaille,gtaille)
      DisplaySprite3D ( #drapB3D , MouseX (), MouseY ()+40,ghostv)    
    EndIf

EndProcedure 

Procedure Freset() ; remise à 0
  If KeyboardPushed ( #PB_Key_R ) Or page=3 ; RESET (retour écran intro)
   MouseLocate(512-6,600)
   page=0:niveau=1:Tniveau=0:tempoA=0:tempoB=0:mange=0   
   ghostaie=0:animdrap=0:ghostv=255:energie=20:Tenergie=0:gtaille=50 
   eli_bord=0:eli_choix=0:eli_sensrot=0:eli_bord=0
   ; supprime clone bonbon si existe.
   ForEach bonbon()
      FirstElement(bonbon())
      DeleteElement(bonbon())
   Next
   ; supprime clone elice si existe.
   ForEach elice() 
      FirstElement(elice())
      DeleteElement(elice())
   Next   
     
  EndIf
EndProcedure

Procedure Ftestcodeur()

 ;ghost 128*128
If gtaille=50 Or gtaille=60 Or gtaille=70 Or gtaille=80
 repereX=((MouseX () )+6)+(gtaille/3) 
 repereY=((MouseY ()+40 )+6)+(gtaille/3)

repereX=repereX-2:repereY=repereY-2 
;    DisplaySprite3D ( #repere3D , repereX-20, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX+20, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY-20, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY+20, 255) 
 
EndIf
If gtaille=90 Or gtaille=100 Or gtaille=110 Or gtaille=120
 repereX=((MouseX () )+10)+(gtaille/3) 
 repereY=((MouseY ()+40 )+12)+(gtaille/3)

repereX=repereX-2:repereY=repereY-2 
;    DisplaySprite3D ( #repere3D , repereX-40, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX+40, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY-40, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY+40, 255) 
 
EndIf
If gtaille=130 Or gtaille=140 Or gtaille=150 Or gtaille=160
 repereX=((MouseX () )+16)+(gtaille/3) 
 repereY=((MouseY ()+40 )+16)+(gtaille/3)

repereX=repereX-2:repereY=repereY-2 
;    DisplaySprite3D ( #repere3D , repereX-60, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX+60, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY-60, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY+60, 255) 
 
EndIf
If gtaille=170 Or gtaille=180 Or gtaille=190 Or gtaille=200
 repereX=((MouseX () )+22)+(gtaille/3) 
 repereY=((MouseY ()+40 )+18)+(gtaille/3)

repereX=repereX-2:repereY=repereY-2 
;    DisplaySprite3D ( #repere3D , repereX-80, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX+80, repereY, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY-80, 255)
;    DisplaySprite3D ( #repere3D , repereX, repereY+80, 255) 
 
EndIf

;    DisplaySprite3D ( #repere3D , repereX, repereY, 255)
EndProcedure

Procedure Fintro()
 StartDrawing ( ScreenOutput ())
   AdresseMemoire = DrawingBuffer ()
 DrawingMode (1)
If KeyboardPushed ( #PB_Key_Right ):placemX+1:EndIf
If KeyboardPushed ( #PB_Key_Left ):placemX-1:EndIf
If KeyboardPushed ( #PB_Key_Down ):placemY+1:EndIf
If KeyboardPushed ( #PB_Key_Up ):placemY-1:EndIf

      FrontColor ( RGB (18,114,111))
      DrawText (350+1,650+1, "Auteur:  H. Philippe - Toulouse - France - pseudo:  beauregard")
      FrontColor ( RGB (35,219,212))
      DrawText (350,650, "Auteur:  H. Philippe - Toulouse - France - pseudo:  beauregard")
      FrontColor ( RGB (18,114,111))      
      DrawText (300+1,675+1, "ma devise: Le jeu vidéo, c'est du contenu, avec plus ou moins de contenant.")
      FrontColor ( RGB (35,219,212))
      DrawText (300,675, "ma devise: Le jeu vidéo, c'est du contenu, avec plus ou moins de contenant.")      
      FrontColor ( RGB (154,154,154))
      DrawText (255+1,700+1, "Co-Auteur: ")
      FrontColor ( RGB (224,224,224))
      DrawText (255,700, "Co-Auteur: ")
    placemX$= Str (placemX)
;    DrawText (1,500, "X: " +placemX$) 
    placemY$= Str (placemY)
;    DrawText (1,520, "Y: " +placemY$) 
 StopDrawing ()
 Start3D ()
     ;zutA=gposX
     ;zutB=etapeanim
     ;zutC=etanT  
 ; ********************** animé ( codé sans grande inteligence): **********************
     d1fleche=0
    If etapeanim<2 Or (etapeanim>5 And etapeanim<8) Or (etapeanim=8 And etanT<65)
     If ybonbon<530:ybonbon+4:EndIf
     DisplaySprite3D ( #bonbon3D , 496, ybonbon, 255)
     If MouseX ()>496-8 And MouseX ()<496+24
      If MouseY ()>ybonbon-8 And MouseY ()<ybonbon+24
      d1fleche=1
      EndIf
     EndIf 
    EndIf
  If etapeanim=0;
    testX=1024+50:testY=520:gtaille=50:gposX=1024:gposY=520-44:ybonbon=-64
    etanT+1
    If etanT>150:etanT=0:etapeanim=1:EndIf
  EndIf
  If etapeanim=1 ; ghost se dirige vers le bonbon
    testX-4
    If testX<502
    pointd=1:pointm=0:pointt=255:pointg=gtaille
    pointn=1:pointX=496+8:pointY=530+8
    etapeanim=2
    EndIf
  EndIf
  If etapeanim=2 ; ghost se dirige vers la sortie...
    testX-4
    If testX<300:etapeanim=3:EndIf ;... et remarque la présence du joueur !
  EndIf  
  If etapeanim=3 ; il revient de quelque pas afin de bien voir...
    etanT+1; il regarde le joueur quelques instand,
    If etanT>30:testX+4:EndIf; puis reviens un peu sur ces pas...
    If testX>355:etanT=0:etapeanim=4:EndIf ;... et panique !
  EndIf    
  If etapeanim=4 
    etanT+1; il regarde plus longuement
    If etanT>45
      If testX>-64:testX-8:EndIf
    EndIf ;... et c'est la panique !   
    If testX<-32 And etanT=150:etanT=0:etapeanim=5:EndIf
  EndIf    
  If etapeanim=5 ; le grand ghost arrive doucement
    etanT+1
    If etanT>30 And etanT<60:testX+4:EndIf
    If etanT>80 And etanT<100:testX-8:EndIf
    If gposX>1024-44 And etanT>99:gposX-1:EndIf 
    If etanT>200:etanT=0:ybonbon=0:etapeanim=6:EndIf
  EndIf 
  If etapeanim=6 ; regarde le bonbon tomber
    gposX-1
    If etanT<50:etanT+1:EndIf   
    If etanT=50 And ybonbon>529:etanT=0:etapeanim=7:EndIf
  EndIf 
  If etapeanim=7 ; 
    If etanT<50:etanT+1:EndIf   
    If etanT=50:etanT=0:etapeanim=8:EndIf
  EndIf 
  If etapeanim=8 ;
   If gposX>612
    gposX-3:testX+4 ; les 2 fantomes se s'approchent du 2ème bonbon...
   EndIf 
   If gposX<613 And etanT<25
    etanT+1:testX+1
   EndIf
   If gposX<613 And etanT>24 And etanT<34; le grand fait savoir qui est le chef
    etanT+1:gposX-6:testX+1 
   EndIf
   If etanT>29 And testX>-64:testX-8:EndIf ; le petit ghost prend peur et fuit à toute vitesse.
   If etanT>33 ;le grand s'empare du bonbon
     If etanT<64:etanT+1:EndIf
     If etanT=64:gposX-3:EndIf
    If gposX<502-32 And pointd=0 And etanT<65
     pointd=1:pointm=0:pointt=255:pointg=200
     pointn=1:pointX=496+8:pointY=530+8
     ybonbon=-64:etanT=65 
    EndIf     
   EndIf
   If etanT=65
     gposX-3
     If gposX<-128:etanT=66:EndIf
   EndIf
   If etanT>65:etanT+1:EndIf
   If etanT>80 ;fin animé
    testX=1024+50:testY=520:gtaille=50:gposX=1024:gposY=520-44     
    etanT=0:etapeanim=0:ybonbon=-64
   EndIf
  EndIf 

  ZoomSprite3D(#ghost3D, gtaille,gtaille)  
  DisplaySprite3D ( #ghost3D , testX, testY, 210)

    ; yeux du ghost:
    ZoomSprite3D(#oeil3D, gtaille,gtaille)
    possx=testX
    If memsx<possx:possx+4:EndIf      
    If memsx>possx:possx-4:EndIf
    DisplaySprite3D ( #oeil3D , possx, testY,ghostv)
    memsx=testX
       
  
    ; Animation du drap du fantome
    animdrap+1 
    If animdrap=21:animdrap=1:EndIf
    If animdrap<11 
      ZoomSprite3D(#drapA3D, gtaille,gtaille)    
      DisplaySprite3D ( #drapA3D , testX, testY, 210)
      
        ZoomSprite3D(#ghostB3D, 100,100):DisplaySprite3D ( #ghostB3D , gposX, gposY, 210)
        ZoomSprite3D(#drapA3D, 100,100):DisplaySprite3D ( #drapA3D , gposX, gposY, 210)    
    EndIf
    If animdrap>10
      ZoomSprite3D(#drapB3D, gtaille,gtaille)
      DisplaySprite3D ( #drapB3D , testX, testY, 210)
      
          ZoomSprite3D(#ghostB3D, 100,100):DisplaySprite3D ( #ghostB3D , gposX, gposY, 210)
          ZoomSprite3D(#drapB3D, 100,100):DisplaySprite3D ( #drapB3D , gposX, gposY, 210) 
    EndIf     
     
      ; yeux du grand fantome:
      If etapeanim=5 Or etapeanim=7; regarde le joueur en face:
        ZoomSprite3D(#oeil3D, 100,100)
        DisplaySprite3D ( #oeil3D , gposX, gposY,ghostv)   
      EndIf
      If etapeanim=6 Or etapeanim=8; regarde à gauche:
        ZoomSprite3D(#oeil3D, 100,100)
        DisplaySprite3D ( #oeil3D , gposX-4, gposY,ghostv)   
      EndIf

    If pointd=1; d comme départ d'un affichage de point

        For t=1 To pointn ; n comme niveau, le nbre de point est proportionel au nombre de niveau atteind.
         If pointg<200
          ZoomSprite3D(#pointA3D, 50,50)
          DisplaySprite3D ( #pointA3D , pointX, pointY-(t*20),pointt)
         EndIf 
         If pointg=200 ; g comme géant ( =gtaille au moment précis où le ghost mange le bonbon).
          ZoomSprite3D(#pointB3D, 75,75)
          DisplaySprite3D ( #pointB3D , pointX, pointY-(t*30),pointt)
         EndIf
        Next  

      If pointm<100 ; m comme mouvoir: s'élève dans le ciel tout en disparaissant, triste hein ?
        pointm+1
        pointY-2
        pointt-2
        If pointm=100:pointm=0:pointd=0:EndIf
      EndIf
    EndIf
        If d1fleche=0:DisplaySprite3D ( #fleche3D , MouseX (), MouseY (), 255):EndIf
        If d1fleche=1
          DisplaySprite3D ( #flechf3D , MouseX (), MouseY (), 255)
          If MouseButton(1)
            testX=1024+50:testY=520:gtaille=50:gposX=1024:gposY=520-44     
            etanT=0:etapeanim=0:ybonbon=-64
            tourne=0:tourne2=-180:page=1:MouseLocate(449,62)          
          EndIf
        EndIf
; titre
If page=0        
 tourne-2
 If tourne<-360:tourne=0:EndIf
 tourne2-1
 If tourne2<-360:tourne2=0:EndIf 
           ZoomSprite3D(#logotitre3D, 175*2,350)
          DisplaySprite3D ( #logotitre3D , 350+24+40*Sin(tourne*0.0174532925), 210+24+40*Cos(tourne*0.0174532925), 155) 
           ZoomSprite3D(#logotitre3D, 175*2,350)
          DisplaySprite3D ( #logotitre3D , 350+24+40*Sin(tourne2*0.0174532925), 210+24+40*Cos(tourne2*0.0174532925), 155)  
EndIf          
 Stop3D ()
EndProcedure    
; IDE Options = PureBasic v4.02 (Windows - x86)
Dernière modification par beauregard le lun. 06/août/2007 14:55, modifié 1 fois.
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Message par ATHOW »

Sympa, à la fois old-school et neuf dans les idées !
Jolis effets (vivent les sprite3D)

Par contre, pas de collisions avec le labyrinthe ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui d'accord avec ATHOW

je n'aurai pas fait grossir le fantome, mais j'aurai activé les collision avec le decors, ce qui aurai compliqué la tache !! , bien plus que la :D

bonne idée en effet ! bien joué ! :D
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Subtilité

Message par beauregard »

merci pour les compliments, mais vous pouvez critiquer, chuis pas susceptible vous savez, alors allez y franchement, dites moi ce que vous pensez vraiment ;)

J'ai développé ce jeu pour apprendre, mais aussi avec un souci de transmettre ce savoir au débutant qui ne saurait pas comment s'y prendre avec purebasic. Mais je dois bien avouer qu'avec l'ampleur que cela à pris, j'ai bien peur que la longueur de mon code risque d'en effrayer plus d'un.


Concernant le décor, il est juste là comme un clin oeil faisant référence au jeu bien connu.

test: à la ligne 67, changez la valeur de la variable niveau par 21, oui, le jeu comporte 21 niveaux, et là vous verrez que des décors solides auraient donnés un jeu d'une difficulté inhumaine.

Un moment, j'ai pensé reprendre un code donnant un effet tunnel, mais chacun d'entre nous est libre de faire les ajouts qu'il lui plait, et je ne veux pas m'attribuer tout les mérites en reprenant impunément les codes que vous avez généreusement mis sur ce forum, ou sur vos sites. Et c'est à cette attention que j'ai mis une ligne co-auteur à la 1ere page.

Le jeu comporte une subtilité qui est la suivante: lorsque le fantôme est à sa taille maximale, certes il est ainsi plus difficile d'éviter les vilains, mais le gain d'un bonbon lui rapporte 10 fois plus de points ! Et Les gains étant également proportionnel au niveau atteint, je vous laisse imaginer le score que le joueur peut ainsi obtenir...
Dernière modification par beauregard le jeu. 26/juil./2007 19:24, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui! :)
mais le fait d'activer des collisions avec le decors obligerai le joueur
a regarder le fantome , pour savoir ou il passe , et ou il va etre coincé par un mur, et en meme temps devra surveiller les Bots qui patrouille
et qui eux traverse les murs comme maintenant !

(ben oui, si les Bots et le Fantome sont bloqué par les murs, cela devien un Pacman !! :lol: )

donc seulement le Fantome ! :D

en retirant l'effet de grossissement, je trouve que cela augmenterai l'interet du jeu !! :D
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

subtilité : grandir pour gagner plus, ou se mettre au régime afin de mieux éviter les vilains. Le joueur peut gérer cela en s'accordant de temps en temps un peu de repos avec un régime, puis laisser son ghost grandir à nouveau pour engranger un maximum de point.

Faut y passer un peut de temps pour bien percevoir la, heu, subtilité du truc.

Mais avec des vilains ayant la même vitesse des premiers niveaux, l'idée de décor solide est tout à fait valable. D'ailleurs, j'avais pensé mettre un bot statique au milieu de l'écran: passé le niveau 21, hop retour niveau 1 mais avec un bot immobile au milieu cette fois.
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

Marche pas chez moi.... :(
Une fenêtre s'ouvre puis se ferme instantanément.

Aucun requester ni message du débogueur cependant et le programme continue de tourner en fond de tache, je dois forcès l'arrêt via l'icône "tête de mort".

ma (très vieille) config : Athlon 600Mhz, Nvidia Geforce 256 (32Mo), RAM : 3*128M
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

hackotedelaplaque a écrit :Marche pas chez moi.... :(
Une fenêtre s'ouvre puis se ferme instantanément.

Aucun requester ni message du débogueur cependant et le programme continue de tourner en fond de tache, je dois forcès l'arrêt via l'icône "tête de mort".

ma (très vieille) config : Athlon 600Mhz, Nvidia Geforce 256 (32Mo), RAM : 3*128M
:cry:
c'est bien triste, mais cela s'explique par le fait que le programme utilise uniquement des sprite3D. Je craignais déjà que ça ne tourne pas sur le vieux PC que j'utilise pour me connecter, mais là, comment faire, heu, attend, c'est peut être...dû à la taille des sprites, heu.... à la ligne 118, remplace
CreateSprite ( #logotitre ,256,256, #PB_Sprite_Texture )
par

Code : Tout sélectionner

CreateSprite ( #logotitre ,128,128, #PB_Sprite_Texture )
peut être que ta machine supporte pas le 256*256, mais qu'elle digère le 128*128, croisons les doigts !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

sinon c'est surement parcequ'il te faut mettre
"Engine3D.dll" qui se trouve dans le Dossier "Compillers" de purebasic
a coté de l'application !!
d'ailleurs il ne faut pas oublier de distribuer cette dll avec tout prg qui se sert de sprite3D() :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Moi j'ai de la chance :ça fonctionnize!

Je n'ai pas de critique négative à donner faute d'avoir créé un jeu (ce serait mesquin de ma part) : il est là, fini, complet et simple dans le jeu, sans fichiers à récupérer, rien.

Un petit trip avec la cartouche au départ. On sent une belle note de nostalgie!

Bravo!
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

merci !

Message par beauregard »

... et pour 48ko seulement :)
oui, une nostalgie légitime, puisque la N32*2 est la dernière console "ouverte" car utilisant des roms, comme les consoles portables quoi, donc avec toujours plus de données. Alors que depuis la playmachin(1Mo ram video + 2 Mo ram), la mémoire ne bouge pas, comme figé dans le temps.

Alors les jeux n'évoluent pas comme ceux de la neogeo par exemple... sans parler des temps de chargements...et du manque de fiabilité... d'où le choix de représenter une console cartouche, bien solide, faite pour durer longtemps, comme notre langage préféré.
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Message par ATHOW »

Dobro a écrit :sinon c'est surement parcequ'il te faut mettre
"Engine3D.dll" qui se trouve dans le Dossier "Compillers" de purebasic
a coté de l'application !!
d'ailleurs il ne faut pas oublier de distribuer cette dll avec tout prg qui se sert de sprite3D() :D
Tu es certain que c'est nécessaire pour les Sprite3D ?
Je crois que Engine3D.dll sert uniquement à OGRE, non ?
Anonyme

Message par Anonyme »

sinon c'est surement parcequ'il te faut mettre
"Engine3D.dll" qui se trouve dans le Dossier "Compillers" de purebasic
a coté de l'application !!
d'ailleurs il ne faut pas oublier de distribuer cette dll avec tout prg qui se sert de sprite3D() Very Happy
la ta picolé Dobro :D pas besoin de Engine3D.dll , mes prog fonctionne sans elle sur d'autre pc.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

heu, l'ignare que je suis pense que c'est un problème matériel, et non logiciel, d'ailleurs faudrait que hackotedelaplaque nous dise si sa carte vidéo accepte tout simplement les sprite3D.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Cpl.Bator a écrit :
sinon c'est surement parcequ'il te faut mettre
"Engine3D.dll" qui se trouve dans le Dossier "Compillers" de purebasic
a coté de l'application !!
d'ailleurs il ne faut pas oublier de distribuer cette dll avec tout prg qui se sert de sprite3D() Very Happy
la ta picolé Dobro :D pas besoin de Engine3D.dll , mes prog fonctionne sans elle sur d'autre pc.
c'est bon j'ai cuvé !! :lol:
Répondre