Problème avec un petit jeux que je suis entrain de codé

Programmation avancée de jeux en PureBasic
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Problème avec un petit jeux que je suis entrain de codé

Message par Bernie »

Bonjour
je rencontre un problème avec un petit jeux que je suis entrain de codé

Voilà j'ai crée l'écran intro et j'ai crée un fichier.pbi pour le jeux probléme je peux pas faire IncludeFile "Game.pbi" dans mon fichier principale car dans le fichier .pbi je peux pas mettre une procedure dans une procedure
j'avais penser à Runprogramms pour lancer un .exe mais c'est pas une solution pour moi comment faire ????

https://www.dropbox.com/s/mum48kxgiwkc0 ... h.zip?dl=0


Merci de vos conseils ..
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec un petit jeux que je suis entrain de codé

Message par falsam »

Tu veux procéder de cette façon alors fait comme ceci dans ton code principale

Code : Tout sélectionner

 ;--Si on appuie sur la barre d'espacement on stop la musique et on lance le jeux 
  If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music)  
    RunProgram("game.exe")
    End
 EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Problème avec un petit jeux que je suis entrain de codé

Message par Bernie »

merci Falsam et si je veux fermer la fenetre d'intro pour lancer le jeux ça marche pas j'ai un message d'erreur qui me dis qu'au moins une fene tre doit etre ouverte : et j'ai la ligne en rouge ici : gEventWindow=WindowEvent()

Code : Tout sélectionner

  If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music) 
    CloseWindow(#Main_Form)
    RunProgram("Game.exe")
 EndIf
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec un petit jeux que je suis entrain de codé

Message par falsam »

Si tu as essayé le code que je t'ai donné ça fonctionne. J'ai testé et le code précédent se ferme quand le jeu est lancé.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec un petit jeux que je suis entrain de codé

Message par falsam »

Tu voulais un conseil ? en voila un : Je ne vous pas l’intérêt de ton include.

A toi de savoir quand le jeu démarre. Tant que le jeu n'a pas démarré, alors tu affiches l'intro.

Tu crées une variable

Code : Tout sélectionner

Global DebutJeu.b = #False
Dans ton code tu testes déja si l'utilisateur presse la touche Espace. C'est là que tu indique que le jeu commence.

Code : Tout sélectionner

If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music)    
    DebutJeu = #True
 EndIf
Le jeu a commencé ? alors on affiche plus l'intro.

On va faire le contraire : Si le jeu n'a pas commencé, alors on affiche l'intro.

Code : Tout sélectionner

