
Peur Basique
Ecran noir et plantage pour moi ( PIV 3.0Ghz 2Go de RAM ATI FireGl 256Mo )... le debugger se vautre ( et même en le désactivant c pareil ).
ça me fait penser qu'on pourrait lancer un truc: un petit défi aux codeurs chevronnés et passionnés qui passent tous les jours ici
: coder un jeu avec le minimum de lignes de code 
ça me fait penser qu'on pourrait lancer un truc: un petit défi aux codeurs chevronnés et passionnés qui passent tous les jours ici


-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
hélas, c'est qu'est l'os
y a un os !Polux a écrit :Ecran noir et plantage pour moi ( PIV 3.0Ghz 2Go de RAM ATI FireGl 256Mo )... le debugger se vautre ( et même en le désactivant c pareil ).

Le moins que l'on puisse dire, c'est que ce n'est pas normal: sur mon vieux PC que ma tante voulait jeter à la poubelle(!) et que j'ai donc récupéré pour me connecter sans crainte que l'on fouille dans mes affaires, mais j'arrête là de raconter ma vie, sur cet ancien PC donc ( Amd athlon xp 1700+ , 512Mo de ram, radeon 7000 serie avec seulement 64Mo), çà tourne sans soucis entre 57 et 59 images par seconde...
... et vu la simplicité du code ( dépourvu de routines ou d'appel de librairie, ou encore d'adressage avec d'obscurs peek truc ou poke machin), je ne pense pas que ce code soit responsable.
Peut être la dernière version beta de pb maltraite les sprites3D ? ( Pour ma part je me contente de la version 4.02, car j'aime bien la stabilité.)
Dernière modification par beauregard le ven. 27/juil./2007 12:13, modifié 1 fois.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
je te suggère de tester ta machine concernant les sprites 3D, heu..., et tiens voilà un ptit code qui tourne à 28 i/s sur mon vieux coucou( le carré blanc se bouge à l'aide des touches fléchés du clavier gauche, droite et haut):Polux a écrit :j'ai moi aussi PB 4.02...
Code : Tout sélectionner
; ------------------------------------------------------------
; droit dans le mur - 2007 - source purebasic 4. et des poussières
;
; Collision sans fonction.
;
; France - Toulouse - H. Philippe - pseudo: beauregard
; ------------------------------------------------------------
;UsePNGImageDecoder () ; oui, toi t'es obligatoire.
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 !):
; tout en sprites3D, même le décor (pourquoi s'embéter ?):
#fondA
#fondA3D
; dirigé par le joueur durand la phase de jeu:
#champi ;
#champi3D
; bloc solide:
#blocs
#blocs3D
; permet au progammeur de repèrer les positions des divers objets qu'il teste à l'écran:
#repere
#repere3D
EndEnumeration
;Global page.w=0,niveau.w=1
;Global placemX=512,placemY=384
; chamcoll-> =1 collision à droite, =2 collision à gauche.
Global champX.w, champY.w,chamcoll.w,champsol.w,champlafond.w
Global champsaut.w,champsautH.w,champsautV.w,champsautM.w
Global nbrebs
Structure balle
id.l
x.w
Y.w
sensx.l
sensy.l
sr.w
attract.w
EndStructure
Global NewList bs.balle(); bloc solide, c'est à dire infranchissable des 4 côtés.
Declare Fchampignon()
Declare Fcloneblocs()
; 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, "droit dans le mur" )=0
If OpenScreen (1024, 768, 32, "droit dans le mur" )=0
MessageRequester ( "Error" , "Can't open a 1024*768 - 32 bit screen !" , 0)
End
EndIf
; fond:
CreateSprite ( #fondA ,64,64, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #fondA ))
BackColor ( RGB (0,0,0))
Box (0,0, 64, 64, RGB (8,8,120))
LineXY (0, 0, 32, 0, RGB (88,8,88))
LineXY (32, 0, 0, 32, RGB (88,8,88))
LineXY (0, 32, 0, 0, RGB (88,8,88))
LineXY (64, 63, 48, 63, RGB (88,8,88))
LineXY (48, 63, 63, 48, RGB (88,8,88))
LineXY (63, 48, 63, 63, RGB (88,8,88))
StopDrawing ()
CreateSprite3D ( #fondA3D , #fondA ) ; osons les amis, osons !
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; champignon:
CreateSprite ( #champi ,64,64, #PB_Sprite_Texture ) ; objet dirigé par le joueur.
StartDrawing ( SpriteOutput ( #champi ))
BackColor ( RGB (0,0,0))
Box (0,0, 128, 128, RGB (255,255,255))
StopDrawing ()
CreateSprite3D ( #champi3D , #champi )
; decor blocsolide (objet intéractif car il fait office à la fois de mur, sol et plafond).
CreateSprite ( #blocs ,64,64, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #blocs ))
BackColor ( RGB (0,0,0))
Box (0,0, 4, 64, RGB (0,104,0))
Box (4,0, 4, 64, RGB (16,152,16))
Box (8,0, 12, 64, RGB (0,208,0))
Box (20,0, 4, 64, RGB (152,248,168))
Box (24,0, 4, 64, RGB (248,248,248))
Box (28,0, 4, 64, RGB (152,248,168))
Box (32,0, 8, 64, RGB (80,232,80))
Box (36,0, 4, 64, RGB (0,208,0))
Box (40,0, 4, 64, RGB (16,152,16))
Box (44,0, 12, 64, RGB (0,208,0))
Box (56,0, 4, 64, RGB (16,152,16))
Box (60,0, 4, 64, RGB (0,104,0))
StopDrawing ()
CreateSprite3D ( #blocs3D , #blocs )
; 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 )
Global zutA,zutB,zutC ; pour repère la variable qui n'aurait la bonne valeur.
;MouseLocate(449,62)
tpb=255
; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
ExamineMouse():ExamineKeyboard ()
If KeyboardPushed ( #PB_Key_Add ) And tpb<255:tpb+1:EndIf
If KeyboardPushed ( #PB_Key_Subtract ) And tpb>5:tpb-1:EndIf
Start3D ()
For a=0 To 15 ; 1024/64=16
For b=0 To 11 ; 768/64=12
DisplaySprite3D(#fondA3D, a*64, b*64, 255) ; 16*12
Next
Next
; **********************************************************************************************
; fabrication bloc solide:
If nbrebs<1:nbrebs+1:Fcloneblocs():EndIf
; Affichage clone bloc solide si existe:
ForEach bs()
; chamcoll -> =1 collision à droite, =2 collision à gauche.
If champX+64>bs()\x-1 And champX+64<bs()\x+16
If (champY>bs()\Y+15 And champY<bs()\Y+49)
chamcoll=1
EndIf
EndIf
If champX+64>bs()\x-1 And champX+64<bs()\x+16
If (champY+16>bs()\Y+15 And champY+16<bs()\Y+49) Or (champY+48>bs()\Y+15 And champY+48<bs()\Y+49)
chamcoll=1
EndIf
EndIf
If champX>bs()\x+48 And champX<bs()\x+65
If (champY>bs()\Y+15 And champY<bs()\Y+49)
chamcoll=2
EndIf
EndIf
If champX>bs()\x+48 And champX<bs()\x+65
If (champY+16>bs()\Y+15 And champY+16<bs()\Y+49) Or (champY+48>bs()\Y+15 And champY+48<bs()\Y+49)
chamcoll=2
EndIf
EndIf
; champsol -> =1 collision avec la partie haute du bloc solide:
If (champX+8>bs()\x+7 And champX+8<bs()\x+57) Or (champX+56>bs()\x+7 And champX+56<bs()\x+57)
If (champY+64>bs()\Y-1 And champY+64<bs()\Y+16)
champsol=1:champY=(bs()\Y-64)+1
EndIf
EndIf
; champlafond -> =1 collision avec le plafond
If (champX+8>bs()\x+7 And champX+8<bs()\x+57) Or (champX+56>bs()\x+7 And champX+56<bs()\x+57)
If champY>bs()\Y+48 And champY<bs()\Y+65
champlafond=1
EndIf
EndIf
DisplaySprite3D ( bs()\id , bs()\x, bs()\Y, tpb)
Next
; Contrôlé par le joueur:
If depart=0:depart=1:champX+512:champY+64:EndIf
Fchampignon()
Stop3D ()
; ligne de test afin de connaître la valeur des variables:
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
chamcoll$= Str (chamcoll)
champsol$= Str (champsol)
champlafond$= Str (champlafond)
tpb$= Str (tpb)
zutB$= Str (zutB)
zutC$= Str (zutC)
DrawText (50,1+20, "chamcoll: " +chamcoll$)
DrawText (50,1+40, "champsol: " +champsol$)
DrawText (50,1+60, "champlafond: " +champlafond$)
DrawText (50,1+100, "testX: " +testX$)
DrawText (50,1+120, "testY: " +testY$)
DrawText (50,1+260, "zutB: " +zutB$);:zutB=0
DrawText (50,1+280, "zutC: " +zutC$);:zutC=0
DrawText (350,20, "appuyez sur la touche R pour remise à 0 du code")
DrawText (350,50, "appuyez sur la touche - ou + du pavé numérique ")
DrawText (365,70, "niveau transparence des blocs solides: " +tpb$)
StopDrawing ()
Gosub fps ; nombre d'image par seconde.
If KeyboardPushed ( #PB_Key_R ):champX=0:champY=0:depart=0:tpb=255:EndIf ; reset
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; remise à 0 des variables avertissant d'une collision:
chamcoll=0:champsol=0:champlafond=0
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;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))
DrawText (1,1, "FPS: " +FPS$)
StopDrawing ()
Return
; ***********************************************************************************************
; ********************************* ici commence les procedures *********************************
; ***********************************************************************************************
Procedure Fcloneblocs() ; 64*64 fabrication clone bloc solide:
; placement clone bloc solide:
; faisons le sol:
For a=0 To 15
LastElement(bs())
AddElement(bs())
bs()\id=#blocs3D
bs()\x=a*64:bs()\y=704
Next
; faisons 2 autres blocs ( mur):
LastElement(bs()):AddElement(bs())
bs()\id=#blocs3D:bs()\x=0:bs()\y=640
LastElement(bs()):AddElement(bs())
bs()\id=#blocs3D:bs()\x=1024-64:bs()\y=640
; faisons un 1er plafond:
For a=0 To 3
LastElement(bs())
AddElement(bs())
bs()\id=#blocs3D
bs()\x=a*64:bs()\y=512
Next
; faisons un 2eme plafond:
For a=0 To 2
LastElement(bs())
AddElement(bs())
bs()\id=#blocs3D
bs()\x=(a*64)+192:bs()\y=320
Next
; faisons un 3eme plafond:
For a=0 To 1
LastElement(bs())
AddElement(bs())
bs()\id=#blocs3D
bs()\x=(a*64)+640:bs()\y=192
Next
; et faisont mumuse avec d'autres constructions...
LastElement(bs()):AddElement(bs())
bs()\id=#blocs3D:bs()\x=448:bs()\y=640
LastElement(bs()):AddElement(bs())
bs()\id=#blocs3D:bs()\x=512:bs()\y=640
LastElement(bs()):AddElement(bs())
bs()\id=#blocs3D:bs()\x=448:bs()\y=576
EndProcedure
Procedure Fchampignon() ; 64*64
; chamcoll-> =1 collision à droite, =2 collision à gauche.
If KeyboardPushed ( #PB_Key_Right ) And chamcoll<>1
champX+6
If champX>1024-64:champX-6:EndIf
EndIf
If KeyboardPushed ( #PB_Key_Left ) And chamcoll<>2
champX-6
If champX<0:champX+6:EndIf
EndIf
If KeyboardPushed ( #PB_Key_Up ) And champsol=1 And champsaut=0:champsaut=1:EndIf
If champsaut=1
If champsautH<15 ;H comme hauteur du saut
champsautV=12:champsautH+1
EndIf
If champsautH+champsautM>14 And champsautH+champsautM<25 ; M comme modulable
champsautV=10:champsautM+1
EndIf
If champsautH+champsautM>24 And champsautH+champsautM<35
champsautV=8:champsautM+1
EndIf
champY=champY-champsautV; V comme vitesse de la montée lors du saut.
; si (joueur lache touche haut ET saut minimum effectué) OU hauteur saut maximal atteind, alors...
If (KeyboardPushed ( #PB_Key_Up )=0 And champsautH>14) Or champsautH+champsautM=35 Or champlafond=1
champsautH=0:champsautM=0:champsaut=0
EndIf
EndIf
If champsol=0 And champsaut=0 ; si champignon ne touche plus le sol ET pas de saut, alors...
champY+8
EndIf
DisplaySprite3D ( #champi3D , champX, champY, 255)
EndProcedure
; IDE Options = PureBasic v4.02 (Windows - x86)
; CursorPosition = 265
; FirstLine = 245
; Folding = -

heu... là il faut demander de l'aide aux anciens qui seront surement là ce soir, et demande aussi à djes de tester peur basique...
Dernière modification par beauregard le ven. 27/juil./2007 12:50, modifié 2 fois.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
en mode fenêtre, c'est aussi possible.
...
Dernière modification par beauregard le mar. 12/févr./2008 18:40, modifié 3 fois.
très sympa ton jeu 
Pour info PureBasic libère automatiquement les images et les autres objets quand tu quittes le programme.

Pour info PureBasic libère automatiquement les images et les autres objets quand tu quittes le programme.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Merci pour vos compliments !
Cela m'a donné de la force pour mettre la touche finale:
contenu-> le joueur a désormais droit a plusieurs vies( gestion de la vie: si la barre d'énergie est pleine, alors vous pouvez obtenir une vie supplémentaire en appuyant sur la barre espace).
contenant-> un autre fond interactif + ajout du son( merci Tonton!).
Dernière version, en mode fenêtre( testé sur un athlon64 3500+ et geforce 7600gs 256Mo avec winXP), et cette foi-ci, je n'ai pas lésiné sur le nombre de sprite à l'écran. code en 2 parties:

contenu-> le joueur a désormais droit a plusieurs vies( gestion de la vie: si la barre d'énergie est pleine, alors vous pouvez obtenir une vie supplémentaire en appuyant sur la barre espace).
contenant-> un autre fond interactif + ajout du son( merci Tonton!).
Dernière version, en mode fenêtre( testé sur un athlon64 3500+ et geforce 7600gs 256Mo avec winXP), et cette foi-ci, je n'ai pas lésiné sur le nombre de sprite à l'écran. code en 2 parties:
Code : Tout sélectionner
; ------------------------------------------------------------
; video game - PC
; Peur Basique - mode fenêtre - 12/02/2008 - source PureBasic 4.10
; France - pseudo: beauregard
; touche F afin de connaître le nombre d'image par seconde.
; Merci à tout les membres du Forum "non officiel" de pb
; qui ont pris le temps de répondre à mes interrogations.
; http://www.purebasic.fr/french/index.php
; ------------------------------------------------------------
InitSound()
; variable pour la conception de bruitage tout en code:
ondea.f:ondeb.f:ondec.f:onded.f:ondee.f:brh0.f:brsong.w:choixondee.f
;------ conception des bruitages ------
choixondee=0.00029:Gosub soundconception
CatchSound(0,?music);on pointe le debut du fi
SoundVolume(0, 100);volume de 0 a 100
choixondee=0.00004:Gosub soundconception
CatchSound(1,?music);on pointe le debut du fi
SoundVolume(1, 100);volume de 0 a 100
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 !):
#fondA:#fondB:#fondC
#logotitre:#logotitre3D
; dirigé par le joueur durand l'introduction:
#pb:#pb3D
; dirigé par le joueur durand la phase de jeu:
#ghost:#ghost3D
#oeil:#oeil3D
#drapA:#drapA3D ; drap animation 1
#drapB:#drapB3D ; drap animation 2
; barre d'énergie:
#sphoton
#photon
#photonm
; bonbon pour remonter la barre d'énergie ( mais qui fait également grossir ! ):
#bonbon:#bonbon3D
#eonbon:#eonbon3D ; enveloppe du bonbon
#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.w, d1fleche.b, Tbeep.w, TTbeep.w, affichagefond.b, nbrevie.b=3, Tinvuln.w
Global nbreis.b ; 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, energid.b ; utilisé pour se rendre transparent, ou maigrir.
Global Tenergie.w=0 ; tempo pour établir la vitesse d'épuisement de la barre l'énergie.
Global energirmax.b ; si energie est au maximum, alors il faut le signifier visuellement au joueur( peut gagner une vie).
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.w=512, placemY.w=384
Structure objet ; opération de clonage...
id.l
x.w
x2.w
Y.w
sensx.l
sensy.l
sr.w
attract.w
EndStructure
Global NewList bonbon.objet()
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()
Declare MelodieBeep(melodie.s)
Declare Fin()
If OpenWindow ( 0 , 0, 0, 1024+48, 768+48, "Peur Basique" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar|#PB_Window_ScreenCentered ) ; on ouvre une fenetre
OpenWindowedScreen ( WindowID ( 0 ), 23, 23, 1024, 768, 0, 1, 1) ; un ecran graphique dans la fenêtre.
EndIf
; °°°°°°°°°°°°°°°°°°°° fonte °°°°°°°°°°°°°°°°°°°°°°°°°°
LoadFont ( 0 , "Comic Sans Ms" ,16,#PB_Font_Bold)
FontID = LoadFont ( 1 , "arial" , 25, #PB_Font_Bold )
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; logotitre
CreateSprite ( #logotitre ,256,256, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #logotitre ))
DrawingFont ( FontID ( 1 ))
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)
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 ()
CreateSprite ( #fondB ,64,64)
StartDrawing ( SpriteOutput ( #fondB ))
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 (1,10,62))
Box (22,22, 20, 20, RGB (2,11,83)):Box (24,24, 18, 18, RGB (1,8,43))
StopDrawing ()
CreateSprite ( #fondC ,64,64)
StartDrawing ( SpriteOutput ( #fondC ))
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,13,95))
Box (18,18, 28, 28, RGB (2,11,83)):Box (20,20, 26, 26, RGB (1,8,43))
StopDrawing ()
; 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)
StartDrawing ( SpriteOutput ( #sphoton ))
BackColor ( RGB (0,0,0))
Box (0,0, 32, 20, RGB (255,255,255)):Box (2,2, 28, 16, RGB (30,58,30))
StopDrawing ()
; photon (barre d'énergie du ghost):
CreateSprite ( #photon ,32,32)
StartDrawing ( SpriteOutput ( #photon ))
BackColor ( RGB (0,0,0))
Box (2,2, 28, 16, RGB (0,42,13)):Box (3,3, 26, 14, RGB (28,155,40))::Box (4,4, 24, 12, RGB (62,170,72))
StopDrawing ()
; photonm (barre d'énergie du ghost au maximum):
CreateSprite ( #photonm ,32,32)
StartDrawing ( SpriteOutput ( #photonm ))
BackColor ( RGB (0,0,0))
Box (2,2, 28, 16, RGB (28,155,40)):Box (3,3, 26, 14, RGB (62,170,72))::Box (4,4, 24, 12, RGB (105,188,112))
StopDrawing ()
; 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)
MouseLocate(512-6,600)
Global zutA,zutB,zutC
; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
Event= WindowEvent ()
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$)
DrawText (150,624, "Si le barre d'énergie est pleine, vous pouvez appuyer sur la barre espace pour gagner une vie( 9 vies maximum).")
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.
; fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
; fabrication du fond ( sous forme de bloc):
If nbrefond<1:nbrefond+1:Fclonebfond():EndIf
;- Affichage clone fondbloc si existe:
ForEach bfond()
; fond en mouvement interactif n°1:
; If repereX>bfond()\x-32 And repereX<bfond()\x+32 And ghostv=210 And gtaille>50
; If bfond()\x2<(gtaille+gtaille)/10:bfond()\x2+4:EndIf
; Else
; If bfond()\x2>0:bfond()\x2-1:EndIf
; EndIf
; DisplayTransparentSprite( #fondA , bfond()\x+bfond()\x2, bfond()\Y)
; fond en mouvement interactif n°2:
affichagefond=0
If repereX>bfond()\x-128-gtaille And repereX<bfond()\x+128+gtaille And ghostv=210 And gtaille>50
If repereY>bfond()\Y-128-gtaille And repereY<bfond()\Y+128+gtaille
affichagefond=2
EndIf
EndIf
If repereX>bfond()\x-64-gtaille And repereX<bfond()\x+64+gtaille And ghostv=210 And gtaille>50
If repereY>bfond()\Y-64-gtaille And repereY<bfond()\Y+64+gtaille
affichagefond=1
EndIf
EndIf
If affichagefond=0:DisplayTransparentSprite( #fondA , bfond()\x+bfond()\x2, bfond()\Y):EndIf
If affichagefond=1:DisplayTransparentSprite( #fondB , bfond()\x+bfond()\x2, bfond()\Y):EndIf
If affichagefond=2:DisplayTransparentSprite( #fondC , bfond()\x+bfond()\x2, bfond()\Y):EndIf
Next
Start3D ()
;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
; fabrique de bonbon:
If ghostaie<2:tempoA+1:EndIf
If tempoA>150:tempoA=0:Fcloneb():EndIf ; >150
;- 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 Tinvuln>0:Tinvuln-1:EndIf; invulnérabilité durant quelques secondes, suite à la perte d'une vie.
If ghostaie<2 And Tinvuln=0
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()):EndIf ; 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
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
2eme partie:
Code : Tout sélectionner
;- GHOST
If ghostaie=0:Fghost():EndIf ; ghost que l'on déplace fébrilement à la souris.
If ghostaie>0 ; perd une vie ou game over.
If ghostaie=1:Tbeep=56:EndIf; signal sonore "perdu une vie".
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 Tbeep>55:TTbeep+1:EndIf; signal sonore "perdu une vie".
If TTBeep>5
If Tbeep=56:SoundFrequency(1, 20000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=58:SoundFrequency(1, 19000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=60:SoundFrequency(1, 18000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=62:SoundFrequency(1, 17000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
TTBeep=0:Tbeep+1
If Tbeep>62:Tbeep=0:EndIf
EndIf
If gtaille>400
nbrevie-1
If nbrevie>0
ghostaie=0:animdrap=0:ghostv=255:energie=0:Tenergie=0:gtaille=50:mange=0
Tinvuln=300
EndIf
If nbrevie=0:page=3:Freset():EndIf
EndIf
EndIf
; GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Ftestcodeur()
Freset()
Stop3D ()
; support barre d'énergie.
For a=0 To 19
DisplayTransparentSprite(#sphoton, 16, 728-32-(a*32))
Next
;- barre d'énergie:
If energie=20:energirmax+1:EndIf
If energirmax>10:energirmax=1:EndIf
For t=1 To energie
If energirmax<6:DisplayTransparentSprite ( #photon , 16, 728-(t*32)):EndIf; de 1 à 5:endif
If energirmax>5:DisplayTransparentSprite ( #photonm , 16, 728-(t*32)):EndIf; de 6 à 10
Next
EndIf ; il s'agit du Endif de "If page=2" ==============================================================================
If page>0 And ghostaie=0:testX=MouseX ():testY=MouseY ():EndIf
zutA=energie;Tinvuln;gtaille;Tbeep; ; test du codeur...
; 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)
nbrevie$= Str (nbrevie)
; DrawText (50,1+260, "zutA: " +zutA$);:zutA=0
If page=2
DrawingFont ( FontID (1))
FrontColor ( RGB (164,21,21)) :DrawText (900+1,24+1, "Vie: " +nbrevie$)
FrontColor ( RGB (253,201,255)) :DrawText (900,24, "Vie: " +nbrevie$)
DrawingFont ( FontID (0))
If niveau>9
FrontColor ( RGB (164,21,21)) :DrawText (450+1,735+1, "NIVEAU: " +niveau$)
FrontColor ( RGB (253,201,255)) :DrawText (450,735, "NIVEAU: " +niveau$)
EndIf
If niveau<10
FrontColor ( RGB (164,21,21)) :DrawText (450+1,735+1, "NIVEAU: " +niveau$)
FrontColor ( RGB (253,201,255)) :DrawText (450,735, "NIVEAU: "+niveau$)
EndIf
If niveau=21
FrontColor ( RGB (164,21,21)) :DrawText (380+1,710+1, "C'est bien toi le meilleur !")
FrontColor ( RGB (253,201,255)) :DrawText (380,710, "C'est bien toi le meilleur !")
EndIf
EndIf
If page>0
DrawingFont ( FontID (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 !)
;-Flip
FlipBuffers(1)
If page<2:ClearScreen(RGB(0, 0, 0)):EndIf
If page=2:ClearScreen(RGB(0, 42, 255)) :EndIf
; ******************************************************************************************************
If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):Fin():EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver
fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek
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
soundconception:
!MOV dword[add_dat],0 ; ici, c'est compliqué voyez( du son uniquement avec du code...
ondee=1 ; ... c'est juste pour le fun quoi, çà fait bien plaisir... merci qui ? Merci Tonton! :D )
For br=0 To 15000;- bruit de 15000 double echantillons
ondea+0.1;25 ;creation onde sinus 1
ondeb+0.2;05;creation onde sinus 2
ondec+0.1;77;creation onde sinus 3
onded+0.4;09;creation onde sinus 4
ondee-choixondee; 0.00029;son regressif
brh0=((Sin(ondea)+Sin(ondeb)+Sin(ondec)+Sin(onded))*32000/4)*ondee ;mixe le tout.
brsong=brh0
!PUSH eax
!PUSH ebx
!PUSH edi
!MOV ax,word[v_brsong]
!LEA edi,[donne] ;on place les echantillon a l adresse "donne"
!ADD edi,[add_dat]
!ADD dword[add_dat],4
!MOV word[edi],ax
!MOV word[edi+2],ax
!POP edi
!POP ebx
!POP eax
Next br
Return
; ***********************************************************************************************
; ********************************* ici commence les procedures *********************************
; ***********************************************************************************************
Procedure Fclonebfond()
; placement clone fond sous forme de simple bloc:
For x=0 To 15
For y=0 To 11
LastElement(bfond())
AddElement(bfond())
bfond()\id=#fondA
bfond()\x=x*64
bfond()\Y=y*64
Next
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()
; MouseButton(3) ; #PB_MouseButton_Middle <- y a un problème avec le bouton du milieu...bon ben tant pis.
If nbrevie<9 And energie=20 And KeyboardPushed ( #PB_Key_Space ):nbrevie+1:energie=0:Tbeep=36:EndIf
If Tbeep>35:TTbeep+1:EndIf
If TTBeep>5
If Tbeep=36:SoundFrequency(0, 18000):PlaySound(0,0):EndIf;:MelodieBeep("180,70"):Tbeep+1:EndIf
If Tbeep=38:SoundFrequency(0, 20000):PlaySound(0,0):EndIf;:MelodieBeep("200,95"):Tbeep+1:EndIf
If Tbeep=40:SoundFrequency(0, 24000):PlaySound(0,0):EndIf
TTBeep=0:Tbeep+1
If Tbeep>40:Tbeep=0:EndIf
EndIf
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:
If Tinvuln=0 Or (Tinvuln>50 And Tinvuln<100) Or (Tinvuln>150 And Tinvuln<200) Or (Tinvuln>250 And Tinvuln<300)
ZoomSprite3D(#ghost3D, gtaille,gtaille)
DisplaySprite3D ( #ghost3D , MouseX (), MouseY ()+40,ghostv)
EndIf
; 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 Tinvuln=0 Or (Tinvuln>50 And Tinvuln<100) Or (Tinvuln>150 And Tinvuln<200) Or (Tinvuln>250 And Tinvuln<300)
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
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:Tbeep=0:nbrevie=3
ghostaie=0:animdrap=0:ghostv=255:energie=0: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()
TTbeep+1
If TTBeep>5
If Tbeep=0:SoundFrequency(0, 9000):PlaySound(0,0):EndIf;MelodieBeep("90,160"):EndIf
If Tbeep=1:SoundFrequency(0, 18000):PlaySound(0,0):EndIf;:MelodieBeep("180,110"):EndIf
If Tbeep=2:SoundFrequency(0, 9000):PlaySound(0,0):EndIf;:MelodieBeep("90,160"):EndIf
If Tbeep=3:SoundFrequency(0, 7000):PlaySound(0,0):EndIf;:MelodieBeep("70,160"):EndIf
If Tbeep=4:SoundFrequency(0, 19000):PlaySound(0,0):EndIf;:MelodieBeep("190,250"):EndIf
If Tbeep=8:SoundFrequency(0, 15000):PlaySound(0,0):EndIf;:MelodieBeep("150,300"):EndIf
If Tbeep=12:SoundFrequency(0, 11000):PlaySound(0,0):EndIf;:MelodieBeep("110,160"):Tbeep+1:EndIf
If Tbeep=13:SoundFrequency(0, 20000):PlaySound(0,0):EndIf;:MelodieBeep("200,110"):Tbeep+1:EndIf
If Tbeep=14:SoundFrequency(0, 11000):PlaySound(0,0):EndIf;:MelodieBeep("110,160"):Tbeep+1:EndIf
If Tbeep=15:SoundFrequency(0, 9000):PlaySound(0,0):EndIf;:MelodieBeep("90,160"):Tbeep+1:EndIf
If Tbeep=16:SoundFrequency(0, 21000):PlaySound(0,0):EndIf;:MelodieBeep("210,250"):Tbeep+1:EndIf
If Tbeep=20:SoundFrequency(0, 17000):PlaySound(0,0):EndIf;:MelodieBeep("170,300"):Tbeep+1:EndIf
If Tbeep=24:SoundFrequency(0, 9000):PlaySound(0,0):EndIf;:MelodieBeep("90,160"):Tbeep+1:EndIf
If Tbeep=25:SoundFrequency(0, 18000):PlaySound(0,0):EndIf;:MelodieBeep("180,110"):Tbeep+1:EndIf
If Tbeep=26:SoundFrequency(0, 9000):PlaySound(0,0):EndIf;:MelodieBeep("90,160"):Tbeep+1:EndIf
If Tbeep=27:SoundFrequency(0, 7000):PlaySound(0,0):EndIf;:MelodieBeep("70,160"):Tbeep+1:EndIf
If Tbeep=28:SoundFrequency(0, 19000):PlaySound(0,0):EndIf;:MelodieBeep("190,250"):Tbeep+1:EndIf
If Tbeep=32:SoundFrequency(0, 15000):PlaySound(0,0):EndIf;:MelodieBeep("150,300"):Tbeep+1:EndIf
If Tbeep=36:SoundFrequency(0, 18000):PlaySound(0,0):EndIf;:MelodieBeep("180,70"):Tbeep+1:EndIf
If Tbeep=37:SoundFrequency(0, 20000):PlaySound(0,0):EndIf;:MelodieBeep("200,95"):Tbeep+1:EndIf
If Tbeep=38:SoundFrequency(0, 24000):PlaySound(0,0):EndIf;:MelodieBeep("240,220"):Tbeep+1:EndIf;
If Tbeep=40:SoundFrequency(0, 20000):PlaySound(0,0):EndIf;:MelodieBeep("200,65"):Tbeep+1:EndIf
If Tbeep=41:SoundFrequency(0, 22000):PlaySound(0,0):EndIf;:MelodieBeep("220,90"):Tbeep+1:EndIf
If Tbeep=42:SoundFrequency(0, 26000):PlaySound(0,0):EndIf;:MelodieBeep("260,215"):Tbeep+1:EndIf
If Tbeep=44:SoundFrequency(0, 22000):PlaySound(0,0):EndIf;:MelodieBeep("220,60"):Tbeep+1:EndIf
If Tbeep=45:SoundFrequency(0, 24000):PlaySound(0,0):EndIf;:MelodieBeep("240,85"):Tbeep+1:EndIf
If Tbeep=46:SoundFrequency(0, 28000):PlaySound(0,0):EndIf;:MelodieBeep("280,210"):Tbeep+1:EndIf
If Tbeep=48:SoundFrequency(0, 24000):PlaySound(0,0):EndIf;:MelodieBeep("240,55"):Tbeep+1:EndIf
If Tbeep=49:SoundFrequency(0, 26000):PlaySound(0,0):EndIf;:MelodieBeep("260,80"):Tbeep+1:EndIf
If Tbeep=50:SoundFrequency(0, 30000):PlaySound(0,0):EndIf;:MelodieBeep("300,205"):Tbeep+1:EndIf
If Tbeep=56:SoundFrequency(1, 20000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=58:SoundFrequency(1, 19000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=60:SoundFrequency(1, 18000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=62:SoundFrequency(1, 17000):PlaySound(1,0):EndIf;:MelodieBeep("220,380"):Tbeep+1:EndIf
If Tbeep=68:SoundFrequency(0, 10000):PlaySound(0,0):EndIf;:MelodieBeep("100,180"):Tbeep+1:EndIf
If Tbeep=70:SoundFrequency(0, 22000):PlaySound(0,0):EndIf;:MelodieBeep("220,190"):Tbeep+1:EndIf
If Tbeep=72:SoundFrequency(0, 10000):PlaySound(0,0):EndIf;:MelodieBeep("100,180"):Tbeep+1:EndIf
If Tbeep=74:SoundFrequency(0, 18000):PlaySound(0,0):EndIf;:MelodieBeep("180,360"):Tbeep+1:EndIf
TTbeep=0
If Tbeep<83:Tbeep+1:EndIf
EndIf
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
DrawingFont ( FontID (0))
FrontColor ( RGB (18,114,111))
DrawText (350+1,650+1, "France - pseudo: beauregard")
FrontColor ( RGB (35,219,212))
DrawText (350,650, "France - pseudo: beauregard")
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:Tbeep=0
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:Tbeep=0
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
Procedure MelodieBeep(melodie.s)
Repeat
freq.l = Val(StringField(melodie,i+1,","))
laeng.l = Val(StringField(melodie,i+2,","))
i+2
If freq Or laeng : Beep_(freq,laeng) : EndIf
Until freq = 0 And laeng = 0
EndProcedure
Procedure.l Fin()
If IsImage(#fondA):FreeImage(#fondA):EndIf
If IsImage(#fondB):FreeImage(#fondB):EndIf
If IsImage(#fondC):FreeImage(#fondC):EndIf
If IsImage(#logotitre):FreeImage(#logotitre):EndIf
If IsImage(#logotitre3D):FreeImage(#logotitre3D):EndIf
If IsImage(#pb):FreeImage(#pb):EndIf
If IsImage(#pb3D):FreeImage(#pb3D):EndIf
If IsImage(#ghost3D):FreeImage(#ghost3D):EndIf
If IsImage(#ghost3D):FreeImage(#ghost3D):EndIf
If IsImage(#oeil):FreeImage(#oeil):EndIf
If IsImage(#oeil3D):FreeImage(#oeil3D):EndIf
If IsImage(#drapA):FreeImage(#drapA):EndIf
If IsImage(#drapA3D):FreeImage(#drapA3D):EndIf
If IsImage(#drapB):FreeImage(#drapB):EndIf
If IsImage(#drapB3D):FreeImage(#drapB3D):EndIf
If IsImage(#sphoton):FreeImage(#sphoton):EndIf
If IsImage(#photon):FreeImage(#photon):EndIf
If IsImage(#photonm):FreeImage(#photonm):EndIf
If IsImage(#bonbon):FreeImage(#bonbon):EndIf
If IsImage(#bonbon3D):FreeImage(#bonbon3D):EndIf
If IsImage(#eonbon):FreeImage(#eonbon):EndIf
If IsImage(#eonbon3D):FreeImage(#eonbon3D):EndIf
If IsImage(#pointA):FreeImage(#pointA):EndIf
If IsImage(#pointA3D):FreeImage(#pointA3D):EndIf
If IsImage(#pointB):FreeImage(#pointB):EndIf
If IsImage(#pointB3D):FreeImage(#pointB3D):EndIf
If IsImage(#elice):FreeImage(#elice):EndIf
If IsImage(#elice3D):FreeImage(#elice3D):EndIf
If IsImage(#pic):FreeImage(#pic):EndIf
If IsImage(#pic3D):FreeImage(#pic3D):EndIf
If IsImage(#repere):FreeImage(#repere):EndIf
If IsImage(#repere3D):FreeImage(#repere3D):EndIf
If IsImage(#fleche):FreeImage(#fleche):EndIf
If IsImage(#fleche3D):FreeImage(#fleche3D):EndIf
If IsImage(#flechf):FreeImage(#flechf):EndIf
If IsImage(#flechf3D):FreeImage(#flechf3D):EndIf
If IsImage(#ghostB):FreeImage(#ghostB):EndIf
If IsImage(#ghostB3D):FreeImage(#ghostB3D):EndIf
End
EndProcedure
; données concernant le son:
!section '.data' align 16
!add_dat:
!dd 0
music: ;ici 'l entete du fichier wave juste avant les echantillons
!db 052h,049h,046h,046h; (4 octets) : Constante "RIFF" (0x52,0x49,0x46,0x46)
!tail8:
!dd 15000-8 ; (4 octets) : Taille du fichier moins 8 octets
!db 057h,041h,056h,045h ; (4 octets) : Format = "WAVE" (0x57,0x41,0x56,0x45)
!db 066h,06dh,074h,020h ; (4 octets) : Identifiant "fmt " (0x66,0x6D,0x74,0x20)
!dd 16 ; (4 octets) : Nombre d'octets utilisés pour définir en détail le contenu
!dw 1 ; (2 octets) : Format de fichier (1: PCM, ...)
!dw 2 ; (2 octets) : Nombre de canaux (1 pour mono ou 2 pour stéréo)
!dd 22050 ; (4 octets) : Fréquence d'échantillonnage (en Hertz)
!dd 88200 ; (4 octets) : Nombre d'octets par seconde de musique
!dw 4 ; (2 octets) : Nombre d'octets par échantillon
!dw 16; (2 octets) : Nombre de bits par donnée
!db 064h,061h,074h,061h; (4 octets) : Constante "data" (0x64,0x61,0x74,0x61)
!tail44:
!dd 15000-44; (4 octets) : Taille du fichier moins 44 octets
!donne: ;ici les echantillons
!rb 500000
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86