If DebutJeu = #False
    ;Affichage du  texte 
    DisplayTransparentSprite(#Text_Titre, 100, 150)
    DisplayTransparentSprite(#Text_Ombre, 100, 155)
    
    
    ;--On fait clignoter le texte "Press Space"
    If TextOn
      DisplayTransparentSprite(#Text_Press, 235, 480) 
    EndIf
    If (ElapsedMilliseconds()-gTimeElapsed)>500
      If TextOn
        TextOn=#False
      Else
        TextOn=#True
      EndIf
      gTimeElapsed=ElapsedMilliseconds()
    EndIf
  EndIf
Voila, ça doit fonctionner.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Problème avec un petit jeux que je suis entrain de codé

Message par Bernie »

falsam a écrit :Si tu as essayé le code que je t'ai donné ça fonctionne. J'ai testé et le code précédent se ferme quand le jeu est lancé.
oui mais j'ai ça :

http://www.hostingpics.net/viewer.php?i ... titre1.jpg

j'efface tout le code et je recommencer depuis le début
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec un petit jeux que je suis entrain de codé

Message par falsam »

Evidement que tu as ce résultat. Tu fermes ta fenêtre avant de lancer game.exe. Ca ne peut pas fonctionner. Relis ce que j'avais écrit.

J'avais écrit.

Code : Tout sélectionner

;--Si on appuie sur la barre d'espacement on stop la musique et on lance le jeux 
  If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music)  
    RunProgram("game.exe")
    End
EndIf
et toi tu as fais

Code : Tout sélectionner

 If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music) 
    CloseWindow(#Main_Form)
    RunProgram("Game.exe")
EndIf
C'est quand meme trés différent non ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Problème avec un petit jeux que je suis entrain de codé

Message par Bernie »

Si j’enlève CloseWindow
Pourquoi j'ai ça alors :

http://img15.hostingpics.net/pics/980458Sanstitre1.jpg


Pa grave je refaire tout de a à z
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème avec un petit jeux que je suis entrain de codé

Message par falsam »

Bernie a écrit :Pourquoi j'ai ça alors :
Parce que tu ne sais pas lire !!

■ Je pense que tu ne mets pas fin à ton code qui lance game.exe.

Alors je vais décomposer ce que j'ai dit par deux fois en reprenant ton test de la barre d'espace.

If KeyboardPushed(#PB_Key_Space)
1 - StopSound(#Music)
2 - RunProgram("game.exe")
3 - End ;Ce que tu as oublié
EndIf
Bernie a écrit :Pa grave je refaire tout de a à z
Bonne idée et quitte à tout refaire ....

Dans ce topic je t'ai dit que tu pouvais réunir tes deux codes en un seul.

J'ai dit que tu peux tester dans ton jeu une variable qui prendra la valeur Vrai ou Faux pour déterminer si le jeu a commencé Oui ou Non.

■ Le code

Code : Tout sélectionner

;**** Space Shooter ****
;*** Code by JBernard 2016 ***

EnableExplicit

UsePNGImageDecoder()
UseOGGSoundDecoder()

;--Initialisation--
If InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0 
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
EndIf

;--Constantes--
Enumeration Form
  #Main_Form
EndEnumeration

Enumeration Games
  #Text_Titre
  #Etoile0
  #Etoile1
  #Text_Ombre
  #Text_Press
  #Music
  #Ship  
EndEnumeration

;--Variable globales
Global gI,gW=800,gH=600,gEventWindow,gFont1,gFont2,gTimeElapsed=ElapsedMilliseconds(),TextOn.b=#False
Global FolderImages.s="Data\"

Global DebutJeu.b = #False

;Vaisseau
Global ShipX = 350, ShipY = 300

;--Nombre d'étoiles
#MaxEtoiles= 99
;--Chargement de la musique 
LoadSound(#Music,FolderImages +"Music.ogg",#PB_Sound_Streaming)

;--Chargement de la police pour les textes
gFont1 = LoadFont(0, "Arial", 50, #PB_Font_Bold )
gFont2 = LoadFont(1, "Arial", 30, #PB_Font_Bold )

;--Structure pour les infos des étoiles
Structure etoile
  PosX.i
  PosY.i
  Vitesse.i
  Id.b
EndStructure
RGB(0, 0, 255)
;--Création d'un tableau pour nos étoiles
Global Dim etoiles.etoile(#MaxEtoiles)

;--Les procédures
Procedure CreateText()
  
  CreateSprite(#Text_Titre,600,100,#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(#Text_Titre))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0,0,1090,80,RGBA(0,0,0,0))
  DrawingFont(gFont1)
  DrawText(20,10,"SPACE SHOOTER ",RGBA(255,0,0,255), RGBA(0,0,0,0));
  StopDrawing()
  
  ;---
  CreateSprite(#Text_Ombre,600,100,#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(#Text_Ombre))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0,0,1090,80,RGBA(0,0,0,0))
  DrawingFont(gFont1)
  DrawText(20,10,"SPACE SHOOTER ",RGBA(255,255,255,255), RGBA(0,0,0,0));
  StopDrawing()
  ;---
  CreateSprite(#Text_Press,600,100,#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(#Text_press))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0,0,1090,80,RGBA(0,0,0,0))
  DrawingFont(gFont2)
  DrawText(20,10,"Press SpaceBar ",RGBA(255,255,255,255), RGBA(0,0,0,0));
  StopDrawing()
  
EndProcedure

;--On dessine les étoiles
Procedure CreationEtoiles()
  CreateSprite(#Etoile0,2,2)
  CreateSprite(#Etoile1,2,2)
  
  ;--Dessin de l'étoile blanche
  StartDrawing(SpriteOutput(#Etoile0))
  Box(0, 0, 2, 2, $FFFFFF)
  StopDrawing()
  
  ;--Dessin de l'étoile rouge
  StartDrawing(SpriteOutput(#Etoile1))
  Box(0, 0, 2, 2,  $A9A9A9)
  StopDrawing()
EndProcedure 

;-- Initialisation des paramètres de départ des étoiles
Procedure Initialisation()
  With etoiles(gI)
    For gI =0 To #MaxEtoiles
      \PosY = Random(gH)
      \PosX =Random(gW,0)
      \Id = Random(2,1)
      \Vitesse = Random(8,2)
    Next
  EndWith 
EndProcedure 

Procedure Deplacement()
  For gI =0 To #MaxEtoiles
    With etoiles(gI)
      DisplaySprite(\id, \PosX, \PosY)
      \PosY + \Vitesse
      If \PosY >=gW
        \PosY -gW
      EndIf
    EndWith
  Next   
EndProcedure   

;--- Création de la fenetre et de l'écran
OpenWindow(#Main_Form,0,0,gW,gH,"Space Shooters Menu  ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,gW,gH)
;---Chargement du l'image du sprite
LoadSprite(#Ship,FolderImages + "Ship.png",#PB_Sprite_AlphaBlending)

PlaySound(#Music ,#PB_Sound_Loop ,30)
CreateText()
CreationEtoiles()
Initialisation()

;--- Boucle du programme
Repeat 
  Repeat
    gEventWindow=WindowEvent()
    Select gEventWindow
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until gEventWindow=0
  ClearScreen(RGB(0, 0, 0)) 
  Deplacement()
  
  
  ;Affichage du vaisseau 
  DisplayTransparentSprite(#Ship, ShipX, ShipY)
  
  ;SI LE JEU N'A PAS COMMENCE
  If DebutJeu = #False 
    ;Affichage du  texte 
    DisplayTransparentSprite(#Text_Titre, 100, 150)
    DisplayTransparentSprite(#Text_Ombre, 100, 155)
    
    
    ;--On fait clignoter le texte "Press Space"
    If TextOn
      DisplayTransparentSprite(#Text_Press, 235, 480) 
    EndIf
    If (ElapsedMilliseconds()-gTimeElapsed)>500
      If TextOn
        TextOn=#False
      Else
        TextOn=#True
      EndIf
      gTimeElapsed=ElapsedMilliseconds()
    EndIf
  EndIf
  ExamineKeyboard()
  
  ;--Si on appuie sur la barre d'espacement on stop la musique 
  ;  ON SIGNALE AU CODE QUE LE JEU A COMMENCE
  If KeyboardPushed(#PB_Key_Space)
    StopSound(#Music)    
    DebutJeu = #True
  EndIf
  
  If DebutJeu = #True
    If KeyboardPushed(#PB_Key_Left) And ShipX > 0
      ShipX - 2
    EndIf
    
    If KeyboardPushed(#PB_Key_Right) And ShipX < ScreenWidth() - SpriteWidth(#Ship)
      ShipX + 2
    EndIf
  EndIf
   
  FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End 
Bonus : Le vaisseau se déplace de gauche à droite
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Problème avec un petit jeux que je suis entrain de codé

Message par Bernie »

Merci Falsam
je tout refaire pour mieux comprendre
Répondre